
Estoy tratando de comprender un comportamiento en el que los encabezados de sección asumen el color de la primera palabra de la sección.
Aquí está mi 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}
El resultado deseado es que "Hola" sea rojo pero el resto del texto (incluido "Primero") sea negro. Sin embargo, "Primero" es rojo. Si se inserta una palabra antes de "{\color", se produce el comportamiento deseado. ¿Que esta pasando aqui? La respuesta debe ser algún dato básico sobre el látex que desconozco.
Muchas gracias de antemano.
Respuesta1
Primero, digamos que la cuestión no tiene nada que ver con la definición de \section
. Entonces el problema no está aquí, sino en usar \color{red}...
en lugar de \textcolor{red}{...}
.
Aquí hay un MWE que replica el problema.
\documentclass{article}
\usepackage{color}
\begin{document}
\paragraph{Foo}
{\color{red}Bar} bla bla
\end{document}
¿Por qué?
Cuando el quinto argumento de \@startsection
es negativo, el título se antepone al párrafo del texto siguiente con el \everypar
comando. El comando \everypar
se ejecuta en modo horizontal, es decir, cuando TeX ve el carácter H en Hola, pero en ese momento es demasiado tarde y el cambio de color ya está hecho. Aquí hay otro ejemplo.
\documentclass{article}
\usepackage{color}
\begin{document}
\everypar{Foo \everypar{}}
{\color{red}\ifvmode\hrule\vskip1cm\fi Bar} bla bla
\end{document}
La solución es utilizar \textcolor{red}{...}
o \leavevmode{\color{red}...}
.