如何在清单中省略示例代码的最后四行

如何在清单中省略示例代码的最后四行

我正在使用 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}

相关内容