Hyperlink und Hypertarget mit mehreren Zielen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Schmantii
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Sa 5. Dez 2015, 02:42

Hyperlink und Hypertarget mit mehreren Zielen

Beitrag von Schmantii »

Hallo zusammen!
Ich befinde mich momentan im Bachelorstudium und ich nutze Latex seit ca. 3 Monaten - ich bin mittlerweile auch (gefühlt) recht gut drin und das, obwohl ich eigentlich kein Programmieren gelernt habe.
Ich habe mittlerweile auch schon ein fertiges Dokument mit dem sich - rein theoretisch - schon eine fertige Bachelorarbeit aufsetzen lässt. Ich bin lediglich nicht ganz damit zufrieden, dass sich mein Literaturverzeichnis nicht personalisieren lässt (die Implementierung von biblatex oder Alternativen wie natbib o.ä. ist kein Problem). Ich habe mich mit dem Thema lange beschäftigt und ich glaube einen Weg gefunden zu haben, das Verzeichnis weitgehend personalisierbar zu gestalten (ohne gleich neue Bibliographystyles zu schreiben, was ich ohnehin nicht könnte); wobei sich mein Stil zunächst an Stilen wie alphadin oder alphabetic-verb (biblatex) orientiert.
Ich stehe aber noch am Anfang und an einem wichtigen Schritt hapert's leider momentan - sobald dieser getan ist, werde ich dann (hoffentlich) weniger Probleme haben und das ganze Projekt alleine fertigstellen können.
Dieser Punkt betrifft die Verknüpfung der einzelnen Literatureinträge (ähnlich dem Package backref).

Ziel:
- Verknüpfung einzelner Zitationen im Text mit dem Verzeichnis am Ende
- Querverweis (wenn möglich Seiten) am Ende jedes Eintrages des Verzeichnisses zur Zitationsstelle

Problemfrage: Was passiert mit mehreren Zitationen eines Autors, wie lassen sich diese mit einem Eintrag verknüpfen (einzelne Zitationen sind eher das kleinere Problem)?

Lösungsansatz (findet sich im Anhang des Beitrags)
- if - conditions (z.B. Packages wie etoolbox) (ich arbeite momentan viel mit MatLab, wo ich viel mit if - Schleifen arbeite, von daher die Idee solche Strukturen zu verwenden)

- hyperlink{}{} und hypertarget{}{} für die Einträge im Text und im Verzeichnis

- \pageref{} zum Verweis auf die einzelnen Seiten

Kurze Erläuterung dazu:
Letztendlich soll er immer überprüfen ob ein bestimmter Toggle / Bootlean (oder wie auch immer man das nennen möchte) existiert.
Wenn ja, dann soll er überprüfen, ob der nächste existiert.
Wenn nein, soll er einen dementsprechenden Switch erstellen und mit \label{} verknüpfen, um später mit \pageref{} darauf zu verweisen. Außerdem soll er gleich einen hyperlink{}{} verwenden, um eine Brücke zum Eintrag im Verzeichnis zu schaffen.
Die \ifdef{}{}{} bzw. \ifundef{}{}{} Struktur ist so aufgebaut, dass er einfach immer in tiefere Äste springen soll, wenn ein Switch bereits existiert (analog zu bereits existierenden Zitationen im Text).

Vorhandene Probleme
- Verweis bislang nur im Text und das auch nur auf eine Zitation (er scheint wohl nur einen Switch zu erstellen)

- \hypertarget{}{} scheint im Literatureintrag nicht zu greifen; die Frage ist auch, ob man hier mehrere Ziele anwenden kann (dazu habe ich bislang keine Antwort gefunden)

- außerdem werden die Seiten am Ende des Eintrags nicht angezeigt (\pageref{} scheint aber zumindest bei der ersten Zitation zu funktionieren).

- eher nebensächlich und vergleichsweise einfach zu lösen: Verschiebung zwischen den Zeilen des Literatureintrages (hierfür wüsste ich nur gerne den Grund)

Ist schon echt ne Menge - ich hoffe aber, dass ihr mir dabei behilflich sein könnt. Bin offen für Anregungen und Verbesserungen (beachtet nur, dass ich kein Programmierer bin)! :D

Vielen Dank, beste Grüße und noch ein schööönes Restwochende,

Marius

\documentclass[12pt]{scrartcl}
\usepackage{hyperref}
\usepackage{etoolbox}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}%leftragged columns with flexible width

