Проблема с текстом раздела, предполагающим тот же цвет, что и основной текст

Проблема с текстом раздела, предполагающим тот же цвет, что и основной текст

Я пытаюсь понять поведение, при котором заголовки разделов принимают цвет первого слова в разделе.

Вот мой 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 видит символ H в Hello, но в этот момент уже слишком поздно, и изменение цвета уже выполнено. Вот еще один пример

\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}...}.

Связанный контент