我正在使用该xcolor
包为文档中的文本和数学题着色amsart
。我注意到,在彩色显示的方程式后开始新段落会产生额外的垂直间距。
以下是 MWE:
\documentclass{amsart}
\usepackage{xcolor}
\begin{document}
Some text.
\begin{equation*}
\text{A formula: }a=b+c.
\end{equation*}
Some more text, starting new paragraph.
\begin{equation*}
\color{blue} \text{Another formula: }d=e-f.
\end{equation*}
Some more text, starting new paragraph.
\end{document}
有人知道为什么会发生这种情况吗?我们该如何解决它?
答案1
这与无关amsart
,但这是 LaTeX 指定颜色的方式。
如果你\color{blue}
在组内执行此操作,LaTeX 会\color
在组结束后发出适当的指令,以恢复更改前有效的颜色。这是通过“whatsit”完成的,因为 TeX 本身不支持颜色。
在您的情况下,这个 whatsit 是数学显示后的文本的一部分,因此在扫描段落结束命令(空行)之前会产生一个空行。
解决方案:使用\begingroup...\endgroup
,这样 whatsit 就会被放置在显示屏内。或者,等效地,\mathcolor
。
%\documentclass{amsart}
\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\begin{document}
Some text.
\begin{equation*}
\text{A formula: }a=b+c.
\end{equation*}
Some more text, starting new paragraph.
\begin{equation*}
\mathcolor{blue}{\text{Another formula: }d=e-f.}
\end{equation*}
Some more text, starting new paragraph.
Some more text, starting new paragraph.
\begin{equation*}
\color{blue}\text{Another formula: }d=e-f.
\end{equation*}
Some more text, not starting new paragraph.
Some more text, starting new paragraph.
\begin{equation*}
\begingroup\color{blue}\text{Another formula: }d=e-f.\endgroup
\end{equation*}
Some more text, starting new paragraph.
\end{document}
该示例展示了多种替代方案。
另一种可能性是不留空行,而是\indent
在文本前面使用。
这种情况应该很少见:在显示之后你需要多少次开始新的段落?
答案2
Egreg 讲完了这个问题的本质内容。我再补充一点。
为什么显示模式(恢复以前的颜色但不执行任何其他操作)之后的“whatsit”会创建一个空段落?
显示模式通过将公式放入垂直列表并开始中断段落来完成其工作,即它打开一个新的水平模式(如之后\noindent
)。然后显示模式组完成。
在您的第一个示例中,此组之后是\par
(空行),因此有一个空的水平模式立即被关闭\par
(类似于\noindent\par
)。在这种情况下,TeX 不会创建段落。
在您的第二个示例中,此组后面是“whatsit”,后面跟着\par
。即处理时水平模式不为空\par
。创建单行段落。此行包含此“whatsit”,可恢复以前的颜色。
请注意,Context 没有这个问题,因为它使用 LuaTeX 的属性来管理颜色,而不是通过\aftergroup
原语(在颜色 LaTeX 包中使用)。