我正在使用 \verbatiminput 将一堆代码片段粘合在一起,我想消除片段之间通常会出现的垂直空间(粘合)。但我无法使用,\unskip
因为它仅适用于水平模式。
是否有类似于\unskip
垂直模式的(如果是粘合,则删除当前列表中的最后一项)?
对于那些要求示例的人:
\usepackage{verbatim}
...
\verbatiminput{one}
\verbatiminput{two}
\verbatiminput{three}
我想删除在连续调用之间插入的额外间距\verbatiminput
。
答案1
如评论中所述,\unskip
如果您在框中,则在垂直模式下有效。或者您可以,\vskip-\lastskip
但更好的方法是首先不要添加空间。
LaTeX\addvspace
尽量避免添加空格,除非最近添加了空格,否则其工作方式类似\vspace
或vskip
。(这样两个连续的显示环境就不会在中间出现双倍空格。)也许你想要\nointerlineskip
或offinterlineskip
这样 TeX 就不会在你添加的垂直材料之前自动添加跳过,
答案2
您可以尝试检查是否\verbatiminput
跟有 a ,在这种情况下,删除插入的跳过(两次\topsep
):
\documentclass{article}
\usepackage{verbatim}
\makeatletter
\def\verbatim@input#1#2{%
\IfFileExists {#2}{\@verbatim #1\relax
\verbatim@readfile{\@filef@und}\endtrivlist\endgroup\@doendpe}%
{\typeout {No file #2.}\endgroup}%
%% Added code
\@ifnextchar\verbatiminput{\vspace{-2\topskip}}{}%
}
\makeatother
\begin{document}
\verbatiminput{beer}
\verbatiminput{beer}
This is no beer.
\verbatiminput{beer}
This is no beer.
\end{document}
这是beer.tex
:
\let~\catcode~`x13~`q~`x~`z~`q~`H~`q~`B~`H~`j0~`jA009
jlet~jlet~Hjpar ~Bjmscount~~jdef~x{q bottlez of beer}
~jw{x on the wall}~jt{jadvanceAB-1ATake one down Aand
pass it around,H}B99~ji{jifnumB}~q{ji=0Nojelsejnumber
Bjfi}~z{ji>1sjfiA }jloop jifnumB>0 jw, x,Hjtjw.jvskip
8ptplus1ptjrepeat Time to buy some more beerjdotsjend
也许,更好的解决方案是使用不同的命令,我们称之为\multiverbatiminput
接受文件名列表的命令:
\documentclass{article}
\usepackage{verbatim}
\makeatletter
\def\multiverbatiminput{\begingroup
\@ifstar{\multiverbatim@input\relax}%
{\multiverbatim@input{\frenchspacing\@vobeyspaces}}}
\def\multiverbatim@input#1#2{%
\@verbatim #1\relax
\@for\next:=#2\do{%
\IfFileExists{\next}{\verbatim@readfile{\@filef@und}}
{\typeout {No file \next.}}}%
\endtrivlist\endgroup\@doendpe}
\makeatother
\begin{document}
This is beer
\multiverbatiminput{beer,beer}
Also this is
\multiverbatiminput{beer}
This is no beer.
\end{document}