停止列表超出分页符

停止列表超出分页符

我正在使用 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 文档以在列表之前和之后添加小页面的情况下做到这一点。

所以我在寻找:

  1. 自动将列表移至下一页的方法,或者
  2. 一种告诉 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}}

相关内容