%20%D0%B2%D0%BE%D0%BA%D1%80%D1%83%D0%B3%20%5Cref%7B%7D.png)
Как мне сложить [
и ]
так \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>}{...}
Это будет работать так, как и ожидалось. Я делаю это со множеством счетчиков во всем, что пишу.