如何修改引用的内容,即 \ref 的输出

如何修改引用的内容,即 \ref 的输出

我想在输出中添加一些文本\ref。例如,我将使用 Sec. @2@ 而不是 Sec. 2。出于某种原因,只需重新定义\ref

\let\oldref\ref
\renewcommand{\ref}[1]{$@$\oldref{#1}$@$}

不能与 一起使用hyperref。我知道有,cleveref但我不想用\cref代替\ref

我还尝试改变部分的命名方案:

\renewcommand*{\thesection}{\arabic{section}\vphantom{y}}

但它会产生错误。

有许多问题询问类似的问题,但答案都指向内置机制,例如将引用放入括号中。

以下是一个示例文档:

\documentclass[a4paper]{article}

\usepackage{xcolor}
\usepackage{hyperref}

\let\oldref\ref
\renewcommand{\ref}[1]{$@$\oldref{#1}$@$}

\begin{document}
Sec.~\ref{sec:a} lorem lorem lorem lorem lorem lorem lorem lorem lorem lorem lorem lorem
Sec.~\ref{sec:b} ipsum

\section{A}
\label{sec:a}

\section{B}
\label{sec:b}
\end{document}

顺便说一句,我真正需要的是一个解决方案使 hyperref 下划线具有一致的高度因此增加\vphantom{y}输出也是可能的。

答案1

你应该真的使用cleveref功能。

然而,这是有效的。

\documentclass{article}
\usepackage{hyperref}

\AtBeginDocument{%
  \NewCommandCopy{\originalref}{\ref}%
  \renewcommand{\ref}[1]{@\originalref{#1}@}%
}

\begin{document}

\section{Test}\label{test}

Section \ref{test}

\end{document}

您需要最新的 LaTeX 内核(2020-10-01 或更高版本)。如果您的 TeX 发行版落后,请添加

\usepackage{letltxmacro}

\NewCommandCopy变成\LetLtxMacro

相关内容