PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit hyperref in PDFLaTeX



stonee
17-04-2005, 23:45
Hallo,
ich habe ein 50 seitiges Dokument in LaTeX erstellt. Um Jpeg-Bilder einzubinden habe ich PDFLaTeX benutzt.
Das Dokument ließ sich damit problemlos als PDF Datei erstellen.
(hab`s auch schon gedruckt)

Nun wollte ich noch eine PDF-Version erstellen, in der die Kapitel einerseits als Bookmarks auftauchen, und andererseits möchte ich auch gerne dass die Dokumenteninternen Verweise als "Links" auftauchen.

Das Einbinden von \usepackage{hyperref} sorgt nun beim compilieren für folgende Fehlermeldung und Abbruch:
----
Runaway argument?
{\@firstoffive }\fi \@safe@activesfalse sind diese beiden Konfigurat\ETC.
! File ended while scanning use of \Hy@setref@link.
<inserted text>
\par
l.133 \input{projektstart}
----

Zur Erklärung:
Ich habe das Dokument in mehrere .tex-Dateien aufgeteilt. projektstart ist eine dieser Dateien. Der kleine Satzauschnitt "sind diese beiden Konfigurat"
heißt im Original: "In Tabelle \ref{standardkonfig} sind diese beiden Konfigurationen, von denen sich die Netzbetreiber das für sie günstigere wählen können, ersichtlich."


:confused: Ich bin am Verzweifeln. Ich habe alles ausprobiert was ich im Internet und den Manuals von PDFTeX, Hyperref... finden konnte.

Habt Ihr eine Idee?
Wie gesagt, ohne hyperref funktioniert alles tadellos!

Boron
18-04-2005, 07:48
hyperref als letztes Paket einbinden.
Will heißen: nach \usepackage{hyperref} steht keine \usepackage mehr.

Das soll bei vielen hyperref-Problemen Wunder wirken :).

blubb
18-04-2005, 08:38
Die Zeile l.133 \input{projektstart} deutet darauf hin, das der Fejhler irgendwo in dieser Datei hängen kann.

Die Meldung sieht mir nach einem Folgefehler eines zerbrochenen Kommandos aus. Siehe http://www.dante.de/faq/de-tex-faq/html/makros3.html#79
Kann es sein, das dein \ref innerhalb eines anderen Kommandos steht?

Bau am besten ein Minimalbeispiel um zu sehen wo der Fehler ist.

stonee
18-04-2005, 13:25
Das \usepackage steht schon am Ende.
Das "Fehlermeldungs"\ref steht allein da.

Ich habe mal zwei .tex - Dateien vorbereitet.
Wäre super wenn sich das einer von Euch anschauen könnte ;)

P.s.: Mir ist aufgefallen dass dieses Beispiel dann funktioniert, wenn man es zweimal compilieren lässt. Bei meinem großen Dokument bringt dass leider nichts. Da bleibt die Fehlermeldung, egal wie oft man compiliert.

Boron
18-04-2005, 14:12
Dass dein Beispiel hier funktioniert habe ich gemerkt :).
Kannst du mal ein Minimalbeispiel basteln, das mit pdflatex genau deinen Fehler produziert?

stonee
18-04-2005, 14:29
Hallo,
das Beispiel hier funktioniert beim ersten Durchgang eben nicht!
Beim ersten Durchgang produziert es den gleichen Fehler wie mein großes Dokument beim ersten Durchgang.
--> Kann man das beheben?

Ich habe gerade bemerkt, dass mein großes Dokument beim zweiten Druchgang einen anderen Fehler bringt. Bei dieser Fehlermeldung bleibt es dann hängen:

(vg.lof
! Argument of \contentsline has an extra }.
<inserted text>
\par
l.4 \contentsline
{figure}{\numberline {1.2}{\ignorespaces Einfache Darstell...

?

Boron
18-04-2005, 14:39
So "minimal" ist das Beispiel nicht.
Ich musste erst deine ganzen \includegraphics{bilder/xyz.jpg} ändern, da ich deine Bilder ja nicht habe ;).

Ich habe dann alle bis auf eines auskommetiert.
Dieses eine habe ich auf ein Bild von mir geändert.

Wenn ich dann mit pdflatex übersetze, dann kommen nur noch vier Warnungen, dass er \begin{figure}[h] nicht mag und ein \begin{figure}[ht] daraus macht.

Aber ich bekomme keine Fehler. Nicht beim ersten Durchlauf, und nicht bei Weiteren.

blubb
18-04-2005, 14:52
@boron:
Ich mach mir das da immer einfach:
\renewcommand{\includegraphics}[2][]{}
Da der Fehler vermutlich nicht mit dem Bild, sondern einem schiefen caption/ref liegt ist es kein Problem die Bilder komplett zu ignorieren.

stonee:
Nach dem Bilder entfernen habe ich auch keine Probleme.

In meiner Signatur ist eine Anleitung zum erzeugen eines Minimalbeispiels.

Schau dir besonders Abbildung 1.6 an ("Blockschaltbild des \hspace {3pt}")
Das \hspace könnte ein Überbleibsel eines zerbrochenen Kommandos sein. und hat an der Stelle jedenfalls nicht zu suchen (ich wüsste jedenfals nicht warum).

Boron
18-04-2005, 14:58
\renewcommand{\includegraphics}[2][]{}Oha. Sehr clever. Werde ich mir merken.

stonee
18-04-2005, 20:23
Nach vielem rumprobieren bin ich etwas weitergekommen:

Das hyperref Paket definiert den Befehl "contentsline" um.
Im Anhang habe ich /listoffigures, dieses generiert die angehängte .lof Datei.

In dieser .lof Datei stehen viele "contentsline", welche aber das hyperrefpaket umdefiniert :mad:

Das compilieren klappt wenn ich vor jeden \befehl in der .lof Datei, ein \protect setzte.
Ich habe aber irgendwie keine Lust überall ein \protect einzufügen.

Ich möchte ja noch zusätzlich die List of Tables und das Literaturverzeichnis nutzen.

Gibt`s da ne andere Möglichkeit dem hyperref zu sagen dass es gefälligst bei seiner Umdefinition ein \protect benutzt :confused:

Ihr könnt den Fehler wahrscheinlich durch eine zusätzliche Zeile mit
\listoffigures
hervorrufen.

blubb
18-04-2005, 21:21
Läuft Problemlos, auch mit \listoffigures.
Ohne Minimalbeispiel kann dir kaum jemand helfen.
Ihr könnt den Fehler wahrscheinlich durch eine zusätzliche Zeile Ich betrachte es eher als deine Aufgabe zu prüfen, ob das Kommando den Fehler erzeugt.

stonee
18-04-2005, 21:29
Ich habe in meine .lof und .lot Dateien jeweils überall ein \protect davor gestellt.
Jetzt geht es.
Gibt es eine Möglichkeit einen String durch einen anderen zu ersetzen?
Wenn ja, dann würde ich gerne \contentsline durch \protect\contensline ersetzen.

Ich kann mir nicht erklären warum es bei Dir funktioniert. Benutzt Du auch PDFLaTeX?

blubb
18-04-2005, 21:39
Ich habe in meine .lof und .lot Dateien jeweils überall ein \protect davor gestellt. Und mit \nofiles gesichert, das es nicht wieder umgeschriben wird?

Ja ich nutze pdflatex.

Was mir an deinem Text auffällt: Manche Worte fehlen, der Text hat Lücken. Kann es sein, das du Sonderzeichen hast, die beim Einspielen der Datei ignoriert wurden, bei dir aber einen Fehler erzeugen?

Bsp: Gegen Ende des projekt.txt:
\caption{Blockschaltbild des}

stonee
19-04-2005, 10:07
Hallo blubb,

ich habe versucht ein "minimalbeispiel" zu machen und hab einfach ein bißchen Text rausgelöscht. Deswegen ist der Text nicht lesbar.

Das PDF ist jetzt fertig. Trotzdem finde ich es komisch dass ich überall ein \protect, in den .lof und .lot Dateien, einfügen musste.

Kann ich innerhalb von LaTeX eine Anweisung schreiben dass er "\captionline" durch "\protect\captionline" ersetzen soll?

blubb
19-04-2005, 12:25
Trotzdem finde ich es komisch dass ich überall ein \protect, in den .lof und .lot Dateien, einfügen musste. Das ist normalerweise unnötig (und unsinnig).

Und ohne Minimalbeispiel kann ich dir nicht sagen, was du oder deine Installation falsch macht.

rais
23-07-2005, 18:45
Das hyperref Paket definiert den Befehl "contentsline" um.
Im Anhang habe ich /listoffigures, dieses generiert die angehängte .lof Datei.

...genau das war mein Problem, als google mich hierherführte. Das Problem war allerdings nicht, (wie hier, so scheint's) übertragbar auf ein Minimalbeispiel - da lief dann alles, wie's soll :(
(naja, evtl. 'n paar mal enter drücken)



Gibt`s da ne andere Möglichkeit dem hyperref zu sagen dass es gefälligst bei seiner Umdefinition ein \protect benutzt :confused:


Der Fehler wird dadurch hervorgerufen, daß hyperref erst später in die Präambel aufgenommen wurde, d.h. LaTeX bzw. pdflatex lief bereits ohne hyperref's Erweiterungen im AUX/TOC/LOF/LOT.

Abhilfe schaffte hier also ein Löschen der von (pdf)latex erzeugten Hilfsdatei datei.aux - im ersten Durchlauf wird man dann sowas wie


Package hyperref Warning: old lof file detected, not used; run LaTeX again.

zu sehen bekommen: also dem guten Rat folgen, u. LaTeX nochmal aufrufen, dann sollte auch die LOF neu geschrieben werden. :D