Ich verwende das hyperref Paket, um in meinem durch Latex erzeugten PDF Dokument aktive Querverweise/Referenzen auf Gleichungen mit Labeln einzubauen. Ziel ist natürlich, wenn ich auf so eine Referenz klicke, dass der PDF Reader auf die Gleichung mit dem entsprechenden Label positioniert. Dies funktioniert aber nicht immer unter den Bedingungen, wie mein Dokument aufgebaut ist. Mein Dokument besteht aus einem in Kapiteln und Abschnitten organisierten Haupttext in dem die Gleichungen abschnittweise durchnummeriert werden. In Abschnitt 1 z.B. (1.1), (1.2), (1.3)… In diesen Haupttext sind Beispiele eingebunden, die ebenfalls Gleichungen enthalten können, die Beispiel lokal durchnummeriert werden (1), (2), (3)… Im folgenden Beispielcode ergibt sich also folgende Abfolge:

  • Beginn Haupttext von Abschnitt 1
  • Gleichung (1.1)
  • Gleichung (1.2)
  • Beginn Beispiel
  • Gleichung (1)
  • Gleichung (2)
  • Gleichung (3)
  • Ende Beispiel und Fortsetzung des Haupttextes von Abschnitt 1
  • Gleichung (1.3)

Ich habe an einigen Stellen Referenzen auf Gleichungen eingebaut. Obwohl optisch alles einwandfrei aussieht, gibt es funktional Probleme.

Es sieht so aus, als würde die Verlinkung immer das Label als Ziel haben, bei dem die niedrigst-wertige Stelle der Gleichungsnummerierung das erste Mal auftritt, also eine Referenz auf (1.1) oder (1) landet im obigen Beispiel immer bei (1.1) und eine Referenz auf (3) oder (1.3) landet immer bei (3).

Kann ich dieses Fehlverhalten umgehen oder Ist das ein prinzipielles Problem?

Hier der Beispielcode:

Open in Online-Editor
\documentclass[fleqn,usenames,dvipsnames]{scrbook}

\usepackage{amsmath}

\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]
 {hyperref}
\hypersetup{pdftitle={Template},
 linkcolor=red, citecolor=black, urlcolor=blue, filecolor=blue,  pdfpagelayout=OneColumn, pdfnewwindow=true,  pdfstartview=XYZ, plainpages=false, pdfpagelabels}

% for counterwithin
\usepackage{chngcntr}

%Equation Nummerierung innerhalb AuB hat eigenen Zähler
\newcounter{My_temp_eqn_counter}%

% Abschnitt wird arabisch durchnummeriert und nicht pro Kapitel neu angefangen
\renewcommand\thesection{\arabic{section}}
\counterwithout{section}{chapter}

% Nummerierung der Formeln abschnittsweise und nicht Kapitelweise wie der Default
\numberwithin{equation}{section}

\usepackage[ngerman]{babel}

%################################################################

\begin{document}

\section{Abschnitt}

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text

\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text\raggedbottom\pagebreak{}

Anfang des eingeschobenen Beispiels

\setcounter{My_temp_eqn_counter}{\value{equation}}
\setcounter{equation}{0}
\counterwithout{equation}{section}
\phantomsection
Beispieltext
\begin{align}
A & =B+C\label{eq:Beispiel_1}
\end{align}
\begin{align}
B & =D
\end{align}
\begin{align}
B & =D\label{eq:Beispiel_2}
\end{align}

Springe zu \ref{eq:Beispiel_1}

Springe zu \ref{eq:Beispiel_2}

\numberwithin{equation}{section}
\setcounter{equation}{\value{My_temp_eqn_counter}}

Ende des eingeschobenen Beispiels

\raggedbottom\pagebreak{}

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_3}
\end{align}

Springe zu \ref{eq:Text_3}
\end{document}

gefragt 05 Aug, 13:20

Joker's gravatar image

Joker
311
Akzeptiert: 0%

bearbeitet 06 Aug, 03:49

saputello's gravatar image

saputello
18.4k22352


