
我試圖理解一種行為,其中節標題假定該節中第一個單字的顏色。
這是我的 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”)為黑色。然而,「第一」是紅色的。如果在「{\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}{...}
or \leavevmode{\color{red}...}
。