ページヘッダー内のコマンドを再定義する

ページヘッダー内のコマンドを再定義する

を使って生成されたページヘッダー内のコマンドを再定義したいのですが、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}

\DeclareRobustCommandforを使用すると\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}

ここに画像の説明を入力してください

関連情報