我想控制Verbatim
环境后的垂直空间fancyvrb
。甚至设置\topsep
和\partopsep
到0pt
,如木子木志的回答,在盒装代码后给我一些额外的空间。
\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}
在更坏的情况下,我只需在自定义环境定义中添加负空间即可。但我宁愿了解这里发生了什么,并避免因不了解当前间距情况而创建补丁。
pdftex
PS 如果能打印出这里使用的盒子和胶水来弄清楚到底发生了什么就好了。
调试
- 全局使用
\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
。要实现“前后空间完全相同”需要说“什么与什么之间的空间”。我们很清楚从顶部或底部框架开始测量空间,但不清楚我们在哪里停止测量空间?它是到最近墨水的距离,所以取决于线条是否包含下降部(用于顶部)或上升部(用于底部),或者我们是否测量到基线的距离。如果是后一种情况,我们可能不应该坚持上下空间相同,因为字母的情况并不对称:它们上升的高度大于下降的高度。