PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : hyperref: "Abbildung 1.1" und nicht nur "1.1" als hyperlink



ElGato
19-11-2006, 13:11
Hallo,

habe schon sehr viel Zeit aufgewendet um z.B. "Abbildung 1.1" und nicht nur Abbildung "1.1" als hyperlink darstellen zu können. Und damit meine ich nicht das hyperref internet \autoref{Marke}, weil ich es gerne zusammen mit varioref nutzen möchte. Unten habe ich einen Befehl für Abbildung gefunden.

Habe:
\providecommand*{\abbvrefname}{Abbildung}\newcomma nd*{\abbvref}[1]{\hyperref[#1]{\abbvrefname}\vref{#1}
im Netz gefunden, leider weiß ich echt nicht, wie ich es anwenden soll (was ist der Befehl und wo soll ich hier den label setzten, kommt das in die Preämbel?).

Kann ich {Abbildung} problemlos in {\figurename} ändern (muss Protokolle in deutsch und in englisch schreiben, so ist es viel allgemeiner)?
Wie kann ich den Befehl auch für Tabellen nutzen?

Vielen Dank für Eure Hilfe!

rais
19-11-2006, 16:02
Hallo,

habe schon sehr viel Zeit aufgewendet um z.B. "Abbildung 1.1" und nicht nur Abbildung "1.1" als hyperlink darstellen zu können. Und damit meine ich nicht das hyperref internet \autoref{Marke}, weil ich es gerne zusammen mit varioref nutzen möchte. Unten habe ich einen Befehl für Abbildung gefunden.

Habe:
\providecommand*{\abbvrefname}{Abbildung}\newcomma nd*{\abbvref}[1]{\hyperref[#1]{\abbvrefname}\vref{#1}
im Netz gefunden, leider weiß ich echt nicht, wie ich es anwenden soll (was ist der Befehl und wo soll ich hier den label setzten, kommt das in die Preämbel?).

so, wie sich der Befehl anhört, ist er als Ersatz für \vref gedacht, ein \label setzt Du also wie gewohnt hinter \caption, packst die Definition in die Präambel, und nutzt \abbvref{marke} im Text.

Kann ich {Abbildung} problemlos in {\figurename} ändern (muss Protokolle in deutsch und in englisch schreiben, so ist es viel allgemeiner)?

Evtl tut es bereits


\newcommand*{\abbvref}[1]{\hyperref[#1]{\figurename}\vref{#1}}


Wie kann ich den Befehl auch für Tabellen nutzen?

da dürfte das Einfachste ein entsprechend zweiter Befehl sein:


\newcommand*{\tabvref}[1]{\hyperref[#1]{\tablename}\vref{#1}}

dann solltest Du mit \abbvref{fig:marke} bzw. \tabvref{tab:marke} entsprechend getrennt auf Abbildungen und Tabellen verweisen können.

d.h. evtl müsstest Du noch ein \thefigure an \figurename, \thetable an \tablename anschließen...
MfG,

ElGato
20-11-2006, 00:36
Hi rais,

Du glaubst ja gar nicht, wie dankbar ich Dir bin!

Vielen, vielen Dank!!!!!!!!!!!!!!!!!!!!

Ich habe echt Stunden mit diesem Problem verbracht, aber nun ist es gelöst!

Nochmals Danke!
ElGato

ElGato
20-11-2006, 08:20
Hallo,

tut mir leid, über Nacht ist mir etwas eingefallen.
Also Deine Anleitung funktioniert perfekt keine Frage, aber wie kann ich genau daselbe mit
Kapiteln (chapter), Abschnitten (section), Unterabschnitten (subsection), Unterunterabschnitten (subsubsection) machen? Am Besten mit etwas globalen, also einem Namen für Chapter, wie für Abbildung {\figurename} das gleich verschiedene Sprachen abdeckt.

Genau hier versuche ich die \autoref{} Befehle mit den \vref{} Befehlen zu kombinieren.
Schade, dass es für sowas kein Packet gibt :-(

So etwas gab es bisher noch nie im Netz, wäre toll, wenn es jemand schafft.

rais
20-11-2006, 21:33
Hallo,


tut mir leid, über Nacht ist mir etwas eingefallen.
Also Deine Anleitung funktioniert perfekt keine Frage, aber wie kann ich genau daselbe mit
Kapiteln (chapter), Abschnitten (section), Unterabschnitten (subsection), Unterunterabschnitten (subsubsection) machen? Am Besten mit etwas globalen, also einem Namen für Chapter, wie für Abbildung {\figurename} das gleich verschiedene Sprachen abdeckt.

Naja, \chaptername sollte eigentlich bereits definiert sein, d.h. bei den KOMA-Klassen gab's afaik auch einen Befehl, der gleich zwischen normalen Kapiteln und solchen im Anhang unterschieden hat, mußt Du mal im scrguide nachlesen.
Für die (Unter...)Abschnitte gab's afaik keine vordefinierten Namen, die könntest Du aber selbst anlegen, z.B.


\newcommand{\sectionname}{section}

und vllt mit babel auch gleich


\addto\captionsngerman{%
\renewcommand{\sectionname}{Abschnitt}%
}
\addto\captionsspanish{%
\renewcommand{\sectionname}{wie-auch-immer-ein-Abschnitt-auf-Spanisch-heißt}%
}
:
definieren, das sollte unterschiedliche Sprachunterstützung gleich mit abhaken.
So könntest Du nach demgleichen Strickmuster wie bei \abbvref entsprechende Befehle bereitstellen - das ist zwar noch etwas umständlich, aber mir fällt im Moment nix dazu ein, wie man anhand der Marke rausbekommen könnte, worauf sie denn verweist (dann bräuchte man wieder nur einen Befehl im Text zu verwenden) - aber dann sitz' ich auch gerade nicht an meinem heimischen Rechner und könnt' drauflosprobieren :D
MfG,

ElGato
21-11-2006, 19:46
Hi,

habe mich wieder durch die hyperref doku gekämpft und habe die optimale Lösung gefunden:

\newcommand*{\fvref}[1]{\hyperref[#1]{\figurename}\vref{#1}} % Abbildung + Nr., als hyperlink mit varioref
\newcommand*{\tvref}[1]{\hyperref[#1]{\tablename}\vref{#1}} % Tabelle + Nr., als hyperlink mit varioref
\newcommand*{\chaptervref}[1]{\hyperref[#1]{\chapterautorefname}\vref{#1}} % Kapitel + Nr., als hyperlink mit varioref
\newcommand*{\sectionvref}[1]{\hyperref[#1]{\sectionautorefname}\vref{#1}} % Abschnitt + Nr., als hyperlink mit varioref
\newcommand*{\subsectionvref}[1]{\hyperref[#1]{\subsectionautorefname}\vref{#1}} % Unterabschnitt + Nr., als hyperlink mit varioref

So sind die Befehle sehr flexible und die Bezeichnungen (Kapitel, chapter, Abschnitt, section...) richten sich nach der dementsprechenden Sprache.

Viel Spaß damit!

ElGato

ElGato
18-07-2011, 03:10
Es gibt bei jedem 2. Kompilieren mit Xetex einen Fehler, wenn es zu einem Seitenumbruch des Hyperlinks kommt. Dabei gibt es mal 2 Seiten (mit Fehler) und mal 3 Seiten:



\documentclass{scrbook}
\usepackage{xltxtra}
\usepackage[ngerman]{babel}
\usepackage[german]{varioref}
\usepackage{hyperref}

\newcommand*{\fvref}[1]{\hyperref[#1]{\figurename}\vref{#1}}


\begin{document}
\begin{figure}
\rule{5cm}{4cm}\label{Bild1}
\caption{Quadrat}
\end{figure}
\clearpage

\vspace*{20cm}

\hspace{10cm} \fvref{Bild1}.

\end{document}


Fehler:



LaTeX Info: Redefining \ref on input line 10.
LaTeX Info: Redefining \pageref on input line 10.
LaTeX Info: Redefining \nameref on input line 10.
(./Hyperref.out) (./Hyperref.out)
\@outlinefile=\write3
\openout3 = `Hyperref.out'.
LaTeX Info: Redefining \Ref on input line 10.
(/usr/local/texlive/2010/texmf-dist/tex/generic/oberdiek/se-ascii-print.def
File: se-ascii-print.def 2010/03/01 v1.8 stringenc: Printable ASCII characters
)
[1]
! Package varioref Error: \vref at page boundary 2-3 (may loop).
See the varioref package documentation for explanation.
Type H <return> for immediate help.
...
l.19 \hspace{10cm} \fvref{Bild1}
.
Please check the pages in question. You might need to replace the \vref
or \vpageref by a normal \(page)ref to stop LaTeX running forever.
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 21.
[2
]
Package atveryend Info: Empty hook `AfterLastShipout' on input line 21.
(./Hyperref.aux)
Package atveryend Info: Empty hook `AtVeryEndDocument' on input line 21.
Package atveryend Info: Empty hook `AtEndAfterFileList' on input line 21.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 21.
)
Here is how much of TeX's memory you used:
17343 strings out of 494522
287314 string characters out of 3156642
407125 words of memory out of 3000000
20441 multiletter control sequences out of 15000+200000
3964 words of font info for 18 fonts, out of 3000000 for 9000
670 hyphenation exceptions out of 8191
52i,7n,51p,547b,337s stack positions out of 5000i,500n,10000p,200000b,50000s
Output written on Hyperref.pdf (2 pages).


Wie kann ich den Fehler loswerden?

Vielen Dank und liebe Grüße,

ElGato

ElGato
21-07-2011, 12:29
Das Problem lag an varioref und ist in der Dokumentation beschrieben:



Suppose, for example, that a generated text like ‘on the next page’ gets broken across pages. If this happens it is very difficult to find an acceptable solution and in fact can even result in a document that will always change from one state to another (i.e., inserting one string, finding that this is wrong, inserting another string on the next run which makes the first string correct again, inserting . . . ). The current implementation of varioref therefore issues an error message whenever the generated text is broken across page boundaries, e.g.,

table 5 on the current (pagebreak) page

would would result in an error, which needs to be resolved by the user by replacing the \vref command with an ordinary \ref just before the final run. This is not completely satisfactory but in such case no solution really is. During document preparation, while one is still changing the text, such error messages can be turned into warnings by placing a \vrefwarning command in the preamble.


Heute bin ich auf die Idee gekommen, den Vorschlag von rais etwas zu modifizieren, indem ich das Paket cleveref verwende, das automatisch die richtigen Bezeichnungen (Abbildung, Tabelle, Kapitel ...) ausgibt.



\renewcommand*{\cref}[1]{\hyperref[#1]{\rightarrow \vref{#1}}}


Wäre diese Umdefinierung in dieser Form okay?

Liebe Grüße,

ElGato



\documentclass{scrreprt}
\usepackage{xltxtra}
\usepackage[ngerman]{babel}
\usepackage[german]{varioref}
\usepackage{hyperref}
\usepackage[all]{hypcap}
\usepackage[german]{cleveref}

\renewcommand*{\cref}[1]{\hyperref[#1]{Pointinghand \vref{#1}}}

\begin{document}
\chapter{test}\label{test}
Hier steht nur etwas Dummytext, damit ich die Zeile voll kriege. Siehe
\cref{test}.
\clearpage

\section{Sektion}\label{Sektion}
\begin{figure}
\rule{5cm}{4cm}
\caption{Quadrat}\label{fig:Bild1}
\end{figure}

Siehe \cref{fig:Bild1} oder \cref{test}

\end{document}

vci
21-07-2011, 12:33
Respekt, deinen alten Thread auszubuddeln und darin weiterzuposten statt einen neuen aufzumachen :-)

Bei deinem Problem kann ich dir jedoch leider nicht helfen :-(

Sepp99
21-07-2011, 12:49
Könnte auch ein Problem mit xelatex sein:
http://www.komascript.de/node/1486
Dein erstes Beispiel funktioniert übrigens auch, wenn ich mit Text, anstatt mit \vspace oder \hspace arbeite, und einige Umformungen mache.
Siehe auch Deinen Post
http://www.mrunix.de/forums/showthread.php?t=71502


\listfiles
\documentclass{scrbook}
\usepackage{xltxtra}
\usepackage[ngerman]{babel}
\usepackage[german]{varioref}
\usepackage{blindtext}
\usepackage{hyperref}

\newcommand*{\fvref}[1]{\hyperref[#1]{\figurename}\vref{#1}}


\begin{document}
Siehe auch \fvref{Bild2}.
\begin{figure}
\rule{5cm}{4cm}
\caption{Quadrat}\label{Bild1}
\end{figure}
\blindtext[5] \fvref{Bild1}.
\begin{figure}[h]
\rule{5cm}{4cm}
\caption{Quadrat}\label{Bild2}
\end{figure}
Siehe auch \fvref{Bild2}.
\end{document}

Siehe Anhang.
Gruß, Sepp.-

ElGato
21-07-2011, 13:27
Hallo,

ich schätze, ich habe zu lange geschrieben, so dass schon 2 Antworten da waren ... Meine Lösung seht ihr oben.

Ich wollte keinen neuen Thread eröffnen: Besser eines in dem alles steht (kenne mich aber mit Foren nicht soo gut aus).

Danke für eure Antworten, aber wie schon gesagt, der Fehler liegt wohl an varioref.

sommerfee
13-08-2011, 11:13
Genau hier versuche ich die \autoref{} Befehle mit den \vref{} Befehlen zu kombinieren.
Schade, dass es für sowas kein Packet gibt :-(

So etwas gab es bisher noch nie im Netz, wäre toll, wenn es jemand schafft.

Ist die Problematik eigentlich noch aktuell?

Wenn ja, gibt es hier einige Beispiele:

http://www.mrunix.de/forums/showthread.php?t=65531
http://www.mrunix.de/forums/showthread.php?t=71566

(Die Sache mit den x verschiedenen Befehlen, für jede Gliederungsebene einen, kann man sich also sparen.)

ElGato
13-08-2011, 12:39
Die Problematik ist nicht mehr aktuelle, da ich nun cleveref verwende.

Varioref verursacht Fehler, wenn es zu einem Seitenumbruch IM Verweis kommt. Beispiel: Der Verweise "siehe nächste Seite" ist falsch, wenn der Verweis auf der vorherigen Seite anfängt und auf der Seite, wo der Verweis hinführt endet.

Diesen Fehler kann man in als Warnung ausgeben lassen, dann geht wenigstens das Kompilieren fehlerfrei. Hierzu reicht der Befehl

\vrefwarning

Mittlerweile kombiniere ich die Mischung aus hyperref, varioref und cleveref:

\renewcommand*{\cref}[1]{\hyperref[#1]{ZEICHEN \vref{#1}}} %Kombination aus cleveref und hyperref

Es reduziert einen Haufen Befehle :) und funktioniert ganz gut.

Mehr gibts hier:

http://www.mrunix.de/forums/showthread.php?t=71502

Hier wird auch das Problem behandelt, dass auf Verweise im Fließtext, Fußnote erwähnt wird.