我正在尝试将一些 Python 代码放在投影仪幻灯片上。我想获取一个大文件并用 打印它lstinputlisting
。
我尝试使用以下命令将框架设置为脆弱:
\begin{frame} [fragile]
\lstinputlisting{my_big_file.py}
\end{frame}
编译成功,但是 LaTeX 好像忽略了我 =(
我是否遗漏了什么?
答案1
通常,该allowframebreaks
选项允许过长的内容创建多个框架。但是,这似乎不适用于\lstinputlisting
。因此,我的建议是使用循环,例如每张幻灯片仅包含 10 行代码。如果真的应该为演示文稿执行此操作,这是一个自己的问题,我只会回答技术部分。
这里我使用\foreach
frompgffor
以 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
实际上并不直接包含逐字材料。