如何在回忆录中创建跨越多页的浮动内容(用于列表)

如何在回忆录中创建跨越多页的浮动内容(用于列表)

对于我的文档,我需要创建几个“listof”页面,所有页面都必须以统一的方式格式化。因此,listings 包中的标准功能支持不足。因此,我使用 document 类memoir并使用其功能newlistof, newfloat& newlistentry。到目前为止一切顺利,但请考虑以下代码:

\begin{ftlisting} %the float to be shown in my listoflistings
\lstinputlisting{code.file}
\caption{Code}
\label{lst:code}
\end{ftlisting}

此模板可以完美编译并运行,除非\lstinputlisting{}命令包含需要拆分成多页的文件。突然,编译失败或文件未拆分成多页。我发现这个问题源于浮动不能跨越多页。当我\lstinputlisting单独使用该命令时,它会将文件正确地拆分成几页。我知道存在一个部分解决方案,即通过将 firstline/lastline 选项传递给命令来手动剪切文件,\lstinputlisting但此解决方案仅适用于 listings 包。有没有更好的解决方法?更完整的 MWE:

\documentclass{memoir}
\usepackage{listings}

\lstset{language=Java,nolol}

\newlistof{listoflistings}{lol}{List of \lstlistingname{}s}
\newfloat[chapter]{ftlisting}{lol}{\lstlistingname}
\newlistentry[chapter]{ftlisting}{lol}{0}

\begin{document}
\begin{ftlisting}
\lstinputlisting{code.java}
\caption{Code}
\label{lst:code}
\end{ftlisting}
\end{document}

答案1

浮动对象不允许分页符。您可以使用memoir's\newfixedcaption定义一个字幕命令,用于浮动环境之外的列表;定义一个辅助(非浮动)环境来包含应允许分页符的列表,并在此环境内使用新的字幕命令来提供字幕。在下面的示例中,myenv是这个包含环境(使用 定义list,因此允许分页符)。

\documentclass[a5paper]{memoir}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{beramono}
\usepackage{filecontents}

\lstset{
  basicstyle=\ttfamily,
  breaklines=true,
  columns=fullflexible
}

\begin{filecontents*}{code.java}
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode
(./2014-01-30.tex
LaTeX2e <2011/06/27>
Babel <3.9f> and hyphenation patterns for 78 languages loaded.
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/size10.clo))
No file 2014-01-30.aux.
[1{/usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./2014-01-30.aux) )</usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsf
onts/cm/cmr10.pfb>
Output written on 2014-01-30.pdf (1 page, 8170 bytes).
SyncTeX written on 2014-01-30.synctex.gz.
Transcript written on 2014-01-30.log.
\end{filecontents*}

\lstset{language=Java,nolol}

\newlistof{listoflistings}{lol}{List of \lstlistingname{}s}
\newfloat[chapter]{ftlisting}{lol}{\lstlistingname}
\newlistentry[chapter]{ftlisting}{lol}{0}
\newfixedcaption{\lstcaption}{ftlisting}

\newenvironment{myenv}
  {\list{}{%
    \leftmargin=0pt
    \topsep=6pt
    \listparindent=\parindent
    \itemindent=\parindent
  }\item\relax}
  {\endlist}

\begin{document}

\listoflistings

\begin{ftlisting}[!ht]
\begin{lstlisting}
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)
 restricted \write18 enabled.
entering extended mode
(./2014-01-30.tex
LaTeX2e <2011/06/27>
\end{lstlisting}
\caption{Code in a floating environment}
\label{lst:fcode}
\end{ftlisting}

\begin{myenv}
\lstinputlisting{code.java}
\lstcaption{Code in a non floating environment}
\label{lst:nfcode}
\end{myenv}

\end{document}

在此处输入图片描述

filecontents包和环境仅用于示例,以便于使用file code.java;该a5paper选项再次仅用于示例;这些设置对于解决方案而言并非必不可少。

相关内容