我想将页码打印为粗体(这是示例),无论它们出现在哪里。我的简单 MWE 如下所示:
\documentclass{revtex4-1}
\renewcommand*{\thepage}{\textbf{X}}
%\usepackage{microtype}
%\renewcommand*{\thepage}{X}
\begin{document}
foo
\end{document}
这确实有效。但是,一旦我使用其他一些软件包(例如microtype
(取消注释第一个注释行),它就会中断。这可以通过取消注释第二个注释行来解决,这表明不是乱七八糟\thepage
本身导致了问题。尽管如此,我还是失去了我想要的效果。
格式化后,aux
文件如下所示:
....
\newlabel{LastPage}{{}{\protect \unhbox \voidb@x \bgroup \def document{1}\let \futurelet \@let@token \let \protect \relax \protect \edef m{bx}\protect \xdef \OT1/cmr/bx/n/10 {\OT1/cmr/m/n/10 }\OT1/cmr/bx/n/10 \size@update \enc@update 1\egroup }{}{}{}}
因此,这个命令很可能会把revtex4-1.cls
事情搞乱:
\immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
我怎样才能修复这条线以使事情正常?
更新:
这将创建一个正确的.aux
文件,但当然会弄乱文档的页码:
\documentclass{revtex4-1}
\renewcommand*{\thepage}{\string\textbf{X}}
\usepackage{microtype}
\begin{document}
foo
\end{document}
答案1
添加格式\thepage
应该是最后手段。
\documentclass{revtex4-1}
\usepackage{microtype}
\usepackage{etoolbox}
\usepackage{kantlipsum} % mock text
\makeatletter
\AtBeginDocument{%
\patchcmd{\@oddhead}{\thepage}{\textbf{\thepage}}{}{}%
\patchcmd{\@evenhead}{\thepage}{\textbf{\thepage}}{}{}%
}
\let\latex@pageref\pageref
\renewcommand{\pageref}[1]{\textbf{\latex@pageref{#1}}}
\makeatother
\begin{document}
This text has \pageref{LastPage} pages.
\kant
\end{document}
该.aux
文件有
\newlabel{LastPage}{{}{2}{}{}{}}
正如它应该。
如果您使用,则需要更多的东西hyperref
,但这不在您的问题中。
如果你真的要上路\textbf{\arabic{page}}
,那就好好走吧:
\usepackage{etoolbox}
\robustify{\textbf} % make \textbf survive \edef
\renewcommand{\thepage}{\textbf{\arabic{page}}}
答案2
我找到了答案将文本内容写为标签并使用 \nameref* 引用它们:
\documentclass{revtex4-1}
\renewcommand*{\thepage}{\unexpanded{\textbf{X}}}
\usepackage{microtype}
\begin{document}
foo
\end{document}
这似乎确实有效!