Fußzeile abhängig von der Anzahl der Seiten-->machbar?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Fußzeile abhängig von der Anzahl der Seiten-->machbar?

Re: Fußzeile abhängig von der Anzahl der Seiten-->machbar?

von Gute*r Gȧst*in » So 9. Okt 2022, 10:51

Du hast da gleich drei Probleme. Zum einen ist die Anzahl der Seiten im ersten LaTeX-Durchlauf tatsächlich noch gar nicht bekannt. Desweiteren ist \numpages gar keine Zahl, sondern ggf. ein formatierter Text. Definiert ist das als:
\def\numpages{\@ifundefined{exam@lastpage}%
  {\mbox{\normalfont\bfseries ??}}%
  \exam@lastpage
}% numpages
Das dabei verwendete interne \exam@lastpage ist tatsächlich so etwas ähnliches wie eine Zahl und in der Regel als Zahl verwendbar, wenn es definiert ist. Das ist es aber erst ab dem zweiten LaTeX-Lauf. Hier kommt das dritte Problem ins Spiel. Da nämlich \exam@lastpage über die aux-Datei von einem LaTeX-Lauf zum nächsten gerettet wird, ist es erst nach \begin{document} wirklich gültig. Also muss die gewünschte Einstellung für mehrseitige Dokumente mit \AtBeginDocument verzögert werden:
\documentclass[a4paper, ngerman, 11pt, addpoints, answers]{exam}
\usepackage[ngerman]{babel}% deutsche Trennregeln
\pagestyle{headandfoot}

% Erst die gewünschte Grundeinstellung und Einstellung für eine Seite.
\firstpageheader{}{}{}%
\firstpagefooter{}{}{}
\runningheader{}{}{}
\runningfooter{}{}{}
\makeatletter
\AtBeginDocument{%
  \@ifundefined{exam@lastpage}{% Wenn die Anzahl Seiten noch unbekannt ist, tue nichts
  }{% Sonst
    \ifnum\exam@lastpage>\@ne% wenn die Anzahl Seiten > 1 ist
      \firstpagefooter{}{}{\thepage{} von \numpages}% gibt die Seitennummer und Anzahl im Fuß der ersten Seite
      \runningheader{}{}{\thepage{} von \numpages}% und Kopf der anderen Seiten aus.
    \fi
  }%
}
\makeatother

\begin{document}
Hello world
\newpage
Hello again
\end{document}
Selbstverständlich liefert dieses Dokument frühestens nach 2 LaTeX-Läufen den korrekten Kopf bzw. Fuß. Im Online-Editor werden automatisch genügend LaTeX-Läufe durchgeführt.

Einschränkend sei noch darauf hingewiesen, dass eventuell \numpags und damit auch \exam@lastpage gar nicht die richtigen Werten liefern. Siehe dazu u. a. \totalnumpages in der Anleitung. Dessen Definition und das daraus resultierende als Zähler verwendbare Makro ist ggf. exam.cls zu entnehmen.

Darüber hinaus sei darauf hingewiesen, das sich selbst exam nie eingesetzt habe. Alle meine Äußerungen dazu sind also mit Vorsicht zu genießen. Insbesondere habe ich nicht die komplette Anleitung studiert und weiß daher nicht, ob die Klasse dafür nicht eine bessere Methode bereitstellt.

Fußzeile abhängig von der Anzahl der Seiten-->machbar?

von jada » Sa 8. Okt 2022, 21:28

Hallo zusammen,
ich versuche, ein Dokument so zu gestalten, dass abhängig von der Gesamtseitenzahl die erste Fußzeile entweder leer ist (#Seiten=1) oder einen Eintrag besitzt (#Seiten>1).

Eine \ifnum-Abfrage über \numpages (aus der exam-class) scheitert vermutlich, da die \numpages erst mit einem Wert belegt wird, wenn das ganze Dokument kompiliert ist?

Gibt es einen Weg, das Problem zu lösen?

LG
jada
\documentclass[a4paper, ngerman, 11pt, addpoints, answers]{exam}
\usepackage[ngerman]{babel}% deutsche Trennregeln
\pagestyle{headandfoot}

\firstpageheader{\numpages}{}{}
\ifnum\numpages>1
	\firstpagefooter{}{}{\thepage\ von \numpages}
	\runningheader{}{}{\thepage\ von \numpages}
	\runningfooter{}{}{}
\else
	\firstpagefooter{}{}{}
\fi

\begin{document}
Hello world
\newpage
Hello again
\end{document}

Nach oben