以下 MWE 显示了一些额外的空间(大约是一个空行)。
\documentclass{article}
\usepackage{color}
\begin{document}
\[a^2+b^2<c^2\]
Remark under displaymath at its usual position
\[a^2+b^2>c^2\color{red}\]
Remark is further away with color command
\end{document}
问题: 有没有什么方法可以使用\color
而没有副作用?
附言:可能是同一个问题 当我更改公式颜色时,会出现一个空白行 但链接的也不是太简单。
答案1
颜色被实现为插入到输出中的 switcher-specials(pdfliterals/colorstacks)。这与 TeX 分组机制无关,但用户希望颜色能够依赖于 TeX 分组机制。因此,\aftergroup
每当用户在组中更改颜色时,宏都会使用 TeX 基元,以便在组关闭后恢复以前的颜色。但这个恢复命令是另一个 switcher-specials(pdfliteral/colorstack),它会在排版材料中创建一个节点。您的示例是:
$$ formula color-setting $$
放置color-setting
有关颜色的节点并运行\aftergroup
。当组关闭时,下一个有关恢复颜色的节点出现。它插入在显示模式之后,紧接着是水平模式。然后是空行\par
。该段落包含提到的颜色节点,它不是空的,所以你可以看到空行。
如果你输入
$$ {formula color-setting} $$
在你的语法中:
\[{ a^2+b^2>c^2\color{red} }\]
然后\aftergroup
节点出现在关闭之后}
。接下来,关闭显示模式,并\par
在空水平列表上处理(空行),因此不会创建空行。
当然,LaTeX 开发人员可以定义\[
as$$\begingroup
和\]
as \endgroup$$
(但他们没有这样做)。但如果您$$...$$
在显示模式中使用经典的 TeX 语法结合颜色,那么问题仍然存在。
不幸的是,只有\aftergroup
TeX 基元。对于颜色处理来说,更自然的做法是将\atendgroup
基元放在关闭组之前处理(而不是在关闭组之后)。但是这样的基元并不存在,而且 TeX 源在这个问题中也不太清楚,所以添加这样的基元并不简单。
LuaTeX 使用另一种方法\attributes
来处理颜色。这样就无需插入任何\aftergroup
颜色节点,颜色特性将在后端作为属性处理的结果进行处理。
答案2
该\color{red}
指令保存了当前组末尾要执行的内容。如果显示后没有空行,则这没有明显的副作用。但如果有空行,则在\par
执行隐式指令之前,保存的标记会构成“段落的其余部分”。因此您会得到一个空行。
解决方法:使用\textcolor
或者 包裹受影响的\color
部分\begingroup\endgroup
。
另一方面,数学显示后的空行是例外,而不是规则;空行前数学显示是大错特错,辉长岩。