我正在尝试使用该包格式化目录的标题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 丢弃物品时才有用,所以这是否变得毫无价值?)
编辑:
我能够通过使用\patchcmd
from 来解决我真正的问题(与目录有关) 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}