%sublisting.tex
\documentclass[draft]{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[allowframebreaks]
\begin{itemize}
\item Here follows the source code of this document.
\item \lstinputlisting{sublisting.tex}
\item And now the same again, one level nested.
\begin{itemize}
\item
\lstinputlisting{sublisting.tex}
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
将此文档编译为时draft
,会出现错误
! LaTeX Error: Something's wrong--perhaps a missing \item.
不使用draft
类选项进行编译完全没问题,只需删除第二个列表即可。第一个列表虽然除了项化嵌套深度之外完全相似,但始终可以顺利编译。传递draft
给类和final
包listings
也会生成有效文档,但有点违背了将选项设置为 star with 的目的。
只是嵌套项目化和的组合\lstinputlisting
似乎中断了。这是为什么?可以避免吗?
答案1
我不确定为什么第二级项目化嵌套会引发错误,但是,这里有几个可行的选项,具体取决于您的偏好......
选项1:如果使用草稿选项的动力主要与图像有关,并在渲染图像时节省编译时间,那么您可以通过以下方式强制列表始终以最终模式显示:
\usepackage[final]{listings}
选项 2:否则,另一个选择是通过序言中的以下内容在草稿模式下关闭列表功能:
\usepackage{ifdraft}
\ifoptiondraft{
\renewcommand{\lstinputlisting}[1]{\texttt{\textcolor{red}{#1}}}
}{}
这将产生以下结果:
在上面的第二个选项中,文件名以红色突出显示,以指示列表环境已被源文件名替换:
我个人倾向于选项 1,因为草稿模式下的整体布局不能反映正常或最终模式下的整体布局。