重新定义页眉内的命令

重新定义页眉内的命令

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

在此处输入图片描述

相关内容