如何使 fancyvrb 周围的垂直空间对称?

如何使 fancyvrb 周围的垂直空间对称?

我怎样才能消除此处出现的多余空格?

在此处输入图片描述

我希望上方和下方的空间Verbatim相同,但这里似乎仅在底部添加了大约 4-8pt 的额外空间。

\documentclass{article}
\usepackage{fancyvrb}

\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\parsep}{0pt}}

\begin{document}

Here is some text. Here is some text. Here is some text. Here is some text. Here is some text. Here is some text. Here is some text,
\begin{Verbatim}[frame=single]
some code
\end{Verbatim}
which continues later.

\end{document}

改变topsep似乎没有帮助

答案1

使用\showoutput,我们可以在日志文件中查看 latex 如何输入Verbatimenv 的详细信息。问题似乎与框架有关。当涉及到框架时,顶部规则之前的输出(左图)和底部规则之后的输出(右图)如下所示:

在此处输入图片描述

env后面多出来的空格Verbatim是因为 5.05556pt 造成的\baselineskipVerbatimenv 前面没有这个 glue 值,原因是开始绘制的时候\baselineskip\z@设置了 frame 规则,查看fancyvrb.sty文件中相关的 frame 代码(行:812 到 830):

\def\FV@BeginListFrame@Single{%
  \lineskip\z@
  \baselineskip\z@  
  \ifx\FancyVerbFillColor\relax
    \let\FV@FrameFillLine\relax
  \else
    \@tempdima\FV@FrameRule\relax
    \multiply\@tempdima-\tw@
    \edef\FV@FrameFillLine{%
      {\noexpand\FancyVerbFillColor{\vrule\@width\number\@tempdima sp}%
      \kern-\number\@tempdima sp}}%
  \fi
%% DG/SR modification begin - May. 19, 1998
%%  \FV@SingleFrameLine
  \FV@SingleFrameLine{\z@}%
%% DG/SR modification end
  \penalty\@M
  \FV@SingleFrameSep
  \penalty\@M}

因此,如果我们在环境\vspace{5.05556pt}之前添加一个Verbatim,它应该在上方和下方之间提供几乎相同的垂直空间(在输入过程中仍有一些橡胶长度,我认为它们不是精确的值)。

\documentclass{article}
\usepackage{lipsum}
\usepackage{fancyvrb}
\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\parsep}{0pt}}
\showoutput
\begin{document}

Here is some text.
\begin{Verbatim}[frame=single]
some code
\end{Verbatim}
which continues later.

Here is some text.
\vspace{5.05556pt}\begin{Verbatim}[frame=single]
some code
\end{Verbatim}
which continues later.
\end{document}

在此处输入图片描述

相关内容