修复 \vspace* 会破坏其他东西吗?

修复 \vspace* 会破坏其他东西吗?

感谢对此的回答问题,我相信我有一个修复程序\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可以在任何地方使用,实际上需要获取指定的空间量。

我会等一会儿再接受,看看赫伯特是否能解释他的意思。

相关内容