我发现自己写道:
\vspace 1 \baselineskip
然后,当它没有编译时,不加思索地更改为:
\vskip 1 \baselineskip
但有什么区别呢?也许知道这一点会让我在将来从一开始就写出正确的文章……
答案1
语法
\vspace 1\baselineskip
是不正确的,因为\vspace
(或者更准确地说,内部版本\@vspace
)是一个接受一个参数的命令,所以这相当于
\vspace{1}\baselineskip
这会引发错误。但是,这两个调用
\vspace{1\baselineskip}
\vskip 1\baselineskip
并不等价。如果在 LR 模式下(使用 LaTeX 用语;TeX 用语中的水平模式)给出,前者不会强制段落结束,而是在排版文档中出现的行下添加规定的垂直间距。使用 (\vskip
这是一个原始的 TeX 命令),当前段落将终止。
您\vspace
还可以使用 * 版本,它提供不会在分页符处消失的垂直空间;使用 插入的间距\vskip
将总是在分页符处消失。
一般来说,最好\vspace
在段落之间发布,但在某些情况下“段落内”功能可能会派上用场。
最后,
\vskip 1\baselineskip
Plus one
对于那些不熟悉 Plain TeX 术语的人来说,这会给他们带来一些惊讶。
好奇者请注意:\vglue 1\baselineskip
结束段落并产生不会在分页符处消失的间距。LaTeX 手册中没有记录这一点,这很好。
答案2
我注意到了这个问题,因为它几个小时前出现在活跃问题列表的顶部,我想对@egreg 给出的出色回答添加另一个小小的评论。
还有一个区别
\vskip \medskipamount % say
和
\vspace{\medskipamount}
\addvspace
并且当and/or\addpenalty
命令紧随其后时,它们会如何表现。事实上,\vspace
添加了一个第二零长度跳过,导致随后的\addvspace
(resp., \addpenalty
) 命令不是删除前面的空格,然后再添加自己的垂直空间(即惩罚)。当然,这个零长度跳过不是由 添加的\vskip
,这是一个原始命令,其效果是,\addvspace
紧随其后的(即,没有当前垂直列表中的中间项目)将删除添加的垂直空间,\vskip
如果它比其自身参数中指定的空间短。
换句话说,如果你说
\vspace{\medskipamount}
\addvspace{\bigskipamount}
两个都\medskipamount
空格将保留,您将获得+的总垂直空间\bigskipamount
,而
\vskip \medskipamount
\addvspace{\bigskipamount}
只有较高的一个空间能够保留下来(\bigskipamount
在本例中是)。
的行为\addpenalty
类似,但为了看得更清楚,我们需要查看 产生的跟踪\showlists
。考虑以下 (几乎) MWE:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
% \usepackage[ascii]{inputenc}
\showboxbreadth = 1000
\showboxdepth = 10
\begin{document}
Short paragraph~\#1.
\vskip \medskipamount
\addvspace{\bigskipamount}
Short paragraph~\#~2.
\vspace{\medskipamount}
\addvspace{\bigskipamount}
Short paragraph~\#~3.
Let's now consider penalties. To see the difference, you'll have to look at
the transcript file, and read the tracing produced by \verb|\showlists|.
Short paragraph~\#4.
\vskip \medskipamount
\addpenalty{123}
\addvspace{\bigskipamount}
Short paragraph~\#~5.
\vspace{\medskipamount}
\addpenalty{123}
\addvspace{\bigskipamount}
Short paragraph~\#~6.
\showlists
\end{document}
这是“短段落”#4 和#5 之间的追踪摘录:
\glue 6.0 plus 2.0 minus 2.0
\glue -7.94397 plus -2.0 minus -2.0
\penalty 123
\glue 1.94397
\glue 6.0 plus 2.0 minus 2.0
\glue -6.0 plus -2.0 minus -2.0
\glue 12.0 plus 4.0 minus 4.0
\glue(\parskip) 0.0 plus 1.0
-7.94397 plus -2.0 minus -2.0
如您所见,惩罚项前有一个 (points) 的退格键:此退格键既补偿了6.0 plus 2.0 minus 2.0
来自 的前一个垂直空间 (always points) \vskip \medskipamount
,也补偿了最后一行文本的深度(后者是最近对旧 LaTeX 错误的更正)。还请注意 之前的第二个退格键\glue 12.0 plus 4.0 minus 4.0
,它是 对应的粘合\bigskipamount
。
另一方面,第 5 段和第 6 段的相应摘录如下
\glue 6.0 plus 2.0 minus 2.0
\glue 0.0
\penalty 123
\glue 12.0 plus 4.0 minus 4.0
\glue(\parskip) 0.0 plus 1.0
在这里您可以看到我们上面提到的零长度垂直空间,并且根本没有退格。
答案3
另一个不同点是。在水平模式下\vskip
生成\par
(为了终止它),但\vspace
表现为\vadjust{\vskip...}
。结果是:\vskip
具有非常容易理解的行为,但却\vspace
是许多混乱的根源。您可以通过检查这个论坛来验证这一点,该论坛是关于用户对\vspace
TeX 中水平/垂直模式的困惑和误解。