投影仪文章模式中的伪代码(列表)?

投影仪文章模式中的伪代码(列表)?

我正在尝试使用 Beamer 在演示幻灯片和讲义中生成伪代码。

我可以在幻灯片中使用 listings 包,只需将其添加[fragile]到框架环境中即可。但是,在文章模式下,如何使用 lstlistings 环境?下面是一个最小示例。

文件:slides.tex

\documentclass{beamer}
\input{mwe-body.tex}

文件:notes.tex

\documentclass{article}
\usepackage{beamerarticle}
\input{mwe-body.tex}

文件:mwe-body.tex

\usepackage{listings}
\begin{document}

\begin{frame}[fragile]
\frametitle{Frame 1}
test 1
\begin{lstlisting}
    int sum = 0;
\end{lstlisting}
\end{frame}

\mode<article>{
test 2

\begin{lstlisting}
    int sum = 1;
\end{lstlisting}
}
\end{document}

pdflatex slides.tex用于生成演示文稿。

pdflatex notes.tex有以下错误:

Runaway argument?
! Paragraph ended before \lst@next was complete.
<to be read again>
               \par
l.18 }

有什么解决办法吗?

答案1

这是逐字类参数的典型特征——您不能不小心将它们作为参数传递给其他宏。如上所述,[fragile]提供必要的关心lstlisting在环境内部使用时frame。对于使用lstlisting内部<article>模式,我建议首先将列表捕获到框内:

在此处输入图片描述

\documentclass{article}

\usepackage{beamerarticle}
\usepackage{listings}

\newsavebox{\codebox}

\begin{document}

\begin{frame}[fragile]

  \frametitle{Frame 1}

  test 1
\begin{lstlisting}
int sum = 0;
\end{lstlisting}

\end{frame}

% Store listing inside \codebox
\begin{lrbox}{\codebox}
\begin{lstlisting}
int sum = 1;
\end{lstlisting}
\end{lrbox}

\mode<article>{
  test 2

  \noindent
  \usebox{\codebox}% Print stored listing
}

\end{document}

相关内容