Das Problem bei der Sache ist Dein kreativer Umgang mit Zählern. hyperref verwendet für die Anker, also die Sprungziele, ebenfalls die Zähler. Für Gleichungen ist das der statische Präfix equation. gefolgt von \theHequation. \theHequation ist wiederum als \theHsection.\arabic{equation} vordefiniert. Während \counterwithout natürlich die Zählerausgabe selbst, also \theequation umdefiniert, ändert es \theHequation nicht. Das ist normalerweise auch gut so. In Deinem Fall ist es das aber nicht, weil so jede Gleichung in demselben Abschnitt, bei der der Zähler equation den Wert 3 hat, denselben Ankername hat. pdfTeX warnt wegen dieser übereinstimmenden Anker auch:

pdfTeX warning (ext4): destination with the same identifier (name{equation.0.1.
3})

Was ist nun die Lösung? In einem ersten Ansatz könnte man natürlich nach \counterwithout{equation}{section} einfach \theHequation als \arabic{equation} umdefinieren. Wenn Du dann aber mehrere Beispiele hast und bei diesen immer wieder equation auf 0 setzt:

Open in Online-Editor
\documentclass[fleqn]{scrbook}

\usepackage{amsmath}

% for counterwithin
\usepackage{chngcntr}

%Equation Nummerierung innerhalb AuB hat eigenen Zähler
\newcounter{My_temp_eqn_counter}%

% Abschnitt wird arabisch durchnummeriert und nicht pro Kapitel neu angefangen
\counterwithout{section}{chapter}

% Nummerierung der Formeln abschnittsweise und nicht Kapitelweise wie der Default
\numberwithin{equation}{section}

\usepackage[ngerman]{babel}

\newcounter{last_Beispiel_eqn}
\newenvironment{Beispiel}{%
  \par
  \setcounter{My_temp_eqn_counter}{\value{equation}}%
  \setcounter{equation}{\value{last_Beispiel_eqn}}%
  \counterwithout{equation}{section}%
  \renewcommand*{\theHequation}{\arabic{equation}}%
}{%
  \setcounter{last_Beispiel_eqn}{\value{equation}}%
  \setcounter{equation}{\value{My_temp_eqn_counter}}%
  \counterwithin{equation}{section}%
  \par
}

\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]
 {hyperref}
\hypersetup{pdftitle={Template},
 linkcolor=red, citecolor=black, urlcolor=blue, filecolor=blue,  pdfpagelayout=OneColumn, pdfnewwindow=true,  pdfstartview=XYZ, plainpages=false, pdfpagelabels}

%################################################################

\begin{document}

\section{Abschnitt}

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text

\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text\raggedbottom\pagebreak{}

\begin{Beispiel}
Anfang des eingeschobenen Beispiels
Beispieltext
\begin{align}
A & =B+C\label{eq:Beispiel_1}
\end{align}
\begin{align}
B & =D
\end{align}
\begin{align}
B & =D\label{eq:Beispiel_2}
\end{align}

Springe zu \ref{eq:Beispiel_1}

Springe zu \ref{eq:Beispiel_2}

Ende des eingeschobenen Beispiels
\end{Beispiel}

\clearpage

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_3}
\end{align}

Springe zu \ref{eq:Text_3}
\end{document}

Ich habe im Beispiel außerdem eine saubere Trennung von Form und Inhalt durchgeführt, indem ich für Beispiele eine eigene Umgebung definiert habe. Das hat auch den Vorteil, dass die Umdefinierung von \theHequation lokal zu dieser Umgebung bleibt.

Obige Lösung funktioniert allerdings nur, solange die Gleichungen innerhalb der Beispiele über alle Beispiele des Dokuments durchnummeriert werden, also nicht bei jedem Beispiel wieder mit 1 beginnen. Sollte das der Fall sein, muss man den Anker auf andere Weise eindeutig machen. Das geht beispielsweise durch Verwendung eines eigenen Zähler für die Beispiele:

Open in Online-Editor
\documentclass[fleqn]{scrbook}

\usepackage{amsmath}

% for counterwithin
\usepackage{chngcntr}

%Equation Nummerierung innerhalb AuB hat eigenen Zähler
\newcounter{My_temp_eqn_counter}%

% Abschnitt wird arabisch durchnummeriert und nicht pro Kapitel neu angefangen
\counterwithout{section}{chapter}

% Nummerierung der Formeln abschnittsweise und nicht Kapitelweise wie der Default
\numberwithin{equation}{section}

\usepackage[ngerman]{babel}

