我试图理解这样一种行为,即章节标题采用章节中第一个单词的颜色。
这是我的 MWE:
\documentclass{minimal}
\usepackage{xcolor}
\makeatletter
\newcommand\section{\@startsection{section}{1}{.25in}%
{1.3ex \@plus .5ex \@minus .2ex}%
{-.5em \@plus -.1em}%
{\reset@font\normalsize\bfseries}}
\makeatother
\begin{document}
\section{First}
{\color{red} Hello there} More text
\end{document}
期望的结果是“Hello there”为红色,而其余文本(包括“First”)为黑色。但是,“First”是红色的。如果在“{\color”之前插入一个单词,则会发生期望的行为。这是怎么回事?答案一定是我不知道的一些关于乳胶的基本事实。
提前谢谢了。
答案1
首先,我们假设这个问题与 的定义无关\section
。因此问题不在这里,而在于使用\color{red}...
而不是\textcolor{red}{...}
。
以下是复制该问题的 MWE
\documentclass{article}
\usepackage{color}
\begin{document}
\paragraph{Foo}
{\color{red}Bar} bla bla
\end{document}
为什么?
当的第五个参数\@startsection
为负数时,标题将添加到命令后面的文本段落的前面\everypar
。该命令\everypar
以水平模式执行,即当 TeX 看到 Hello 中的字符 H 时,但此时已经太晚了,颜色变化已经完成。这是另一个例子
\documentclass{article}
\usepackage{color}
\begin{document}
\everypar{Foo \everypar{}}
{\color{red}\ifvmode\hrule\vskip1cm\fi Bar} bla bla
\end{document}
解决方案是使用\textcolor{red}{...}
或\leavevmode{\color{red}...}
。