所以我有这个 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>
。但是,这无法为后续的分页列表提供自动(连续)标题。如果列表仅跨两页,这可能并不那么重要(或不是什么大问题),因为读者可以轻松跟上分页列表。但是,跨多页的列表可能不是一个好主意。
或者,如果您愿意,您可以手动将列表分成(至少)两个块,以便每个块都不大于单个页面。为此,您可以结合使用firstline
和lastline
选项:
% 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