I came across this answer which claims that it works even with the starred version of \chapter
et al. The following example shows that it does not, because \...mark
macros are not called. Is there a way to "fix" this and be able to set the respective value of the \...name
macros even if there is a *-type call?
\documentclass{book}
\let\Chaptermark\chaptermark
\let\Sectionmark\sectionmark
\let\Subsectionmark\subsectionmark
\let\Subsubsectionmark\subsubsectionmark
\def\chaptermark#1{\def\Chaptername{#1}\Chaptermark{#1}}
\def\sectionmark#1{\def\Sectionname{#1}\Sectionmark{#1}}
\def\subsectionmark#1{\def\Subsectionname{#1}\Subsectionmark{#1}}
\def\subsubsectionmark#1{\def\Subsubsectionname{#1}\Subsubsectionmark{#1}}
\begin{document}
\chapter{First chapter}
Title: ``\Chaptername''.
\section{First section}
Title: ``\Sectionname''.
\subsection{First subsection}
Title: ``\Subsectionname''.
\subsubsection{First subsubsection}
Title: ``\Subsubsectionname''.
\chapter*{Second chapter}
Title: ``\Chaptername''.
\section*{Second section}
Title: ``\Sectionname''.
\subsection*{Second subsection}
Title: ``\Subsectionname''.
\subsubsection*{Second subsubsection}
Title: ``\Subsubsectionname''.
\end{document}
Lets assume that I have a long file with many \section
(etc.) calls. But there is a macro which I want to change to contain the title of the actual section
(etc.).
Best Answer
The given macros will not work with the
*
-versions, because the\...mark
commands are issued only when the*
is not present. For instance,\chapter{Title}
issues\chaptermark{Title}
, but\chapter*{Title}
doesn't.Here's a set of patches that will provide the commands
which will always expand to the most recent title of the corresponding sectional unit.
Here
\test
is just to show that at the point the command is issued the control sequences hold the right value.The patches must go before the loading of
hyperref
(if you use it).