
Estou tentando entender um comportamento em que os cabeçalhos das seções assumem a cor da primeira palavra da seção.
Aqui está meu 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}
O resultado desejado é que "Olá" seja vermelho, mas o resto do texto (incluindo "Primeiro") seja preto. No entanto, "Primeiro" é vermelho. Se uma palavra for inserida antes de "{\color" então ocorre o comportamento desejado. O que está acontecendo aqui? A resposta deve ser algum fato básico sobre o látex que eu não conheço.
Muito obrigado antecipadamente.
Responder1
Primeiro, digamos que a questão não tem nada a ver com a definição de \section
. Então o problema não está aqui, mas em usar \color{red}...
ao invés de \textcolor{red}{...}
.
Aqui está um MWE que replica o problema
\documentclass{article}
\usepackage{color}
\begin{document}
\paragraph{Foo}
{\color{red}Bar} bla bla
\end{document}
Por que?
Quando o quinto argumento de \@startsection
é negativo, o título é anexado ao parágrafo do texto seguinte com o \everypar
comando. O comando \everypar
é executado no modo horizontal, ou seja, quando o TeX vê o caracter H em Hello, mas neste momento é tarde demais e a mudança de cor já está feita. Aqui está outro exemplo
\documentclass{article}
\usepackage{color}
\begin{document}
\everypar{Foo \everypar{}}
{\color{red}\ifvmode\hrule\vskip1cm\fi Bar} bla bla
\end{document}
A solução é usar \textcolor{red}{...}
ou \leavevmode{\color{red}...}
.