\lstinputlisting 不会继续下一页

\lstinputlisting 不会继续下一页

所以我有这个 LaTeX 片段:

\section{Appendix}
\listoffigures
...
\begin{center}
\begin{figure}
\caption{MacroCell with 8 AND Gate Arrays}
\lstinputlisting[language=VHDL,numbers=left,breaklines=true,basicstyle=\footnotesize, float=h]{macrocell8.vhd}
\end{figure}
\end{center}
\pagebreak

我一直使用此模板显示我的代码,但有时它不会继续到下一页并居中。我尝试了许多不同的方法,有时如果我移动它,\end{figure}它会起作用,但今天都不起作用...:

\section{Appendix}
\listoffigures
...
\begin{center}
\begin{figure}
\caption{MacroCell with 8 AND Gate Arrays}
\end{figure}
\lstinputlisting[language=VHDL,numbers=left,breaklines=true,basicstyle=\footnotesize, float=h]{macrocell8.vhd}
\end{center}
\pagebreak

答案1

环境lstlisting(无论是直接使用还是通过\lstinputlisting)与float说明符一起使用不会跨页拆分。float键将整个列表框成一个单元或块,使其可以浮动。 它不会将列表拆分成单独的浮动元素,而是将其作为连续单元移动。 这类似于环境施加的限制minipage。 即使listings包裹 文档提到断线(以及一系列断线选项),它们都指的是换行,而不是分页。

因此,为了让列表跨页显示,您可以删除键值float=<specifier>。但是,这无法为后续的分页列表提供自动(连续)标题。如果列表仅跨两页,这可能并不那么重要(或不是什么大问题),因为读者可以轻松跟上分页列表。但是,跨多页的列表可能不是一个好主意。

或者,如果您愿意,您可以手动将列表分成(至少)两个块,以便每个块都不大于单个页面。为此,您可以结合使用firstlinelastline选项:

% First part of listing
\lstinputlisting[...,lastline=<x>]{<filename>}

% Second part of listing
\lstinputlisting[...,firstline=<x+1>,firstnumber=<x+1>]{<filename>}

其中<x>是 第一部分的最后一行lstlisting, 是<x+1>第二部分的第一行lstlisting。如果您在列表中使用行号,则可能需要指定第二部分的行号,因为这可能默认从 开始1。因此,将 添加firstnumber=<x+1>作为lstlisting键值序列的一部分。您可能还需要修改列表标题,并指定列表从前一个列表继续,而不是使用与前一个列表不匹配的数字。如果您的列表必须分为两页以上,则使用与上述相同的配置,并使用linerange=<first>-<last>,firstnumber=<first>表示中间列表。

没有必要将lstinputlisting环境放置在浮点数中(如figure),因为包提供了它自己的浮动列表形式(通过键值float=<specifier>)。

最后,还有一个可行的但并不容易实现的替代方法,那就是实际缩短代码,以便列表可以放在一页上。

附言一下,将center环境包裹在浮动环境(如figure)周围也无济于事,而且会导致问题。无论如何,最外层的环境应该是浮动(table、 或figure、 或...),其中包含格式化环境。

答案2

代替

\begin{center}
\begin{figure}
\caption{MacroCell with 8 AND Gate Arrays}
\lstinputlisting[language=VHDL,numbers=left,breaklines=true,
                 basicstyle=\footnotesize, float=h]{macrocell8.vhd}
\end{figure}
\end{center}

使用

\lstinputlisting[language=VHDL,numbers=left,breaklines=true,
                 basicstyle=\footnotesize, 
                 caption={MacroCell with 8 AND Gate Arrays}]{macrocell8.vhd}

但是,如果您需要将其命名为“图形...”,则将其用作

\captionof{figure}{MacroCell with 8 AND Gate Arrays}
\lstinputlisting[language=VHDL,numbers=left,breaklines=true,
                 basicstyle=\footnotesize]{macrocell8.vhd}

需要caption包装\captionof

相关内容