![修复 \vspace* 会破坏其他东西吗?](https://linux22.com/image/233632/%E4%BF%AE%E5%A4%8D%20%5Cvspace*%20%E4%BC%9A%E7%A0%B4%E5%9D%8F%E5%85%B6%E4%BB%96%E4%B8%9C%E8%A5%BF%E5%90%97%EF%BC%9F.png)
感谢对此的回答问题,我相信我有一个修复程序\vspace*
,可以让它在页面顶部正常工作。
\def\@vspacer#1{%
\ifvmode
\dimen@\prevdepth
\begingroup
\topskip\z@skip
\hrule\@height\z@
\nobreak
\endgroup
\vskip#1%
\vskip\z@skip
\prevdepth\dimen@
\else
\@bsphack
\vadjust{%
\@restorepar
\begingroup
\topskip\z@skip
\hrule\@height\z@
\nobreak
\endgroup
\vskip#1%
\vskip\z@skip
}%
\@esphack
\fi
}
与标准定义相比,唯一的变化是添加了\begingroup
、\topskip\z@
和\endgroup
。
据我所知,这应该只影响\vspace*
出现在页面开头的 s。这个想法\vspace*{5in}
应该是 5in,而不是 5in + 10pt。并且不应该在出现在页面顶部的 s\kern-\topskip
之后使用。\vspace*
是否有某种原因导致这个或类似的东西没有出现在 LaTeX 2e 内核中?源代码中没有注释指出和存在任何问题\vspace
。\topskip
事实上,\topskip
源代码中几乎没有提到。
答案1
\documentclass[twocolumn]{article}
\usepackage{showframe}
\begin{document}
\vspace*{0pt}
ASDF
\newpage
ASDF
\end{document}
\vspace{0pt}
是插入命令线高度为 0。但这是一条线,下面的基线更深\baselineskip
。\vspace*{0pt}
或者,\vspace{0pt}
这是一个非常有用的命令,用于在顶部安装平行框。但是,\vspace
是从基线测量的。
答案2
经过一番思考,我认为正确的做法不是修复损坏的\vspace*
行为(因为软件包可能实际上依赖于它的损坏性),而是创建一个新的宏,\Vspace
该宏\@vspacer
可以在任何地方使用,实际上需要获取指定的空间量。
我会等一会儿再接受,看看赫伯特是否能解释他的意思。