如果我输入{\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 上的,而且这是唯一普遍可用的方法。