\newcounter{Beispiel}
\newcommand*{\theHBeispiel}{B\arabic{Beispiel}}
\counterwithin*{equation}{Beispiel}
\newenvironment{Beispiel}{%
  \par
  \setcounter{My_temp_eqn_counter}{\value{equation}}%
  \refstepcounter{Beispiel}%
  \counterwithout{equation}{section}%
  \renewcommand*{\theHequation}{\theHBeispiel.\arabic{equation}}%
}{%
  \setcounter{equation}{\value{My_temp_eqn_counter}}%
  \counterwithin{equation}{section}%
  \par
}

\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]
 {hyperref}
\hypersetup{pdftitle={Template},
 linkcolor=red, citecolor=black, urlcolor=blue, filecolor=blue,  pdfpagelayout=OneColumn, pdfnewwindow=true,  pdfstartview=XYZ, plainpages=false, pdfpagelabels}

%################################################################

\begin{document}

\section{Abschnitt}

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text

\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text\raggedbottom\pagebreak{}

\begin{Beispiel}
Anfang des eingeschobenen Beispiels
Beispieltext
\begin{align}
A & =B+C\label{eq:Beispiel_1}
\end{align}
\begin{align}
B & =D
\end{align}
\begin{align}
B & =D\label{eq:Beispiel_2}
\end{align}

Springe zu \ref{eq:Beispiel_1}

Springe zu \ref{eq:Beispiel_2}

Ende des eingeschobenen Beispiels
\end{Beispiel}

\clearpage

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_3}
\end{align}

Springe zu \ref{eq:Text_3}
\end{document}

Bei dieser Version gebe ich allerdings zu bedenken, dass der Leser dann dasselbe Problem bekommt, das auch hyperref hat. Es gibt dann ggf. mehrere mit 1 nummerierte Gleichungen:

Open in Online-Editor
\documentclass[fleqn]{scrbook}

\usepackage{amsmath}

% for counterwithin
\usepackage{chngcntr}

%Equation Nummerierung innerhalb AuB hat eigenen Zähler
\newcounter{My_temp_eqn_counter}%

% Abschnitt wird arabisch durchnummeriert und nicht pro Kapitel neu angefangen
\counterwithout{section}{chapter}

% Nummerierung der Formeln abschnittsweise und nicht Kapitelweise wie der Default
\numberwithin{equation}{section}

\usepackage[ngerman]{babel}

\newcounter{Beispiel}
\newcommand*{\theHBeispiel}{B\arabic{Beispiel}}
\counterwithin*{equation}{Beispiel}
\newenvironment{Beispiel}{%
  \par
  \setcounter{My_temp_eqn_counter}{\value{equation}}%
  \refstepcounter{Beispiel}%
  \counterwithout{equation}{section}%
  \renewcommand*{\theHequation}{\theHBeispiel.\arabic{equation}}%
}{%
  \setcounter{equation}{\value{My_temp_eqn_counter}}%
  \counterwithin{equation}{section}%
  \par
}

\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]
 {hyperref}
\hypersetup{pdftitle={Template},
 linkcolor=red, citecolor=black, urlcolor=blue, filecolor=blue,  pdfpagelayout=OneColumn, pdfnewwindow=true,  pdfstartview=XYZ, plainpages=false, pdfpagelabels}

%################################################################

\begin{document}

\section{Abschnitt}

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_1}
\end{align}
Weiterer Text Weiterer Text Weiterer Text

\begin{align}
A & =B+C
\end{align}
Weiterer Text Weiterer Text Weiterer Text\raggedbottom\pagebreak{}

\begin{Beispiel}
Anfang des eingeschobenen Beispiels
Beispieltext
\begin{align}
A & =B+C\label{eq:Beispiel_1}
\end{align}
\begin{align}
B & =D
\end{align}
\begin{align}
B & =D\label{eq:Beispiel_2}
\end{align}

Springe zu \ref{eq:Beispiel_1}

Springe zu \ref{eq:Beispiel_2}

Ende des eingeschobenen Beispiels
\end{Beispiel}

\clearpage

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_3}
\end{align}

Springe zu \ref{eq:Text_3}

\clearpage
\begin{Beispiel}
Und noch ein Beispiel.
\begin{align}
X=Y\label{eq:Beispiel2_1}
\end{align}
\end{Beispiel}

Springe zu \eqref{eq:Text_1} oder \eqref{eq:Beispiel_1} im ersten Beispiel oder
\eqref{eq:Beispiel2_1} im zweiten Beispiel.
\end{document}

