这是我的第一篇文章,我希望它不会与现有内容重复太多。我使用 Latex 有一段时间了,但总是采用非常实用的方法,我总是对 \vspace 命令感到困惑,我觉得这有点违反直觉。
在下面的最小示例中,我正在寻找命令来在注释的“skipspace”宏指示的各个位置手动添加白色垂直空格(是的,我知道这很丑陋!)。
\documentclass[a4paper,11pt]{article}
\newlength{\addspace}
\setlength{\addspace}{0mm} % play easily on the inserted length
\begin{document}
First paragraph~: starts off with some very interesting text,
until we encounter a first equation~:
%\skipspace1{\addspace}
$$
x=5,
$$
%\skipspace2{\addspace}
after what the paragraph continues, with some even more interesting
text, and finally ends with another equation~:
$$
x=5.
$$
%\skipspace3{\addspace}
Second paragraph~: we are going to encounter a line break
(don't ask why I like to have these from time to time).\\
%\skipspace4{\addspace}
This is the same paragraph continuing after the break.
%\skipspace5{\addspace}
Third paragraph~: whatever. As far as I'm concerned, the example is over,
but multiple-line paragraphs definitely look better.
\end{document}
根据我的经验,位置“1”和“5”可以通过 \vspace 很好地处理,而位置“2”、“3”和“4”每次都需要进行一些调整(因为 \vspace 在新行的开头无法直观地工作)。目前,我使用了一种基于一行中只有一个空格的丑陋技巧:
对于情况 2 和 4,以下方法有效:
\ \vspace{\addspace}\\[-\baselineskip]
对于情况 3,以下方法有效:
\ \vspace{\addspace}\\[-2\baselineskip]
现在我的问题是:是否有一个通用宏(比我的黑客更漂亮)可以共同处理情况“2”,“3”和“4”?或者更好的是(只是梦想),是否有一个通用宏可以直接处理所有5种情况?
提前感谢您的时间和解释,
霍华德
编辑:你可以在下方找到我自己的回答,感谢 David Carlisle 的回复
答案1
如果\vspace
在垂直模式下使用,则在该点添加空格。如果在水平模式下添加,则将延迟到段落分成行,然后在包含带有延迟空格的节点的行之后添加空格。
水平模式下的行为有点合理,但很少需要,所以简单的规则是在之前总是留一个空行\vspace
。
要注意的另一条规则是,在显示数学之前绝不能留空行(在乳胶中不应标记$$
,但同样适用于\[
)。
\ \vspace{\addspace}\\[-2\baselineskip]
是一个非常奇怪的构造:如果在垂直模式下使用,它将以段落缩进开始一个段落,然后从 强制一个单词空格,\
然后从 强制一个中断。\\
如果在中断后的行后面跟着一个空白行,则将为空并生成一个未满的水平盒子警告。然后段落将结束,因此\addspace
将在第一个白线后添加。因此,您将生成两个白色水平盒子,它们不会在分页符处被丢弃,并且它们\addspace - 2\baselineskip
之间有空格。这看起来类似于 的空格,\addspace
但与上方和下方文本的交互将有所不同,并且分页符处的行为将完全错误,允许在两条白线之间进行分页,并在下一页的顶部产生异常的白线。
答案2
感谢 David Carlisle 的回复,我发现“案例 3”(在公式和下一段之间插入空格)也可以轻松地使用 \vspace 完成,只是您必须将其插入两个空白行之间。因此,如果我总结我当前的解决方案,它如下:
\documentclass[a4paper,11pt]{article}
\newlength{\addspace}
\setlength{\addspace}{0mm} % play easily on the inserted length
\newcommand{\myvspace}[1]{\ \vspace{#1}\\[-baselineskip]} % home-made ugly macro
\begin{document}
First paragraph~: starts off with some very interesting text,
until we encounter a first equation~:
\vspace{\addspace} % CASE 1
\[
x=5,
\]
\myvspace{\addspace} % CASE 2
after what the paragraph continues, with some even more interesting
text, and finally ends with another equation~:
\[
x=5.
\]
\vspace{\addspace} % CASE 3... blank lines above and below are important to enter vertical mode
Second paragraph~: we are going to encounter a line break
(don't ask why I like to have these from time to time).\\
\myvspace{\addspace} % CASE 4
This is the same paragraph continuing after the break.
\vspace{\addspace} % CASE 5
Third paragraph~: whatever.
\end{document}
因此,看来我可以用 \vspace(针对情况 1、3、5)和我丑陋的自制宏 \myvspace(针对情况 2 和 4)做我想做的一切……这或多或少还不错。感谢所有人,尤其是 David 指出了水平和垂直模式之间的区别。
霍华德