我想在使用 生成的页眉中重新定义一个命令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}