Zwar stimmen die Links, der Leser hat aber Orientierungsprobleme. Bei meinem ersten Lösungsvorschlag mit unabhängig nummerierten Gleichungen über alle Beispiele hinweg, tritt dieses Problem nicht auf.

BTW: Ich halte nichts davon, die Abschnitte unabhängig von den Kapiteln zu nummerieren. Das riecht eigentlich sehr danach, dass Kapitel in Wirklichkeit Teile sind.

BTW2: hyperref sollte immer so spät wie möglich geladen werden, weshalb ich es auch in meinen Beispielen entsprechend verschoben habe.

Permanenter link

beantwortet 06 Aug, 03:41

saputello's gravatar image

saputello
18.4k22352

bearbeitet 06 Aug, 03:55

Selbstverständlich sind Beispiele (und auch Aufgaben) bei mir Environments; und ziemlich genau so aufgebaut wie bei Deinem Lösungsvorschlag. Ich habe für die Problem Darstellung nur auf jeglichen Overhead verzichten wollen.

(06 Aug, 18:50) Joker

Deine Sorge bezüglich der nicht Eindeutigkeit von Gleichungen über mehrere Beispiele kann ich verstehen, das wird aber genau so auch in einigen Fachbüchern gemacht, von denen ich das Layout abgekupfert habe. Außerdem sind Beispiel Gleichungen immer lokal. Es wird nur innerhalb desselben Beispiels auf sie referenziert, meistens wenige Zeilen tiefer; niemals von außerhalb. Beispiele sind auch sonst optisch klar vom sie umgebenden Haupttext getrennt; so ähnlich wie in Johannes Beispielcode. Das sollte beim Leser also nicht zur Verwirrung führen.

(06 Aug, 18:51) Joker

Zur Position des hyperref Pakets kann ich nur sagen, dass ich da möglicherweise wenig Einfluss habe. Ich verwende als Frontend Editor LYX 2.1, damit ich leichter Formeln erstellen kann und das positioniert das usepackage{hyperref} leider an diese Stelle. Aber ich werde noch einmal überprüfen, ob ich das nicht irgendwie beeinflussen kann. Vielen Dank für den Tipp diesbezüglich.

(06 Aug, 18:51) Joker
Open in Online-Editor
\documentclass[fleqn,dvipsnames]{scrbook}

\usepackage{amsmath}
\usepackage{tcolorbox}
\newcounter{beispiel}
\newcounter{storeEq}
\newenvironment{beispiel}{\begingroup
    \setcounter{storeEq}{\value{equation}}
    \refstepcounter{beispiel}
    \setcounter{equation}{0}
    \renewcommand{\theequation}{\arabic{equation}}
    \renewcommand{\theHequation}{\thebeispiel\theequation}
}{\setcounter{equation}{\value{storeEq}}\endgroup}
\tcolorboxenvironment{beispiel}{}

\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=1,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false]
 {hyperref}
%\hypersetup{pdftitle={Template},
% linkcolor=red, citecolor=black, urlcolor=blue, filecolor=blue,  pdfpagelayout=OneColumn, pdfnewwindow=true,  pdfstartview=XYZ, plainpages=false, pdfpagelabels
% }

\usepackage{chngcntr}

\renewcommand\thesection{\arabic{section}}
\counterwithout{section}{chapter}

\numberwithin{equation}{section}

\usepackage[ngerman]{babel}

\begin{document}

\section{Abschnitt}

Wombats sind sehr niedlich.
\begin{align}
A & =B+C
\end{align}
Ein Mara ist ein Nagetier.

\begin{align}
A & =B+C
\end{align}
Capybaras sind ziemlich gro\ss.%\raggedbottom\pagebreak{}%JB Das ist quatsch
\clearpage

\begin{beispiel}
Beispieltext
%JB Das folgende ist Mist
%\begin{align}
%A & =B+C\label{eq:Beispiel_1}
%\end{align}
%\begin{align}
%B & =D
%\end{align}
%\begin{align}
%B & =D\label{eq:Beispiel_2}
%\end{align}
\begin{align}
A &=B+C\label{eq:Beispiel_1}\\
B &=D\\
B &=D\label{eq:Beispiel_2}
\end{align}

Springe zu \ref{eq:Beispiel_1}

