Referenzieren von "Gleichung (xxx)"

Formelsatz für Mathematik, Naturwissenschaften und Technik


Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Referenzieren von "Gleichung (xxx)"

Beitrag von Dimitri »

Hallo,

Weiß jemand, warum hier nicht "Gleichung (1)", d.h. die Klammer mitreferenziert wird???

LG
\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath}
\usepackage{hyperref}

\makeatletter
\@ifdefinable\equationname{%
\let\equationname\equationautorefname
}
\def\equationautorefname~#1\@empty\@empty\null{%
\equationname~(#1\@empty\@empty\null)%
}%
\makeatother

\begin{document}

\begin{align}
\label{eq:test}
  a=b
\end{align}
\autoref{eq:test}

\end{document}

Noch so einer

Beitrag von Noch so einer »

\equationrefname erwartet bei der Verwendung in hyperref kein Argument. Konkret wird es beispielsweise so verwendet:
\def\HyPsd@@autorefname#1.#2\@nil{%
  \ltx@IfUndefined{#1autorefname}{%
    \ltx@IfUndefined{#1name}{%
    }{%
      \csname#1name\endcsname\space
    }%
  }{%
    \csname#1autorefname\endcsname\space
  }%
}
Wenn Du es nun als Befehl mit Argument neu definierst, wird an der Stelle \space zum Argument. Es würde aber auch nichts nützen, wenn Du es jetzt einfach mit zwei Argumenten definierst, weil das dann wiederum nicht zur Verwendung von \HyPsd@@autorefname in \HyPdf@autorefname passt.

Erschwerend kommt hinzu, dass Deine Definition \begin{document} nicht überlebt, weil Du entweder babel oder die Zusammenarbeit von hyperref mit babel verstanden hast.

Die Frage ist also eigentlich eher: Wie kommst Du darauf, dass das funktionieren sollte? Es kann schlicht gar nicht funktionieren! Du solltest mit der Quelle der Informationen für diesen Code daher eher kritisch umgehen..

Nun könnte man natürlich mit Interna von hyperref rummurksen, bis es endlich klappt. Ich würde aber stattdessen analog zu \eqref ein \autoeqref definieren und am besten auch gleich \eqref selbst umdefinieren, so dass die Klammern ebenfalls Teil des Links werden:
\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath}
\usepackage{hyperref}

\makeatletter
\renewcommand*{\eqref}{%
  \@ifstar {\@@eqref}{\@eqref}%
}
\newcommand*{\@@eqref}[1]{%
  \textup{\tagform@{\ref*{#1}}}%
}
\newcommand*{\@eqref}[1]{%
  \hyperref[#1]{\@@eqref{#1}}%
}
\newcommand*{\autoeqref}[1]{%
  \hyperref[#1]{\equationautorefname\space\@@eqref{#1}}%
}
\makeatother

\begin{document}

\begin{align}
\label{eq:test}
  a=b
\end{align}
\autoref{eq:test} vs. \autoeqref{eq:test} vs. \eqref{eq:test}
vs. \eqref*{eq:test} vs. \ref{eq:test} vs. \ref*{eq:test}.

\end{document}
vielleicht kannst Du Heiko ja überreden, dass er zumindest die Umdefinierung von \eqref direkt in hyperref einbaut. Wäre IMHO sinnvoll.

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Dann kann ich aber nicht mehr auf Textstellen verweisen oder sehe ich das falsch???
\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath}
\usepackage{hyperref}

\makeatletter
\renewcommand*{\eqref}{%
  \@ifstar {\@@eqref}{\@eqref}%
}
\newcommand*{\@@eqref}[1]{%
  \textup{\tagform@{\ref*{#1}}}%
}
\newcommand*{\@eqref}[1]{%
  \hyperref[#1]{\@@eqref{#1}}%
}
\newcommand*{\autoeqref}[1]{%
  \hyperref[#1]{\equationautorefname\space\@@eqref{#1}}%
}
\makeatother

\begin{document}

\begin{align}
\label{eq:test}
  a=b
\end{align}
\begin{itemize}
\item[•]hallo\label{ff}
\end{itemize}
\autoref{eq:test} vs. \autoeqref{eq:test} vs. \eqref{eq:test}
vs. \eqref*{eq:test} vs. \ref{eq:test} vs. \ref*{eq:test}.\\
das geht so nicht\ref{ff}
\end{document}

Epllus
Forum-Guru
Forum-Guru
Beiträge: 470
Registriert: So 23. Sep 2012, 17:31

Beitrag von Epllus »

Dimitri hat geschrieben:Dann kann ich aber nicht mehr auf Textstellen verweisen oder sehe ich das falsch???
Du siehst was falsch:
\begin{itemize} 
\item[•]hallo\label{ff} 
\end{itemize} 
auf was möchtest du verweisen? Es hat gar keine Nummer.
Mit
\begin{enumerate} 
\item hallo\label{ff} 
\end{enumerate} 
funktioniert es einwandfrei.

Grüße
Epllus

PS: @ Dimitri: Bitte den Status anpassen.

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Danke! :-)

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath}
\usepackage{hyperref}
\usepackage[nameinlink]{cleveref}
\crefname{Bed}{Bedingung}{Bedingungen}
\crefformat{Bed}{#2Bedingung~(#1)#3}
\crefrangeformat{Bed}{Bedingung~(#3(#1)#4) und~(#5(#2)#6)}

\makeatletter
\renewcommand*{\eqref}{%
  \@ifstar {\@@eqref}{\@eqref}%
}
\newcommand*{\@@eqref}[1]{%
  \textup{\tagform@{\ref*{#1}}}%
}
\newcommand*{\@eqref}[1]{%
  \hyperref[#1]{\@@eqref{#1}}%
}
\newcommand*{\autoeqref}[1]{%
  \hyperref[#1]{\equationautorefname\space\@@eqref{#1}}%
}
\makeatother

\begin{document}

\begin{align}
c=d\label[Bed]{eq:test1}\\
a=b\label[Bed]{eq:test2}
\end{align}
hallo \cref{eq:test1,eq:test2} --> Bemerkungen (1) und (2)

\end{document}
Hallo, ich habe Mir heute das "\crefrangeformat" gebastelt. Dabei hätte ich gerne dass "Bemerkungen (1) und (2 mit Klammer referenziert wird, aber das geschieht nicht...
Ich sitze nun schon ne ganze Weile dranrum, aber ich versteh einfach nicht was ich ändern soll. :?
Kann Mir da jemand weiterhelfen.

Besserwisser

Beitrag von Besserwisser »

Vor allem verwendest Du noch immer den falschen Status! Warum machst Du das? (Mit dieser Frage stimmt der Status jetzt wieder, ohne dass ich ihn ändern muss).

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Warum?

Ich habe doch "Rückfrage" eingegeben und das von Mir war doch ne Rückfrage...

Besserwisser

Beitrag von Besserwisser »

Nein, das war von Dir keine Rückfrage, sondern eine weitere oder eine Ergänzungsfrage. Oder bist Du etwa ein potentieller Beantworter? Wenn Du schon so von kostenlos verfügbaren Informationen schwärmst, solltest Du sie auch nutzen! Warum schaust Du Dir nicht endlich die Erklärung zum Status an?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Hallo, ich habe Mir heute das "\crefrangeformat" gebastelt. Dabei hätte ich gerne dass "Bemerkungen (1) und (2 mit Klammer referenziert wird, aber das geschieht nicht...
Weil du gar kein Range benutzt. Dafür gibt es den \crefrange{eq1}{eq5}-Befehl.

Antworten