为什么 \renewcommand{\ref}{\autoref} 不能将 \ref 更改为 \autoref?

为什么 \renewcommand{\ref}{\autoref} 不能将 \ref 更改为 \autoref?

首先,我非常感谢这个社区迄今为止为我提供的帮助。无论如何,对于我的问题:

我感觉我在这里忽略了一些显而易见的东西。我想要...

\documentclass{article}

\usepackage{hyperref} 
\renewcommand{\ref}{\autoref}

\begin{document}
\section{Section Title} \label{anchor}
Blah Blah Blah. \ref{anchor}
\end{document}

打印为...

1 章节标题

啦啦啦。第 1 部分

但相反我得到了......

1 章节标题

啦啦啦啦。1

... so\ref不会被替换\autoref。我该如何纠正这个问题?我除了执行查找和替换改为?\ref\autoref

答案1

好的,找到了解决方案:

在此处输入图片描述

笔记:

  • 不使用任何常用的技巧:

    1. \renewcommand{\ref}[1]{\autoref{#1}}
    2. \def\ref#1{\autoref{#1}}
    3. \let\ref\autoref
    4. \LetLtxMacro\ref\autoref

    在这种情况下似乎有效。

    我怀疑是因为hyperref\AtBeginDocument所以有些东西在文档开头就被定义了。因此使用\AtBeginDocument将我们的重新定义放在要执行的命令队列的末尾\AtBeginDocument

    而且由于将\AtBeginDocumentto be 放在前面\usepackage{hyperref}不起作用,这证实了怀疑是正确的。

代码:

\documentclass{article}

\usepackage{hyperref} 


\AtBeginDocument{\renewcommand{\ref}[1]{\autoref{#1}}}

\begin{document}
\section{Section Title} \label{anchor}
Blah Blah Blah.  \autoref{anchor}  \ref{anchor}
\end{document}

相关内容