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

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


jada
Forum-Newbie
Forum-Newbie
Beiträge: 1
Registriert: Sa 8. Okt 2022, 21:09

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

Beitrag von jada »

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}

Gute*r Gȧst*in

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

Beitrag von Gute*r Gȧst*in »

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.

Antworten