\begin{document}
\newcommand{\Source}[1]{%
\ifundef{\toggle{#1 1}}{\hyperlink{#1 1}{[#1]}\label{#1 1}\providetoggle{#1 1}\global\toggletrue{#1 1}}{%
	\ifundef{\toggle{#1 2}}{\hyperlink{#1 2}{[#1]}\label{#1 2}\providetoggle{#1 2}\global\toggletrue{#1 2}}{%
		\ifundef{\toggle{#1 3}}{\hyperlink{#1 3}{[#1]}\label{#1 3}\providetoggle{#1 3}\global\toggletrue{#1 3}}{%
			\ifundef{\toggle{#1 4}}{\hyperlink{#1 4}{[#1]}\label{#1 4}\providetoggle{#1 4}\global\toggletrue{#1 4} }{%
				\ifundef{\toggle{#1 5}}{\hyperlink{#1 5}{[#1]}\label{#1 5}\providetoggle{#1 5}\global\toggletrue{#1 5}}{%
					\ifundef{\toggle{#1 6}}{\hyperlink{#1 6}{[#1]}\label{#1 6}\providetoggle{#1 6}\global\toggletrue{#1 6}}{%
						\ifundef{\toggle{#1 7}}{\hyperlink{#1 7}{[#1]}\label{#1 7}\providetoggle{#1 7}\global\toggletrue{#1 7}}{%
							\ifundef{\toggle{#1 8}}{\hyperlink{#1 8}{[#1]}\label{#1 8}\providetoggle{#1 8}\global\toggletrue{#1 8}}{%
								\ifundef{\toggle{#1 9}}{\hyperlink{#1 9}{[#1]}\label{#1 9}\providetoggle{#1 9}\global\toggletrue{#1 9}}{%
									\ifundef{\toggle{#1 10}}{\hyperlink{#1 10}{[#1]}\label{#1 10}\providetoggle{#1 10}\global\toggletrue{#1 10}}}}}}}}}}}}

\newcommand{\Literatur}[2]{\hypertarget{% Ist es möglich ein hypertarget mit mehreren Zielen zu definieren?
\ifdef{\toggle{#1 1}}{%
		\ifundef{\toggle{#1 2}}{#1 1}{%
			\ifundef{\toggle{#1 3}}{#1 1,#1 2}{%
				\ifundef{\toggle{#1 4}}{#1 1,#1 2,#1 3}{%
					\ifundef{\toggle{#1 5}}{#1 1,#1 2,#1 3,#1 4}{%
						\ifundef{\toggle{#1 6}}{#1 1,#1 2,#1 3,#1 4,#1 5}{%
							\ifundef{\toggle{#1 7}}{#1 1,#1 2,#1 3,#1 4,#1 5,#1 6}{%
								\ifundef{\toggle{#1 8}}{#1 1,#1 2,#1 3,#1 4,#1 5,#1 6,#1 7}{%
									\ifundef{\toggle{#1 9}}{#1 1,#1 2,#1 3,#1 4,#1 5,#1 6,#1 7,#1 8}{%
										\ifundef{\toggle{#1 10}}{#1 1,#1 2,#1 3,#1 4,#1 5,#1 6,#1 7,#1 8,#1 9}{%
											#1 1,#1 2,#1 3,#1 4,#1 5,#1 6,#1 7,#1 8,#1 9,#1 10}}}}}}}}}}{}}
{[#1]} &#2 {\ifdef{\toggle{#1 1}}{%
		\ifundef{\toggle{#1 2}}{ (zitiert auf Seite~\pageref{#1 1})}{%
			\ifundef{\toggle{#1 3}}{ (zitiert auf Seite~\pageref{#1 1} und \pageref{#1 1})}{%
				\ifundef{\toggle{#1 4}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2} und \pageref{#1 3})}{%
					\ifundef{\toggle{#1 5}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3} und \pageref{#1 4})}{%
						\ifundef{\toggle{#1 6}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4} und \pageref{#1 5})}{%
							\ifundef{\toggle{#1 7}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4}, \pageref{#1 5} und \pageref{#1 6})}{%
								\ifundef{\toggle{#1 8}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4}, \pageref{#1 5}, \pageref{#1 6} und \pageref{#1 7})}{%
									\ifundef{\toggle{#1 9}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4}, \pageref{#1 5}, \pageref{#1 6}, \pageref{#1 7} und \pageref{#1 8})}{%
										\ifundef{\toggle{#1 10}}{ (zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4}, \pageref{#1 5}, \pageref{#1 6}, \pageref{#1 7}, \pageref{#1 8} und \pageref{#1 9})}{%
											(zitiert auf Seite~\pageref{#1 1}, \pageref{#1 2}, \pageref{#1 3}, \pageref{#1 4}, \pageref{#1 5}, \pageref{#1 6}, \pageref{#1 7}, \pageref{#1 8}, \pageref{#1 9} und \pageref{#1 10})}}}}}}}}}}{}}}
											
Erste Zitation \Source{shortcut}
\newpage
Zweite Zitation \Source{shortcut}\\[24pt]
Dritte Zitation \Source{shortcut}
\newpage
\noindent \textbf{References}\\[12pt]
\raggedright
\begin{tabular}{L{5cm}L{5cm}}
\Literatur{shortcut}{Book. Citation City, 2009.}
\end{tabular}
\end{document}

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

Beitrag von u_fischer »

Hm. Ich verstehe nicht wirklich, was du vorhast, aber es klingt erstens nach Prokrastination und zweitens danach, als möchtest du backref neu erfinden.

Grundsätzlich: Dein Code skaliert nicht. Du machst irgendwas von 1-10 und 11 geht dann nicht mehr, und -- soweit ich sehe -- ohne inhaltlichen Grund, sondern wahrscheinlich weil du einfach die Lust verloren hast. Das kann kein guter Code sein, da ist die Grundidee falsch.

Schmantii
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Sa 5. Dez 2015, 02:42

Beitrag von Schmantii »

Hallo Ulrike,

kann ich voll und ganz verstehen, dass das etwas unverständlich aussieht. Mir geht es bei der Sache aber nur darum, eine ähnliche Funktion wie backref einzubauen - neu erfinden möchte ich das Package aber auf keinen Fall (kann ich auch gar nicht); zumal auch aus Respekt vor den Leuten, die sich die Zeit genommen haben, ein Package zu programmieren. Nicht, dass wir uns da falsch verstehen. Mein Vorhaben soll auch gar nicht auf so einen Funktionsumfang (wie ein von der Funktion her vergleichbares Package) ausgelegt werden.

Von der Prokrastination möchte ich mich hier klar distanzieren. Ich habe mir hier schon Gedanken gemacht, warum ich hier z.B. bei 10 aufhöre (meinetwegen auch gerne 15 oder 20). Hintergrund dieses Gedankens ist einfach nur die Funktion, Mehrfachzitationen eines Autors zu verknüpfen - ich persönlich rechne erst einmal nicht damit, in einer wissenschaftlichen Arbeit mehr als 10 Mal jemand Einzelnes zu zitieren, weshalb noch mehr Konditionen hier in meinen Augen (zunächst) keinen Sinn machen.

Mir würde es auch schon reichen, auf meine Grundfrage Kann man mehrere hyperlinks mit einem target verknüpfen? eine Antwort zu bekommen (ich möchte hier ja auch nicht deine Zeit verschwenden).
Auf eine ähnliche Funktionsweise wie backref (über \pageref{}) würde ich notgedrungen auch verzichten - versucht haben wollte ich es aber trotzdem.

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

Beitrag von u_fischer »

 Ich habe mir hier schon Gedanken gemacht, warum ich hier z.B. bei 10 aufhöre (meinetwegen auch gerne 15 oder 20)
Das ist völlig egal, ob es aus praktischen Gründen ausreicht: Code, der nur mit großer Mühe von 10 auf 11 oder 15 oder 150 angepasst werden kann, ist strukturell falsch.
auf meine Grundfrage Kann man mehrere hyperlinks mit einem target verknüpfen?
Natürlich. Es können ja auch 100 Webseiten alle einen Link auf golatex setzen. [/quote]

Schmantii
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Sa 5. Dez 2015, 02:42

Beitrag von Schmantii »

Das ist völlig egal, ob es aus praktischen Gründen ausreicht: Code, der nur mit großer Mühe von 10 auf 11 oder 15 oder 150 angepasst werden kann, ist strukturell falsch.
Gut, dann werde ich versuchen, eine entsprechende Umstrukturierung vorzunehmen.

Trotzdem würde ich dich dann bitten, mir doch mitzuteilen, wie ich eine solche Multiverknüpfung mit dem Befehl \hypertarget{Ziel}{Text} in Latex vornehmen kann - das würde mir zunächst schon einmal weiterhelfen.

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

Beitrag von u_fischer »

Schmantii hat geschrieben: Trotzdem würde ich dich dann bitten, mir doch mitzuteilen, wie ich eine solche Multiverknüpfung mit dem Befehl \hypertarget{Ziel}{Text} in Latex vornehmen kann - das würde mir zunächst schon einmal weiterhelfen.
Wenn du deine Begriffe mal sortierst. Ich habe den Eindruck, dass du Link und Anker durcheinanderbringst. Mache lieber erstmal ein paar Tests, ohne biblatex und lauter toogles.

Schmantii
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Sa 5. Dez 2015, 02:42

Beitrag von Schmantii »

Habe mein Problem nun erfolgreich lösen können - war eine gute Idee, die ganze Sache doch noch einmal zu überdenken.
Vielen Dank an diesem Punkt und Ihnen noch einen schönen Sonntag! :)

Antworten