Großschreibung des ersten Buchstabens von Wörtern in der Kapitelmarkierung

Großschreibung des ersten Buchstabens von Wörtern in der Kapitelmarkierung

Ich möchte den Anfangsbuchstaben mehrerer Wörter im Kapitel und in der Kapitelmarkierung groß schreiben. Während der Text im Kapitel selbst groß geschrieben wird, ist dies in der Kapitelmarkierung nicht der Fall.

Hier ist ein MWE meines aktuellen Codes:

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

Wie kann ich fancyhdrdamit arbeiten \ecapitalisewords?

Bildbeschreibung hier eingeben

BEARBEITEN:

Mir ist aufgefallen, dass \nouppercasetötet\MakeUppercase

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

\ecapitalisewordswas aber von welchen Anwendungen benötigt wird

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

Mir fällt weiter auf, dass mit fancyhdr.sty definiert ist .\chaptermark\MakeUppercase

Aus diesem Grund habe ich versucht

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

Aber ohne Erfolg, die Kapitelmarke ist diesmal VOLLSTÄNDIG IN GROSSBUCHSTABEN geschrieben, was bedeutet, dass das Patchen von Anfang an nicht funktioniert zu haben scheint.

Antwort1

Der Grund, warum Ihre Lösung nicht funktioniert, ist, dass \chaptermarkund \sectionmarkneu definiert werden, wenn Sie aufrufen \pagestyle{mainmatter}. Das liegt daran, dass jeder mit erstellte Seitenstil \fancypagestyleauch aufruft \ps@fancy, wenn festgelegt, und dies sowohl \chaptermarkals auch \sectionmarkauf etwas setzt, das verwendet \MakeUppercase.

Um diese s loszuwerden \MakeUppercase, könnten Sie die Zeilen hinzufügen (die ich aus Ihrer Frage kopiert habe)

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

zu Ihrem Dokument, direkt nach dem Aufruf \pagestyle{mainmatter}.

Das Hinzufügen dieser Zeilen zum zweiten Argument von \fancypagestylefunktioniert nicht, da \ps@fancyzuletzt aufgerufen wird und diese Patches rückgängig gemacht werden würden. Sie könnten jedoch das \ps@mainmattervon erstellte Makro \fancypagestyle{mainmatter}{…}direkt patchen, um diese Zeilen einzuschließen. So würde/könnte das ablaufen:

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

Kapiteltitel

Header


Nachtrag:

Sie könnten auch neu definieren, \ps@fancyum alle Instanzen von \MakeUppercasedort zu entfernen, aber Sie suchen nach der am wenigsten invasiven Lösung, und das wäre wahrscheinlich nicht die richtige. Der Vollständigkeit halber ist hier jedoch eine Möglichkeit, dies zu tun:

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

(Ich definiere es nur , weil es sich falsch anfühlt, dreimal \exhaustivepatchcmdmanuell aufzurufen . Ich entferne es , weil diese Instanz nicht gepatcht werden sollte (und keinem Zweck dient).)\patchcmd\def\MakeUppercase{\uppercase}\MakeUppercase

Antwort2

Eine mögliche Lösung wäre diese:

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

Diese Lösung verwendet den Befehl \mchapter, aber Sie können den ursprünglichen \chapter-Befehl auch dann neu definieren, wenn es sich um einen mit Sternchen markierten Befehl usw. handelt. (SieheHier)

verwandte Informationen