将 autorefname 命令(例如 \itemautorefname )更改为 '' (空字符串)仍然会插入空格

将 autorefname 命令(例如 \itemautorefname )更改为 '' (空字符串)仍然会插入空格

我使用 hyperref\autoref{}来引用枚举的标记项。默认情况下,引用显示为“查看第 X 项我更愿意说“看看X“。

我将其重新定义\itemautorefname为空:

\renewcommand{\itemautorefname}{}

删除了“item”一词,但留下了额外的空间。

\renewcommand{\itemautorefname}{}

\begin{enumerate}
...
\item \label{T:myitem} foo
...
\end{enumerate}
...

% just to compare \ref vs \autoref
Do \autoref{T:myitem} with \ref{T:myitem}.\\
Do 3 with 3. \\

显示为:

示例输出

我该如何修剪多余的前导空格?

更新:为什么不只是\ref{}

有人可能会(而且有人确实指出)\ref{}在这种情况下使用它可能会更简单,以产生所需的输出。我坚持使用\autoref是没有意义的。我只是养成了在任何地方使用它的习惯,\autoref{}这样就不必担心我引用的东西的类型。如果我改变主意,然后想稍后将所有项目引用前缀为“规则”或其他内容,它可以简化重构。

答案1

\autoref使用(加载一些宏和扩展后)

\itemautorefname\space到底。

如果\itemautorefname定义为不执行任何操作,\space则仍然处于活动状态,但可以通过它将其删除gobbling,即吸收以下标记作为参数的“幽灵”宏,在本例中使用\@gobble

由于\@gobble是一个“@”字母命令,因此\makeatletter...\makeatother文档中需要该字母对。

现在,最后一个问题是:为什么autoref在这里使用 when\ref会产生相同的效果?;-)

\documentclass{article}

\usepackage{hyperref}


\makeatletter
\renewcommand{\itemautorefname}{\@gobble}
\makeatother



\begin{document}

\begin{enumerate}
\item \label{T:myitem} foo
\end{enumerate}

Do \autoref{T:myitem} with \ref{T:myitem}.
Do 3 with 3. 

\end{document}

在此处输入图片描述

相关内容