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:
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} |
Das Problem bei der Sache ist Dein kreativer Umgang mit Zählern. 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 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 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 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: beantwortet 06 Aug '16, 09:41 saputello 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.
(07 Aug '16, 00: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.
(07 Aug '16, 00: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.
(07 Aug '16, 00: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} beantwortet 06 Aug '16, 09:19 Johannes 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 '16, 09:45)
saputello
|
Der von Johannes und saputello vorgeschlagene Ansatz das 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 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. @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 '16, 20:24)
stefan ♦♦
@saptuello @stefan Ich habe jetzt den Kommentarteil aus meiner Antwort entfernt und dahin verschoben, wo er (hoffentlich) hingehört.
(07 Aug '16, 00:57)
Joker
Ich habe da noch einmal das 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 '16, 09:04)
saputello
|