我正在使用 listing 包将 xml 示例包含在我正在编写的文档中。
我知道 firstline 和 lastline 属性
\lstinputlisting[firstline=4,lastline=24]{example.xml}
XML 文件的大小会随时间而变化。我不需要更改每个列表的 lastline 参数,而是希望说明应省略最后 x 行以进行包含,这可能吗?
答案1
\sbox0{\lstinputlisting{example.xml}}
\lstinputlisting[firstline=4,lastline=\the\numexpr\value{lstnumber}-5\relax]{example.xml}
这会将您的输入文件保存在一个框中以计算其行数(因此文件不会在文档中排版)。此数字保存在计数器中,lstnumber
因此您可以在实际插入代码时使用它来设置最后一行。如果您不想显示最后 4 行,则必须将计数器减去 5,因为它会在行结束后递增。因此,如果您的文件在第一次调用计数器后有 8 行,则计数器\lstinputlisting
设置为 9。
这可以调整以允许您编写
\lstinputlisting[firstline=4,lastline=-4]{example.xml}
省略最后四行,如下所示:
\documentclass{article}
\usepackage{listings,etoolbox}
\makeatletter
\lst@Key{lastline}\relax{\ifnumcomp{#1}{<}{0}{%
\let\mylst@file\lst@intname\sbox0{\lstinputlisting{\mylst@file}}%
\def\lst@lastline{\the\numexpr#1+\value{lstnumber}-1\relax}}%
{\def\lst@lastline{#1\relax}}}
\makeatother
\begin{document}
\lstinputlisting[firstline=4,lastline=-4]{example.xml}
\end{document}