Ich möchte einen Befehl innerhalb eines Seitenkopfes neu definieren, der mit generiert wurde scrheading
. Der Grund dafür ist, dass der Seitenkopf komplett in Großbuchstaben sein sollte; der Kapitelkopf enthält jedoch zufällig einen benutzerdefinierten Befehl, der denSchriftgröße. Ich muss diese Änderung der Schriftgröße nur in der Kopfzeile rückgängig machen.
Hier ist ein MWE:
\documentclass{scrreprt}
\usepackage[markcase=lower]{scrlayer-scrpage}
\usepackage{graphics}
\usepackage{hyperref}
\newcommand*\lowsc[1]{\texorpdfstring{\protect\scalebox{0.8}{#1}}{#1}}
\pagestyle{scrheadings}
\automark[chapter]{chapter}
\renewcommand*\headfont{%
\scshape%
\renewcommand*\lowsc[1]{##1}}
\newcommand\itex{\lowsc{i}\textsc{tex}}
\begin{document}
\chapter{\itex{} test}
\clearpage
Some text. \itex{}.
\end{document}
Die erwartete Ausgabe wäre hier, dass die Kopfzeile auf Seite 2 folgendermaßen aussieht:
Stattdessen sieht es so aus:
Wie das \itex
Beispiel zeigt, wird das \lowsc
Makro in Verbindung mit verwendet, um \textsc
eine Abkürzung in Kapitälchen, aber mit dazwischenliegenden Kleinbuchstaben darzustellen. Ohne das \lowsc
Makro würden diese neben den Kapitälchen zu groß wirken.
Das \renewcommand*\lowsc
darin \headfont
scheint keine Wirkung zu haben. Wenn ich stattdessen \gdef
(oder ein benutzerdefiniertes \grenewcommand
Makro) verwende, funktioniert es. Das definiert den Befehl jedoch neuglobal, sodass nachfolgende Verwendungen im Haupttext ebenfalls geändert werden, was nicht der Fall sein sollte. Das sieht für mich nach einem Scoping-Problem aus, aber ich bin ehrlich gesagt völlig ratlos, warum mein (nicht global) neu definiertes Makro nicht angewendet wird.
Antwort1
Aufgrund Ihrer Definition \lowsc
hat die Neudefinition im Header keine Auswirkungen, da TeX an dieser Stelle nicht \lowsc
mehr sieht, sondern \scalebox{0.8}{i}
.
Die Verwendung von \DeclareRobustCommand
„for“ \lowsc
löst das Problem. Ich würde jedoch einen Bedingungssatz verwenden.
\documentclass{scrreprt}
\usepackage[markcase=lower]{scrlayer-scrpage}
\usepackage{graphics}
\usepackage{hyperref}
\newif\ifinheader
\DeclareRobustCommand\lowsc[1]{%
\ifinheader
#1%
\else
\texorpdfstring{\scalebox{0.8}{#1}}{#1}%
\fi
}
\pagestyle{scrheadings}
\automark[chapter]{chapter}
\renewcommand*\headfont{%
\scshape\inheadertrue
}
\newcommand\itex{\lowsc{i}\textsc{tex}}
\begin{document}
\chapter{\itex{} test}
\clearpage
Some text. \itex{}.
\end{document}