使用 \color 和 \label 的组合获取额外空间

使用 \color 和 \label 的组合获取额外空间

如果我输入{\bfseries\color{red}Theorem 1. }{\itshape\label{two} This is a test.},则“1.”和“This”之间的空格太多。以下文件显示了我的意思:

\documentclass{article}

\usepackage{color}

\begin{document}

{\bfseries Theorem 1. }{\itshape This is a test.}

{\bfseries Theorem 1. }{\itshape\label{one} This is a test.}

{\bfseries\color{red}Theorem 1. }{\itshape This is a test.}

{\bfseries\color{red}Theorem 1. }{\itshape\label{two} This is a test.} %too much space between "1." and "This"

{\bfseries\color{red}Theorem 1. }{\itshape\label{three}This is a test.}

\end{document}

除了后面带有注释的情况外,在所有情况下,“1.”和“This”之间的空格都是相同的(我认为是正确的)。

有没有办法自动阻止这种情况发生?这是我的 .log 文件在color加载包时显示的内容:

("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\color.sty"
Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC)

("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\color.cfg"
File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
)
Package color Info: Driver file: dvips.def on input line 130.

("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\dvips.def"
File: dvips.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
)
("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\dvipsnam.def"
File: dvipsnam.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
)) 

答案1

您的例子可以简化:

\documentclass{article}

\usepackage{color}

\begin{document}

Theorem 1. \label{one} This is a test.

{\color{red}Theorem 1. }\label{two} This is a test.

\textcolor{red}{Theorem 1. }\label{three} This is a test.

\end{document}

在此处输入图片描述

会发生什么?该命令\label很智能:它会查找前面的空格,如果找到,它会删除该空格,忽略可能的后续空格,并重新插入开头删除的空格(在完成设置标签的特定工作之后)。

1.这是第一行发生的情况。第二行和第三行不会发生这种情况,因为在和之后的空格之间\label有一个不可见的项目,它将颜色从红色变回黑色。

这很不幸,但是没有什么可以做的,除了总是\label在单词后面打字或者在忽略空格的地方打字:段落之间、之后\item、之后\begin{theorem}(或用 定义的类似环境\newtheorem)或在数学模式中。

答案2

\label命令会尝试检查其前面是否有空格,如果确定有空格,则会忽略其后面的任何空格。这在第二个示例中有效,但在第四个示例中无效。这里发生的情况是,该命令\color在当前组的末尾放置一个特殊节点,将当前颜色设置回其先前的值。也就是说,在 TeX 中,有问题的行看起来像这样:

[group_start][font_change][color_change]Theorem 1.[space][group_end][color_change]  

紧随其后的命令\label{two}无法看到[space]节点[color_change](分组不会产生此问题,字体也不会发生变化)。因此,\label检测不到前一个空格,因此允许保留后面的空格。您需要在“定理 1”后面的空格之前结束颜色命令的范围:

\textbf{\textcolor{red}{Theorem 1.} }{\itshape\label{two} This is a test.}

\textcolor命令非常适合这种情况。或者您可以省略任何后面的空格 \label

颜色变化如此而字体变化却不然的原因在于,颜色是在 LaTeX 创建多年后才嫁接到 LaTeX 上的,而且这是唯一普遍可用的方法。

相关内容