是否有与 \unskip 类似的垂直模式?

是否有与 \unskip 类似的垂直模式?

我正在使用 \verbatiminput 将一堆代码片段粘合在一起,我想消除片段之间通常会出现的垂直空间(粘合)。但我无法使用,\unskip因为它仅适用于水平模式。

是否有类似于\unskip垂直模式的(如果是粘合,则删除当前列表中的最后一项)?

对于那些要求示例的人:

\usepackage{verbatim}

...

\verbatiminput{one}
\verbatiminput{two}
\verbatiminput{three}

我想删除在连续调用之间插入的额外间距\verbatiminput

答案1

如评论中所述,\unskip如果您在框中,则在垂直模式下有效。或者您可以,\vskip-\lastskip但更好的方法是首先不要添加空间。

LaTeX\addvspace尽量避免添加空格,除非最近添加了空格,否则其工作方式类似\vspacevskip。(这样两个连续的显示环境就不会在中间出现双倍空格。)也许你想要\nointerlineskipoffinterlineskip这样 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}

相关内容