控制 Verbatim 环境后的垂直空间

控制 Verbatim 环境后的垂直空间

我想控制Verbatim环境后的垂直空间fancyvrb。甚至设置\topsep\partopsep0pt,如木子木志的回答,在盒装代码后给我一些额外的空间。

\documentclass{article}\setlength{\textwidth}{200pt}
\usepackage{lipsum}
\usepackage{fancyvrb}
\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}}

\begin{document}
\lipsum[1][1]

\begin{Verbatim}[frame=single]
  Some content
  here, with its
  own box
\end{Verbatim}

\lipsum[2][1]
\end{document}

在此处输入图片描述

在更坏的情况下,我只需在自定义环境定义中添加负空间即可。但我宁愿了解这里发生了什么,并避免因不了解当前间距情况而创建补丁。

pdftexPS 如果能打印出这里使用的盒子和胶水来弄清楚到底发生了什么就好了。

调试

  • 全局使用\setlength{\parskip}{0pt}不产生任何作用。
  • \nointerlineskip在环境修复后立即添加Verbatim该问题,尽管我不确定为什么(请参阅对已接受答案的评论以获取解释)。

在此处输入图片描述

答案1

您可以\prevdepth\dp\strutbox在环境后添加

\documentclass{article}\setlength{\textwidth}{200pt}
\usepackage{lipsum}
\usepackage{fancyvrb}
\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}}

\begin{document}
\lipsum[1][1]

\begin{Verbatim}[frame=single]
  Some content
  here, with its
  own box
\end{Verbatim}
\prevdepth\dp\strutbox

\indent\smash{\rule{1pt}{\ht\strutbox}}\lipsum[2][1]
\end{document}

\rule仅用于演示;至少在最近的 LaTeX 中\indent暗含了这一点)\smash

输出

或者使用现代的 LaTeX:

\documentclass{article}\setlength{\textwidth}{200pt}
\usepackage{lipsum}
\usepackage{fancyvrb}
\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}}

\AddToHook{env/Verbatim/after}{\prevdepth\dp\strutbox}
\begin{document}
\lipsum[1][1]

\begin{Verbatim}[frame=single]
  Some content
  here, with its
  own box
\end{Verbatim}

\lipsum[2][1]
\end{document}

添加更多破碎的规则来说明实现的精确分离:
\documentclass{article}\setlength{\textwidth}{200pt}
\usepackage{lipsum}
\usepackage{fancyvrb}
\fvset{listparameters=\setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}}

\begin{document}
\lipsum[1][1]\strut\smash{\rule[-\dp\strutbox]{1pt}{\dp\strutbox}}

\begin{Verbatim}[frame=single]
  Some content
  here, with its
  own box
\end{Verbatim}
\prevdepth\dp\strutbox

\noindent\kern-1.5pt\smash{\rule{3pt}{\ht\strutbox}}\kern-1.5pt\kern\parindent\smash{\rule{1pt}{\ht\strutbox}}\lipsum[2][1]
\end{document}

我们需要\strut在框架上方的最后一行中设置一个。我们已将所有额外空间设置为零。本文档未修改,\parskip因为它默认为0pt plus 1pt。要实现“前后空间完全相同”需要说“什么与什么之间的空间”。我们很清楚从顶部或底部框架开始测量空间,但不清楚我们在哪里停止测量空间?它是到最近墨水的距离,所以取决于线条是否包含下降部(用于顶部)或上升部(用于底部),或者我们是否测量到基线的距离。如果是后一种情况,我们可能不应该坚持上下空间相同,因为字母的情况并不对称:它们上升的高度大于下降的高度。

规则

相关内容