在 \ref{} 周围添加 ()

在 \ref{} 周围添加 ()

我怎样才能添加[]左右\ref{myref}以便得到如下结果:

[1.1] 

这不起作用:

\documentclass{article}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}
\let\oldref\ref
\renewcommand{\ref}[1]{[\oldref{#1}]}
\begin{document}
\section{Section}
Why cannot include square brackets around cross references? \ref{S}
\subsection{Subsection\label{S}}
This is a subsection.
\end{document}

回答:注释掉\usepackage[colorlinks=true,allcolors=blue]{hyperref}就可以了。但我需要hyperref,我不想使用amsmath,而且我宁愿不添加包,因为它们以后往往会与其他东西发生冲突,例如使用 plastex 等。我该怎么办?

答案1

由于hyperref重新定义了之后的事情\begin{document},您可以将推renewcommand迟到\AfterBeginDocument

在此处输入图片描述

笔记:

  • 这不适用于带星号的版本\ref*

代码:

\documentclass{article}
\usepackage{letltxmacro}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}

\AtBeginDocument{%
    \LetLtxMacro\oldref{\ref}%
    \DeclareRobustCommand{\ref}[2][]{[\oldref#1{#2}]}%
}

\begin{document}
\section{Section}
Why cannot include square brackets around cross references? \ref{S}
\subsection{Subsection\label{S}}
This is a subsection.
\end{document}

答案2

我正在将我的评论升级为答案,因为它似乎是一个答案。

不要使用\eqref,而应将其放在序言中:

\usepackage{fncylab}
\labelformat{equation}{(#1)}

因此\ref应用于方程式的标签的样式就像\eqref并且通常是其他的,并且当hyperref使用时,链接包含括号。

请注意,虽然您可以将此技术用于其他类型的标签,但存在一个错误,amsthm因此,如果您\newtheorem在表单中使用\newtheorem{<new theorem>}[<old theorem>]{...}<new theorem>则将具有字面上地与 相同的计数器<old theorem>,和fncylab(实际上cleverref)将标记它们相同的内容。解决方法是,在定义定理之后,还必须复制它们的计数器:

\usepackage{aliascnt}
\newaliascnt{<new theorem>}{<old theorem>}
\labelformat{<new theorem>}{...}

这将按预期工作。我写的所有东西都用了很多计数器来做到这一点。

相关内容