добавить () вокруг \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>}{...}

Это будет работать так, как и ожидалось. Я делаю это со множеством счетчиков во всем, что пишу.

Связанный контент