假設部分文字與正文顏色相同的問題

假設部分文字與正文顏色相同的問題

我試圖理解一種行為,其中節標題假定該節中第一個單字的顏色。

這是我的 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}...}

相關內容