我正在使用 Pandoc 从 Markdown 生成 Tex。当它遇到适当的 Markdown(代码缩进四个空格)时,它会自动生成列表。然后它使用该listings
包在 Tex 中实例化这些列表。生成的代码是:
\begin{lstlisting}[language=bash]
# java -version
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.3.el6_3.1-i386)
OpenJDK Client VM (build 23.2-b09, mixed mode)
\end{lstlisting}
有时这些代码列表会跨越分页符,如果发生这种情况,我希望它们被移到下一页。我四处查看并看到了一些关于将添加minipage
到列表中的建议,但由于我的 Tex 是通过 Pandoc 自动生成的,因此不清楚如何在不手动编辑生成的 Tex 文档以在列表之前和之后添加小页面的情况下做到这一点。
所以我在寻找:
- 自动将列表移至下一页的方法,或者
- 一种告诉 LaTex 重新定义列表以在其前后包含小页面的方法。
编辑:我应该向那些不熟悉 Pandoc 的人补充一点,它用来生成 Tex 的模板是这里。
谢谢!
答案1
正如 Werner 所指出的,防止listings
任何软件包中断的正常方法是选择float
。但是,如果不更改内部结构,则无法全局执行此操作listing
。
另一个方法是用一个不易破碎的盒子包围环境listings
。这可以通过包中的工具etoolbox
和提供的命令来实现\BeforeEnvironment
:\AfterEnvironment
\BeforeBeginEnvironment{listings}{\par\noindent\begin{minipage}{\linewidth}}
\AfterEndEnvironment{listings}{\end{minipage}\par\addvspace{\topskip}}
当然,minipage
您也可以使用任何其他环境。
答案2
根据之前的回答和评论,这是我使用 Pandoc 1.15 的解决方案。
具体命令行选项:
--listings -H header.latex
具体的header.latex文件内容:
\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}}
\AfterEndEnvironment{lstlisting}{\end{minipage}\par\addvspace{\topskip}}