我怎样才能添加[
和]
左右\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>}{...}
这将按预期工作。我写的所有东西都用了很多计数器来做到这一点。