1

I am trying to use the code from section title in \frametitle beamer

\documentclass{beamer}
\usetheme{Berkeley} 

\newenvironment{slide}[1]
{\begin{frame}[environment=slide]
\frametitle{\insertsection-#1}}
{\end{frame}}

\begin{document}    
\begin{slide}
\begin{enumerate}
\item lorem
\end{enumerate}
\end{slide}
\end{document}

but get the error

! LaTeX Error: Lonely \item--perhaps a missing list environment.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.15     \end{slide}
  • 2
    Consider to add the fragile option for such slide wrapper environments –  Dec 31 '16 at 17:58
  • @ChristianHupfer Done. I am testing its effect but cannot really understand. Docs say fragile every contents is written into an external file and read back. Not a big deal but makes compiling slow in the thread http://tex.stackexchange.com/questions/136240/drawbacks-of-using-fragile-frames-in-beamer – Léo Léopold Hertz 준영 Dec 31 '16 at 18:07

2 Answers2

4

The definition of the slide environment here requires a title an the argument. Thus here \begin is being taken as the argument, we have no list starting and \item is misplaced (as the error says). You can fix by supplying something

\documentclass{beamer}
\usetheme{Berkeley} 

% 
\newenvironment{slide}[1]
{\begin{frame}[environment=slide]
\frametitle{\insertsection-#1}}
{\end{frame}}

\begin{document}    
\begin{slide}{Foo}
\begin{enumerate}
\item lorem
\end{enumerate}
\end{slide}
\end{document}

If the frame title is not required then drop the argument entirely

\documentclass{beamer}
\usetheme{Berkeley} 

% 
\newenvironment{slide}
{\begin{frame}[environment=slide]
\frametitle{\insertsection}}
{\end{frame}}

\begin{document}    
\begin{slide}
\begin{enumerate}
\item lorem
\end{enumerate}
\end{slide}
\end{document}
Joseph Wright
  • 259,911
  • 34
  • 706
  • 1,036
  • Is there any workaround for this? - - You can do \begin{slide}{} but it will insert the line - which I would not like to have. – Léo Léopold Hertz 준영 Dec 31 '16 at 17:56
  • 1
    @LéoLéopoldHertz준영 The entire point of the definition of the slide environment here is to have a 'forced' frame title. If you don't want one, just stick to the standard beamer frame environment and add \frametitle as required. – Joseph Wright Dec 31 '16 at 17:57
  • Yes, but if you already have \section which forces the title. I just do not want always have the second part. – Léo Léopold Hertz 준영 Dec 31 '16 at 18:01
0

Easy to do without the newenvironment:

\documentclass{beamer}
\usepackage{xpatch}

\makeatletter
\patchcmd\beamer@@tmpl@frametitle{\insertframetitle}{\insertsection{} -- \insertframetitle}{}{}
\makeatother

\begin{document}

\section{Sec shun 2}
\begin{frame}{My title 2}
\begin{enumerate}
\item lorem
\end{enumerate}
\end{frame}

\end{document}