章のマーク内の単語の最初の文字を大文字にする

章のマーク内の単語の最初の文字を大文字にする

章と章マーク内のいくつかの単語の最初の文字を大文字にしたいのですが、章自体のテキストは大文字になっていますが、章マークでは大文字になっていません。

現在のコードの MWE は次のとおりです。

\documentclass{book}

\usepackage{mfirstuc,fancyhdr,lipsum}

\fancypagestyle{mainmatter}{%
    \fancyhf{}
    \fancyhead[LE]{\thepage}
    \fancyhead[RO]{\thepage}
    \fancyhead[RE]{\nouppercase{\leftmark}}
    \fancyhead[LO]{\nouppercase{\rightmark}}
}

\begin{document}
    \pagestyle{mainmatter}
    \chapter{\ecapitalisewords{some thing} with Text}
    \lipsum[1-5]
\end{document}

fancyhdrどうすれば を操作できますか\ecapitalisewords?

ここに画像の説明を入力してください

編集:

私はそれが\nouppercase殺すことに気づきました\MakeUppercase

\def\nouppercase##1{{\let\uppercase\relax\let\MakeUppercase\relax
      \expandafter\let\csname MakeUppercase \endcsname\relax##1}}%

しかし、\ecapitalisewordsどの用途に必要か

\def\@gls@makefirstuc#1{\MFUapplytofirst\mfirstucMakeUppercase{#1}}
\newcommand*{\mfirstucMakeUppercase}{\MakeUppercase}

さらに、 がでfancyhdr.sty 定義されることに気が付きました。\chaptermark\MakeUppercase

このため、私は

 \documentclass{book}

 \usepackage{mfirstuc,fancyhdr,lipsum}




 \fancypagestyle{mainmatter}{%
    \fancyhf{}
    \fancyhead[LE]{\thepage}
    \fancyhead[RO]{\thepage}
    \fancyhead[RE]{\leftmark}
    \fancyhead[LO]{\rightmark}
 }
% 


\let\orgMakeUppercase\MakeUppercase

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\chaptermark}{\MakeUppercase}{}{}{}
\xpatchcmd{\sectionmark}{\MakeUppercase}{}{}{}
\xpatchcmd{\@gls@makefirstuc}{\mfirstucMakeUppercase}{\orgMakeUppercase}{}{}
\makeatother


\begin{document}
    \pagestyle{mainmatter}
    \chapter{\ecapitalisewords{some thing} with Text}
    \lipsum[1-5]
\end{document}

しかし、成功せず、チャプターマークは今回はすべて大文字になり、パッチが最初から機能しなかったことを意味します。

答え1

このソリューションが機能しない理由は、 を呼び出すと と が再定義されるから\chaptermarkです。 これは、 で作成されたすべてのページ スタイルも が設定されると を呼び出し、 によってとの両方が を使用するものに設定されるためです。\sectionmark\pagestyle{mainmatter}\fancypagestyle\ps@fancy\chaptermark\sectionmark\MakeUppercase

これらのsを取り除くには\MakeUppercase、次の行を追加します(質問からコピーしました)

\xpatchcmd{\chaptermark}{\MakeUppercase}{}{}{}%
\xpatchcmd{\sectionmark}{\MakeUppercase}{}{}{}%

を呼び出した直後に、ドキュメントに追加します\pagestyle{mainmatter}

これらの行を の 2 番目の引数に追加しても、が最後に呼び出され、これらのパッチが元に戻ってしまうため\fancypagestyle機能しません。ただし、によって作成された\ps@fancyマクロに直接パッチを適用して、これらの行を含めることができます。その方法は次のとおりです。\ps@mainmatter\fancypagestyle{mainmatter}{…}

\documentclass{book}
\usepackage{mfirstuc,fancyhdr,lipsum}

\fancypagestyle{mainmatter}{% %% <- defines \ps@mainmatter
    \fancyhf{}%
    \fancyhead[LE]{\thepage}%
    \fancyhead[RO]{\thepage}%
    \fancyhead[RE]{\leftmark}%
    \fancyhead[LO]{\rightmark}%
}

\usepackage{xpatch}
\makeatletter
  \appto\ps@mainmatter{% %% <- appends to \ps@mainmatter
    \xpatchcmd{\chaptermark}{\MakeUppercase}{}{}{}%
    \xpatchcmd{\sectionmark}{\MakeUppercase}{}{}{}%
  }
\makeatother

\begin{document}
    \pagestyle{mainmatter} %% <- calls \ps@mainmatter
    \chapter{\ecapitalisewords{some thing} with Text}
    \lipsum[1-5]
\end{document}

章タイトル

ヘッダ


補遺:

\ps@fancy再定義して、そこのすべてのインスタンスを削除することもできます\MakeUppercaseが、最も侵襲性の低い解決策を求めているので、おそらくそれは適切ではないでしょう。ただし、完全を期すために、これを行う方法は次のとおりです。

\documentclass{book}
\usepackage{mfirstuc,fancyhdr,lipsum}

\fancypagestyle{mainmatter}{% %% <- defines \ps@mainmatter
    \fancyhf{}%
    \fancyhead[LE]{\thepage}%
    \fancyhead[RO]{\thepage}%
    \fancyhead[RE]{\leftmark}%
    \fancyhead[LO]{\rightmark}%
}

\usepackage{xpatch}
\newrobustcmd\exhaustivepatchcmd[3]{% %%<- patches as often as necessary
  \patchcmd{#1}{#2}{#3}{\exhaustivepatchcmd{#1}{#2}{#3}}{}%
}
\makeatletter
  \patchcmd{\ps@fancy}{\def\MakeUppercase{\uppercase}}{}{}{}
  \exhaustivepatchcmd{\ps@fancy}{\MakeUppercase}{\@firstofone}
\makeatother

\begin{document}
    \pagestyle{mainmatter}
    \chapter{\ecapitalisewords{some thing} with Text}
    \lipsum[1-5]
\end{document}

(手動で3 回\exhaustivepatchcmd呼び出すのは間違っているように感じたので、定義しただけです。のインスタンスはパッチを適用すべきではない (そして何の役にも立たない) ため、削除しました。)\patchcmd\def\MakeUppercase{\uppercase}\MakeUppercase

答え2

考えられる解決策は次のようになります。

\documentclass{book}

\usepackage{mfirstuc,fancyhdr,lipsum}

\fancypagestyle{mainmatter}{%
    \fancyhf{}
    \fancyhead[LE]{\thepage}
    \fancyhead[RO]{\thepage}
    \fancyhead[RE]{\leftmark}
    \fancyhead[LO]{\rightmark}
}
\newcounter{mychap}
\newcommand\mychapadd{\setcounter{mychap}{\value{chapter}}\stepcounter{mychap}}
\newcommand\mchapter[1]{\xdef\Arg{#1}\mychapadd\xdef\leftmark{Chapter~\themychap.\space\Arg}
\chapter{\Arg}}
\begin{document}
    \pagestyle{mainmatter}
    \mchapter{\ecapitalisewords{this is} a test}
    \lipsum[1-5]
\end{document}

この解決策では コマンドを使用します\mchapterが、元の \chapter コマンドを再定義して、星印の付いたコマンドなどであっても実行できます。(ここ

関連情報