セクションテキストが本文テキストと同じ色であると想定される問題

セクションテキストが本文テキストと同じ色であると想定される問題

セクション ヘッダーがセクションの最初の単語の色を想定する動作を理解しようとしています。

これが私の 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}

なぜ?

の 5 番目の引数\@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}{...}または を使用することです\leavevmode{\color{red}...}

関連情報