使用 \let 重新定义 \nameref 时出错

使用 \let 重新定义 \nameref 时出错

我希望重新定义,\nameref以便将其输出以斜体打印。但是,我显然做错了什么,因为我收到一条错误消息

\nameref 未定义。\renewcommand{\nameref}

梅威瑟:

\documentclass{article}
\usepackage{hyperref}

\let\namerefOld\nameref
\renewcommand{\nameref}[1]{\textit{\namerefOld{#1}}}

\begin{document}
    \section{A}
    \label{sec:A}
    bla bla foo bar

    \section{B}
    yada yada yada \nameref{sec:A}

\end{document}

这里的问题是什么?我希望它能正常工作,按照这个问题。在前言中不加and 也可以
使用,或者直接用 包围它,这样可以得到所需的输出。不过,我不想用 包围每个出现的。\nameref\let\renewcommand\textit{...}\nameref\textit

答案1

\nameref在序言中没有定义,所以你无法在那里捕捉到它的定义。你要么必须移动

\let\namerefOld\nameref
\renewcommand{\nameref}[1]{\textit{\namerefOld{#1}}}

之后\begin{document}或写

\AtBeginDocument{
  \let\namerefOld\nameref
  \renewcommand{\nameref}[1]{\textit{\namerefOld{#1}}}
}

在序言中。

相关内容