beamer:\only 和 lstlisting 不能一起工作

beamer:\only 和 lstlisting 不能一起工作

我有一张分为两列的幻灯片,其中一列应包含代码块,该代码块会在接下来的幻灯片中发生变化。此代码有效:

\documentclass{beamer}
\usepackage[utf8x]{inputenc}
\usepackage{listings}

\begin{document}
\begin{frame}[fragile]
\frametitle{Title ®}
\centering

\begin{columns}[onlytextwidth]
\begin{column}{0.4\textwidth}
Figure
\end{column}

\begin{column}{0.5\textwidth}
%\only<1>{
    \begin{block}{Block1}
        \begin{lstlisting}
        if(1) {}
        \end{lstlisting}
    \end{block}
%}
%\only<2>{
    \begin{block}{Block2}
        \begin{lstlisting}
        if(2) {}
        \end{lstlisting}
    \end{block}
%}
\end{column}
​\end{columns}

\end{frame}
\end{document}

但当我取消注释时

\only<1>{
...
}
\only<2>{
...
}

我收到错误:

! 额外 },或忘记 \endgroup. l.23 }

我该如何解决?

答案1

论证中的逐字逐句材料是有问题的。请使用onlyenv环境:

\documentclass{beamer}
\usepackage[utf8x]{inputenc}
\usepackage{listings}

\begin{document}
\begin{frame}[fragile]
\frametitle{Title ®}
\centering

\begin{columns}[onlytextwidth]
\begin{column}{0.4\textwidth}
Figure
\end{column}

\begin{column}{0.5\textwidth}
\begin{onlyenv}<1>
    \begin{block}{Block1}
        \begin{lstlisting}
        if(1) {}
        \end{lstlisting}
    \end{block}
\end{onlyenv}
\begin{onlyenv}<2>
    \begin{block}{Block2}
        \begin{lstlisting}
        if(2) {}
        \end{lstlisting}
    \end{block}
\end{onlyenv}
\end{column}
​\end{columns}

\end{frame}
\end{document}

在此处输入图片描述

相关内容