add () um \ref{}

add () um \ref{}

Wie kann ich [und ]hinzufügen \ref{myref}, sodass ich etwa Folgendes erhalte:

[1.1] 

Das funktioniert nicht:

\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}

Antwort: Kommentieren Sie es aus \usepackage[colorlinks=true,allcolors=blue]{hyperref}, und es funktioniert. Aber ich brauche hyperref, ich möchte es nicht verwenden amsmath, und ich ziehe es vor, keine Pakete hinzuzufügen, da sie später dazu neigen, mit anderen Dingen zu kollidieren, wie z. B. der Verwendung von Plastex usw. Was kann ich tun?

Antwort1

Da hyperrefdie Dinge nach dem neu definiert werden \begin{document}, könnten Sie das renewcommandwie folgt verschieben \AfterBeginDocument:

Bildbeschreibung hier eingeben

Anmerkungen:

  • Mit der mit Sternchen gekennzeichneten Variante funktioniert das nicht \ref*.

Code:

\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}

Antwort2

Ich werte meinen Kommentar zu einer Antwort auf, da es eine solche zu sein scheint.

Anstatt zu verwenden \eqref, fügen Sie Folgendes in Ihre Präambel ein:

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

Wenn \refes auf die Bezeichnung einer Gleichung angewendet wird, hat es den gleichen Stil wie „ \eqrefund normalerweise auch anders“, und wenn hyperrefes verwendet wird, umfasst der Link die Klammern.

Beachten Sie, dass diese Technik zwar für andere Arten von Etiketten verwendet werden kann, jedoch ein Fehler in vorliegt amsthm, sodass bei Verwendung \newtheoremim Formular \newtheorem{<new theorem>}[<old theorem>]{...}Folgendes <new theorem>angezeigt wird:buchstäblichder gleiche Zähler wie <old theorem>, und fncylab(und tatsächlich cleverref) werden sie identisch beschriften. Die Problemumgehung besteht darin, dass Sie nach der Definition der Theoreme auch ihre Zähler duplizieren müssen:

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

Dies funktioniert wie erwartet. Ich mache das mit vielen Zählern in allem, was ich schreibe.

verwandte Informationen