带有可选参数的 Autoref

带有可选参数的 Autoref

我一直想做的是使用\autoref可选参数,类似于经常使用的\cite:我希望能够写入\autoref[comment]{label},以在最终的 pdf 中获得 [标签链接,注释]。有什么方法可以做到这一点(特别是使用 autoref,而不是其他引用包/命令)?感谢您的帮助。

答案1

请参阅以下三个不同版本(由于 OP 的变更请求)

有了xparse它,重新定义一些命令就非常容易了,只要原始版本\autoref也存储起来,这需要\LetLtxMacro来自letltxmacro包。

由于\autoref有一个带星号的版本,\autoref*因此也必须捕获该版本。

\RenewDocumentCommand{\autoref}{som}{...}

重新定义\autoref并提供带星号的第一个参数(s)、可选的(o)第二个参数(用于注释)和强制的(m)第三个参数(用于标签名称)。

可以通过\IfBooleanTF{#1}{}{}调用带星号的版本进行检查,也\IfValueTF{#2}{}{}可以通过指定可选参数进行检查。

请注意,评论未包含在超链接框/框架中!如果需要,则需要做更多工作。

\documentclass{article}

\usepackage{hyperref}
\usepackage{letltxmacro}
\usepackage{xparse}


\AtBeginDocument{%
  \LetLtxMacro\autoreforig\autoref
  \RenewDocumentCommand{\autoref}{som}{%
    \IfBooleanTF{#1}{%
      \autoreforig*{#3}\IfValueT{#2}{#2}%
    }{%
      \autoreforig{#3}\IfValueT{#2}{#2}%
    }%
  }
}

\begin{document}

See \autoref[ is very nice]{section:foo} or \autoref*[ is nice too]{section:foobar}

\section{Foo section}\label{section:foo}

\section{Foo bar section}\label{section:foobar}

\end{document}

在此处输入图片描述

使用方括号更新

\documentclass{article}

\usepackage{hyperref}
\usepackage{letltxmacro}
\usepackage{xparse}


\AtBeginDocument{%
  \LetLtxMacro\autoreforig\autoref
  \RenewDocumentCommand{\autoref}{som}{%
    [%
    \IfBooleanTF{#1}{%
      \autoreforig*{#3}% 
    }{%
      \autoreforig{#3}%
    }%
    \IfValueT{#2}{,\space#2}]%
  }
}


\begin{document}

See \autoref[is very nice]{section:foo} or \autoref*[is nice too]{section:foobar}

\section{Foo section}\label{section:foo}

\section{Foo bar section}\label{section:foobar}

\end{document}

第三部分:

\documentclass{article}

\usepackage{hyperref}
\usepackage{letltxmacro}
\usepackage{xparse}


\AtBeginDocument{%
  \LetLtxMacro\autoreforig\autoref
  \RenewDocumentCommand{\autoref}{som}{%
    \IfValueT{#2}{[}%
    \IfBooleanTF{#1}{%
      \autoreforig*{#3}% 
    }{%
      \autoreforig{#3}%
    }%
    \IfValueT{#2}{,\space#2]}%
  }
}


\begin{document}

See \autoref[is very nice]{section:foo} or \autoref*[is nice too]{section:foobar}, but \autoref{section:foo} or \autoref*{section:foobar} are without comment. 

\section{Foo section}\label{section:foo}

\section{Foo bar section}\label{section:foobar}

\end{document}

答案2

从 TeXlive 2023 等开始,针对新 LaTeX 的更新解决方案:

\AtBeginDocument{%
   \NewCommandCopy\autoreforig\autoref
   \RenewDocumentCommand{\autoref}{som}{%
      \IfBooleanF{#1}{%
         \hyperref[#3]%
      }{%
         \autoreforig*{#3}\IfValueT{#2}{\nobreak}\xspace\IfValueT{#2}{#2}%
      }%
   }
}

感谢 Ulrike Fischer 和 David Carlisle 的快速回复!

相关内容