\color{.} \] \par 导致额外的空格

\color{.} \] \par 导致额外的空格

以下 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 语法结合颜色,那么问题仍然存在。

不幸的是,只有\aftergroupTeX 基元。对于颜色处理来说,更自然的做法是将\atendgroup基元放在关闭组之前处理(而不是在关闭组之后)。但是这样的基元并不存在,而且 TeX 源在这个问题中也不太清楚,所以添加这样的基元并不简单。

LuaTeX 使用另一种方法\attributes来处理颜色。这样就无需插入任何\aftergroup颜色节点,颜色特性将在后端作为属性处理的结果进行处理。

答案2

\color{red}指令保存了当前组末尾要执行的内容。如果显示后没有空行,则这没有明显的副作用。但如果有空行,则在\par执行隐式指令之前,保存的标记会构成“段落的其余部分”。因此您会得到一个空行。

解决方法:使用\textcolor或者 包裹受影响的\color部分\begingroup\endgroup

另一方面,数学显示后的空行是例外,而不是规则;空行数学显示是大错特错,辉长岩

相关内容