为什么 \vspace*{0pt} 会增加垂直空间?

为什么 \vspace*{0pt} 会增加垂直空间?

我正在尝试使用该包格式化目录的标题tocloft。它插入如下所示的代码。

\par
\vspace*{\cftbeforetoctitleskip}%
% code to typeset \contentsname

正在\vspace*添加不必要的空间。下面是一个演示该问题的简单示例。

\documentclass{article}
\usepackage{showframe}
\begin{document}
\vspace*{0pt}%
ASDF
\end{document}

将其与之比较\vspace{0pt}(或者干脆\vspace完全省略该行)。

\vspace和的区别\vspace*很明显。加上星号,它就扩展为

\dimen@\prevdepth
\hrule \@height\z@
\nobreak
\vskip#1%
\vskip\z@skip
\prevdepth\dimen@

如果没有星号,它就会扩展为只有两个\vskips

为什么会有额外的空间?(还有附加问题:\vspace*由于星号只有在 TeX 丢弃物品时才有用,所以这是否变得毫无价值?)

编辑:
我能够通过使用\patchcmdfrom 来解决我真正的问题(与目录有关) etoolbox

答案1

为了确保即使在文档中分页的位置或页面的顶部或底部也产生空白,应该用\vspace替换\vspace*

在页面的开头\topskip插入,通常是\topskip=10pt。设置 topskip=0pt\offinterlineskip将对vspace和产生相同的结果vscpace*

\documentclass{article}
\usepackage{showframe}
\begin{document}
\topskip=0pt  \offinterlineskip 
\vspace*{0pt}%
ASDF

\end{document}

\offinterlineskip是全局防止行间粘连的宏。尝试运行这两个示例以查看区别。

\documentclass{article}
\usepackage{showframe}
\begin{document}
\topskip=0pt  %\offinterlineskip 
\vspace*{0pt}%
ASDF
\end{document}

相关内容