Am Ende eines Dokuments sollen verschiedene Befehle ausgeführt werden. Hierzu verwende ich Folgender Code steht hierzu vor Open in writeLaTeX
\AtEndDocument{% % weiterer Code \label{page:ende}} Im Dokument wird dann mit Nun kommt es aber manchmal dazu, dass , vielleicht abhängig vom Inhalt des Dokuments und der Seitenfüllung, das Dokumentenende nicht richtig erkannt wird und "undefined references" als Fehler ausgegeben wird. In einem Fall, in dem das geschieht, hat mein Dokument zwei Seiten. Verwende ich im selben Dokument Open in writeLaTeX
\AtEndDocument{% % weiterer Code \label{page:ende} Hier ist das Dokument zu Ende.} kommt es zu keinen Fehlern in diesem Sinne, allerdings erhalte ich eine dritte Seite mit der Zeile "Hier ist das Dokument zu Ende." und Setze ich im selben Dokument allerdings das Label manuell am Ende, also ohne Verwendung von Aktualisierung: Alle Dokumente, in denen dieses Verhalten auftritt, enden mit einer selbstdefinierten Umgebung, an deren Ende Hier mal ein ähnliches Minimalbeispiel: Open in writeLaTeX
\documentclass{article} \usepackage{lipsum} \AtEndDocument{\label{page:ende}} \newenvironment{aufzaehlung}{% \begin{itemize}}{\end{itemize}\par\vspace{3ex}} \begin{document} \textbf{Insgesamt sind es \pageref{page:ende} Seiten.} \lipsum[1-9] \begin{aufzaehlung} \item Wer? \item Wie? \item Was? \item Warum? \item Wer nicht fragt bleibt dumm! \end{aufzaehlung} \end{document} Bei gefragt 05 Aug '14, 14:05 feynman
Ergebnis 5 von 13
show 8 more comments
|
Bei der Verwendung von
Für die ersten drei Probleme gibt es im Paket Für das letzte Problem gibt es keine Lösung. Da Zusammenfassend sei daher als Lösung: Open in writeLaTeX
\usepackage{scrlfile} \BeforeClosingMainAux{% \addtocounter{page}{-1}% Da wir uns ja nach der letzten Seite befinden. \label{page:ende}% \stepcounter{page}% Korrektur (s. o.) wieder rückgängig machen! } empfohlen. Näheres zu der Anweisung und der Problematik rund um Das Paket beantwortet 06 Aug '14, 10:05 gast3 @Ijon Tichy Danke für deine Antwort. Mit Hilfe von
(06 Aug '14, 11:20)
feynman
(06 Aug '14, 12:29)
gast3
Es ist nicht so einfach ein Minimalbeispiel hierzu zu liefern, da es ja scheinbar vom Inhalt abhängt und die Dokumente, bei denen es bei mir auftritt nicht unbedingt hier gelesen werden sollen. Wenn ich den Inhalt aber teilweise nur geringfügig ändere funktioniert wieder alles so wie es soll. Ich habe mich jetzt damit abgefunden für die letzte Seite lastpage und für meine Zähler totcount zu verwenden. Vielen Dank für die Mühe und die ausführliche Antwort, von der ich auf jeden Fall was lernen konnte.
(06 Aug '14, 12:38)
feynman
|
Ohne Minimalbeispiel lässt sich der eigentliche Fehler (von Deiner anderen Frage) nicht beantworten
Auch das hier beschriebene Verhalten kann ich nur reproduzieren, wenn die zweite Seite komplett leer ist, also auch gar nicht erstellt wird.
Verwendest Du irgendwo ein unnötiges
\newpage
oder\clearpage
?labels werden beim shipout geschrieben. Wenn nichts auf der Seite ist außer dem label, werden sie nie geschrieben. Versuch z.B.
\ref{a}abc\newpage\label{a}
. Das lastpage strengt sich ziemlich an, um solche Fälle zu umgehen und den label auch dann zu erzeugen, wenn AtEndDocument auf einer leeren Seite (z.B. nach clearpage um die Floats auszugeben) aufgerufen wird.Ich werde mal versuchen zwei Minimalbeispiele zu erzeugen. An der Verwendung von \newpage werde ich (im Alltag) vermutlich nicht vorbeikommen.
Aber ganz sicher brauchst Du (auch im Alltag) kein
\newpage
ganz am Ende?! In meiner Erfahrung braucht man\newpage
so gut wie nie, jedenfalls nicht nach\begin{document}
. Du weißt, wie man Code im Fließtext eingibt?Mit dem Paket
etoolbox
könnte man versuchen\preto\enddocument{\label{page:ende}}
.Ich denke ich brauche
\newpage
, da ich bewusst nicht unbedingt immer typographisch korrekte Seiten haben will und auch mal z.B. eine drittel Seite frei lasse. Vielleicht geht das ja auch ohne\newpage
, aber davon habe ich ehrlich gesagt keine Ahnung.Ausserdem wird im LaTeX clsguide daraufhingewiesen, dass
\AtBeginDocument
und\AtEndDocument
keinen Text setzen dürfen. Zumindest dein letztes Beispiel verstößt gegen das Verbot!@Henri Das ändert nichts am Problem, verwendet nur einen anderen Hook
@feynman Seiten frei zu lassen (z.B. in Arbeitsblättern) ist ja ein anderer Fall, aber auch da braucht man nicht als letztes im Dokument ein
\newpage
.@Nobbz ich hab eine (eher private) Klasse, die gegen dieses „Verbot“ sogar ziemlich dramatisch verstößt ;)
Vielleicht wurde was missverstanden. Am Ende meiner Dokumente steht selbstverständlich kein
\newpage
. Trotzdem taucht der beschriebene Sachverhalt manchmal auf.