Springe zu \ref{eq:Beispiel_2}
\end{beispiel}

%\raggedbottom\pagebreak{}%JB Das ist quatsch
\clearpage

Weiterer Text Weiterer Text Weiterer Text
\begin{align}
A & =B+C\label{eq:Text_3}\\
A & =B+C\label{eq:Text_b}
\end{align}

Springe zu \ref{eq:Text_3}

\begin{beispiel}
\begin{align}
b^2 + a^2 &= c^2\label{eq:pyth}\\
1+4 &\neq 2\label{eq:sum}
\end{align}

Springe zu \ref{eq:sum}

Springe zu \ref{eq:pyth}
\end{beispiel}
\begin{equation}
    1 \label{abc}
\end{equation}
\ref{abc}
\end{document}
Permanenter link

beantwortet 06 Aug, 03:19

Johannes's gravatar image

Johannes
7.2k132759

Da haben sich unsere Antworten wohl überschnitten. Ich lasse meine trotzdem drin, weil so noch ein paar Dinge erklärt und auf mögliche Probleme für den Leser hinweist und eine Alternative dafür bietet.

(06 Aug, 03:45) saputello

Der von Johannes und saputello vorgeschlagene Ansatz das \theHequation Beispiel-lokal umzudefinieren scheint mir die elegante und natürliche Lösung zu sein.

Ich bin kurz nachdem ich die Frage abgeschickt habe (manchmal hilft es halt einfach schon ein Problem auf das wesentliche herunter zu brechen um selber neue Ideen zu bekommen) noch auf eine andere – gegen euren Ansatz eher hemdsärmelige – Möglichkeit gekommen. Nachdem mir klar wurde, dass section eine Rolle spielen muss hab ich mir gedacht: Warum nicht nur den equation Zähler manipulieren sondern auch analog den section Zähler.

Also am Anfang des Dokuments:

Open in Online-Editor
\newcounter{My_section_store}%
\newcounter{My_Beispiel_section}%
\setcounter{My_Beispiel_section}{100}% eine Nummer die mit realen Sections nicht erreicht wird

Und dann zu Beginn eines Beispiels

Open in Online-Editor
\setcounter{My_section_store}{\value{section}}
\refstepcounter{My_Beispiel_section}
\setcounter{section}{\value{My_Beispiel_section}}

und am Ende des Beispiels

Open in Online-Editor
\setcounter{section}{\value{My_section_store}}

Das funktioniert auch, ist aber gegenüber den oben genannten Lösungen ziemlich dreckig.

Permanenter link

beantwortet 06 Aug, 12:33

Joker's gravatar image

Joker
311

bearbeitet 07 Aug, 02:58

saputello's gravatar image

saputello
18.4k22352

@Joker Hi Joachim! Zur Info, die strikte Einteilung in Frage und Antwort dient dem besseren Archiv-System (sortiert und bewertet), besser als in klassischen Diskussionsforen. Gespräche und Kommentare gern als Kommentar, statt als Antwort. Das Archiv mit Frage+Antwort+Bewertung dient denen optimal, die stillschweigend nur suchen, die Grundlage hierfür liefern Fragesteller (wie Du, prima) und Antworter.

(06 Aug, 14:24) stefan ♦♦

@saptuello @stefan Ich habe jetzt den Kommentarteil aus meiner Antwort entfernt und dahin verschoben, wo er (hoffentlich) hingehört.

(06 Aug, 18:57) Joker

Ich habe da noch einmal das Markdown korrigiert und weitere formale Änderungen vorgenommen.

Außerdem sei darauf hingewiesen, dass Du Deine mageren Punkte nicht zu verschenken brauchst. Wenn Du (oder irgend jemand) auf den Daumen hoch klickst, bekommt der Helfer bereits 10 Punkte vom System. Wenn Du eine Antwort akzeptierst, bekommt er noch einmal 15 Punkte. Die meisten Helfer haben so viele Punkte, dass sie ohnehin bereits alles dürfen, wofür man Punkte braucht. Damit Du wenigstens eigene Kommentare löschen kannst, bekommst Du deshalb Deine Punkte zurück.

(07 Aug, 03:04) saputello
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×41

Frage gestellt: 05 Aug, 13:20

Frage wurde angeschaut: 373 Mal

Zuletzt aktualisiert: 07 Aug, 03:04