如何从内联列表中省略最后 n 行?

如何从内联列表中省略最后 n 行?

这是一个问题使用外部文件列表解决相应的问题。

理想的解决方案是扩展lastline键以接受负值并从末尾计算省略的行,就像答案回答链接的问题。

希望重新定义而不是某些新环境(可能更容易实现)的主要原因lastline是易于与其他包集成,例如tcolorbox

一个不起作用的最小示例是

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[lastline=-2]
first
second
third
fourth
\end{lstlisting}
\end{document}

其中只有列表的第一行和第二行会显示在输出中。

链接答案的核心技巧包括第一次在框中设置列表,获取行计数器的值(仍然保留最后一行的索引),然后第二次设置列表以计算正确的值lastline。我尝试将其适应这种情况,但没有成功,因为我对内部结构不够了解listings。可以做到吗?

答案1

如果您打算将此功能用于tcolorbox,如您所写,有一个简单的方法。tcblistings环境将列表内容保存到文件中并重新加载。因此,来自的补丁如何在清单中省略示例代码的最后四行可以应用:

\documentclass{article}
\usepackage[most]{tcolorbox}

\makeatletter
\lst@Key{lastline}\relax{\ifnumcomp{#1}{<}{0}{%
  %\let\mylst@file\lst@intname\sbox0{\lstinputlisting{\mylst@file}}% UPDATE
  \sbox0{\lstinputlisting{\kvtcb@listingfile}}% UPDATE
  \def\lst@lastline{\the\numexpr#1+\value{lstnumber}-1\relax}}%
  {\def\lst@lastline{#1\relax}}}
\makeatother

\begin{document}
\begin{tcblisting}{listing options={lastline=-2}}
first
second
third
fourth
\end{tcblisting}

\begin{tcblisting}{listing only,listing options={lastline=-2}}
first
second
third
fourth
\end{tcblisting}

\begin{tcblisting}{blankest,listing only,listing options={lastline=-2}}
first
second
third
fourth
\end{tcblisting}
\end{document}

在此处输入图片描述

相关内容