を使って生成されたページヘッダー内のコマンドを再定義したいのですが、scrheading
その理由は、ページヘッダーはすべて小文字でなければならないからです。しかし、章ヘッダーには、フォントサイズヘッダー内のみでこのフォント サイズの変更を元に戻す必要があります。
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}
ここでの予想される出力は、ページ 2 のヘッダーが次のようになることです。
代わりに、次のようになります。
例に示すように\itex
、\lowsc
マクロは と組み合わせて使用され、\textsc
小文字が散在する小文字で略語のスタイルを設定します。マクロがないと\lowsc
、小文字の横に小文字が大きすぎるように見えます。
内部\renewcommand*\lowsc
は\headfont
効果がないようです。代わりに\gdef
(またはカスタム\grenewcommand
マクロ) を使用すると動作します。ただし、コマンドが再定義されます。世界的に、メインテキスト内の後続の使用も変更されてしまいますが、これは変更されるべきではありません。これはスコープの問題のように見えますが、正直なところ、(グローバルではない)再定義されたマクロが適用されない理由がまったくわかりません。
答え1
の定義方法により\lowsc
、ヘッダーの再定義は何も適用されません。なぜなら、その時点で TeX が認識するのは\lowsc
、もはや ではなく だからです\scalebox{0.8}{i}
。
\DeclareRobustCommand
forを使用すると\lowsc
問題は解決します。ただし、条件文を使用します。
\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}