我想在输出中添加一些文本\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
。