Poner en mayúscula la primera letra de las palabras en la marca de capítulo.

Poner en mayúscula la primera letra de las palabras en la marca de capítulo.

Me gustaría poner en mayúscula la primera letra de varias palabras del capítulo y la marca del capítulo. Si bien el texto del capítulo en sí está en mayúscula, en la marca del capítulo no lo está.

Aquí hay un MWE de mi código actual:

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

¿Cómo puedo hacer que fancyhdrfuncione \ecapitalisewords?

ingrese la descripción de la imagen aquí

EDITAR:

noté que \nouppercasemata\MakeUppercase

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

cuál sin embargo es necesario para \ecapitalisewordsqué usos

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

Además, me doy cuenta de que fancyhdr.sty se define \chaptermarkcon \MakeUppercase.

Por esta razón, intenté

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

Pero sin éxito, esta vez la marca del capítulo es TODO EN MAYÚSCULAS, lo que significa que el parche no pareció funcionar.

Respuesta1

La razón por la que su solución no funciona es esa \chaptermarky \sectionmarkse redefinen cuando llama \pagestyle{mainmatter}. Esto sucede porque cada estilo de página creado con \fancypagestyletambién llama \ps@fancycuando se establece, y esto establece ambos \chaptermarky \sectionmarken algo que usa \MakeUppercase.

Para deshacerse de estos \MakeUppercasemensajes de correo electrónico, puede agregar las líneas (que copié de su pregunta)

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

a su documento, justo después de llamar \pagestyle{mainmatter}.

Agregar estas líneas al segundo argumento de \fancypagestyleno funcionará porque \ps@fancyse llama en último lugar y desharía estos parches. Sin embargo, puede parchear la macro \ps@mainmattercreada \fancypagestyle{mainmatter}{…}directamente para incluir estas líneas. Así es como eso sería/podría ser:

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

título del capítulo

encabezamiento


Apéndice:

También podría redefinir \ps@fancypara eliminar todas las instancias \MakeUppercaseallí, pero está solicitando la solución menos invasiva, y probablemente esa no sería la solución. Sin embargo, para completar, aquí hay una manera de hacerlo:

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

(Solo lo defino \exhaustivepatchcmdporque llamar manualmente \patchcmdtres veces parece incorrecto. Elimino \def\MakeUppercase{\uppercase}porque esa instancia de \MakeUppercaseno debería parchearse (y no sirve para nada).)

Respuesta2

Una posible solución sería esta:

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

Esta solución utiliza el comando \mchapter, pero puede redefinir el comando \chapter original para hacerlo incluso si es un comando destacado, etc. (Veraquí)

información relacionada