LaTeX - 投影仪框架内的代码列表上有多个页面

LaTeX - 投影仪框架内的代码列表上有多个页面

我正在尝试将一些 Python 代码放在投影仪幻灯片上。我想获取一个大文件并用 打印它lstinputlisting

我尝试使用以下命令将框架设置为脆弱:

\begin{frame} [fragile]
    \lstinputlisting{my_big_file.py}     
\end{frame}

编译成功,但是 LaTeX 好像忽略了我 =(

我是否遗漏了什么?

答案1

通常,该allowframebreaks选项允许过长的内容创建多个框架。但是,这似乎不适用于\lstinputlisting。因此,我的建议是使用循环,例如每张幻灯片仅包含 10 行代码。如果真的应该为演示文稿执行此操作,这是一个自己的问题,我只会回答技术部分。

这里我使用\foreachfrompgffor以 10 为步长循环从第一页到最后一页(本例中为 120 页)。then\only<+>用于创建新幻灯片作为框架的一部分。我还添加了一个副标题来显示当前行号。这需要手动扩展,因为否则循环变量无法访问。

\documentclass{beamer}
\usepackage{listings}
\usepackage{pgffor}
\begin{document}

\begin{frame}{My code}
    \lstset{language=python,basicstyle=\sffamily\small}%
    \foreach \n in {1,11,...,120} {%
       \only<+>{%
            \edef\m{\the\numexpr\n+9\relax}%
            \edef\thesubtitle{{Lines \n--\m\ / 120}}%
            \expandafter\framesubtitle\thesubtitle
            \lstinputlisting[firstline=\n,lastline=\m]{my_big_file.py}%
       }%
    }
\end{frame}

\end{document}

此代码创建了 12 张幻灯片。您只需调整标题文本和最大行数。请注意,fragile此处不需要该选项,因为frame实际上并不直接包含逐字材料。

相关内容