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