这是一个问题使用外部文件列表解决相应的问题。
理想的解决方案是扩展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}