子列表中的列表打破了草稿模式

子列表中的列表打破了草稿模式
%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给类和finallistings也会生成有效文档,但有点违背了将选项设置为 star with 的目的。

只是嵌套项目化和的组合\lstinputlisting似乎中断了。这是为什么?可以避免吗?

答案1

我不确定为什么第二级项目化嵌套会引发错误,但是,这里有几个可行的选项,具体取决于您的偏好......

选项1:如果使用草稿选项的动力主要与图像有关,并在渲染图像时节省编译时间,那么您可以通过以下方式强制列表始终以最终模式显示:

\usepackage[final]{listings}

选项 2:否则,另一个选择是通过序言中的以下内容在草稿模式下关闭列表功能:

\usepackage{ifdraft}
\ifoptiondraft{
    \renewcommand{\lstinputlisting}[1]{\texttt{\textcolor{red}{#1}}}
}{}

这将产生以下结果:

例子

在上面的第二个选项中,文件名以红色突出显示,以指示列表环境已被源文件名替换:

我个人倾向于选项 1,因为草稿模式下的整体布局不能反映正常或最终模式下的整体布局。

相关内容