如何同时跳过前 n 行和后 m 行?

如何同时跳过前 n 行和后 m 行?

我正在使用showexpl.sty并排显示代码片段及其相应的输出。

由于论文大小的限制,我有意从代码片段中删除“冗余”的行,即前 n 行和后 m 行。

可以在 中做到这一点吗showexpl.sty

\documentclass{article}

\usepackage{showexpl}
\lstset{%
% any setting goes here.
}
\begin{document}

\begin{LTXexample}[%
%any option goes here.
]
%redundant n rows begin
% one
% two
% ...
% n th rows
Important parts go here.
Again... it is important!
...
%redundant m rows begin
% one 
% ...
% m th rows
\end{LTXexample}

% others important parts go here.
\end{document}

我重新提出这个问题是因为linerange当我直到“运行时”才知道行数时,使用是不可能的。


我将使用@Herbert 的解决方案进行内联代码包含,使用@TH 的解决方案进行外部代码包含。不幸的是,我无法让 2 个绿色标记通过。

答案1

定义一个自己的环境,使用\START--\STOP序列来列出需要列出的部分。这两个命令本身没有任何意义。你不需要知道你的代码有多少行。

\documentclass{article}
\makeatletter
\let\pc\@percentchar
\makeatother

\usepackage{pstricks,fancyvrb,array,listings}
\lstset{basicstyle=\ttfamily\small}

\def\endExample{\end{VerbatimOut}
  \def\START{}\def\STOP{}\input{\jobname.tmp}}
\newcommand\Example{%
\VerbatimEnvironment
\begin{VerbatimOut}{\jobname.tmp}}

\begin{document}

\begin{tabular}{@{} m{0.5\linewidth}@{} 
                    >{\lstinputlisting[includerangemarker=false,
                    linerange=\\START-\\STOP]{\jobname.tmp}}m{0.5\linewidth} @{}}

\begin{Example}
\pspicture(3,2)
\START
\psframe*[linecolor=blue!30](3,2)
\STOP
\endpspicture
\end{Example}
& 
\tabularnewline

\begin{Example}
\pspicture(3,2)
\START
\psframe*[linecolor=red!30](3,2)
\endpspicture
\STOP
\end{Example}
& 
\tabularnewline

\end{tabular}

\end{document}

答案2

您可以随时预先计算出文件中的行数。

% This line will be removed
\documentclass{article}
\usepackage{listings}
\newread\lf
\newcount\linecount
\newcommand\linesinfile[1]{%
        \linecount0
        \openin\lf#1
        \unless\ifeof\lf
                \loop
                        \readline\lf to\lfline
                \unless\ifeof\lf
                        \advance\linecount by1
                \repeat
                \closein\lf
        \fi
}
\begin{document}
\linesinfile{\jobname.tex}
There are \number\linecount\ lines in the file `\jobname.tex'.

\small
\lstinputlisting[language={[LaTeX]TeX},firstline=2,
lastline=\numexpr\linecount-1]{\jobname.tex}
\end{document}
% This line will be removed

答案3

如果有人对 ConTeXt 中的类似结果感兴趣:

\typefile[range={+5,-8}]{filename}

将删除前五行和后八行。

相关内容