Переопределить команду внутри заголовка страницы

Переопределить команду внутри заголовка страницы

Я хотел бы переопределить команду внутри заголовка страницы, который генерируется с помощью 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}

введите описание изображения здесь

Связанный контент