Ich habe folgendes Beispiel:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}

\cfoot{Seite \thepage\ von \pageref{LastPage}}

\begin{document}
%\lipsum[1]  % keine Seitennummerierung
\lipsum   % Seitennummerierung
\label{LastPage}
\end{document}

Nun möchte ich, dass die Seitennummerierung nur dann gedruckt wird, wenn der Text auch mehr als eine Seite umfasst. Ich hab dies zunächst wie folgt probiert:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}
\usepackage{ifthen}

\ifthenelse{\pageref{LastPage}>1}%
  {\cfoot{Seite \thepage\ von \pageref{LastPage}}}%
  {\cfoot{}}

\begin{document}
%\lipsum[1]  % keine Seitennummerierung
\lipsum   % Seitennummerierung
\label{LastPage}
\end{document}

Dies funktioniert nicht, es wird nun grundsätzlich keine Seitennummerierung mehr gedruckt.

Wenn ich die if-Abfrage aber statt in die Präambel in den Body schreibe, dann klappt es:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}
\usepackage{ifthen}

\begin{document}
\ifthenelse{\pageref{LastPage}>1}%
  {\cfoot{Seite \thepage\ von \pageref{LastPage}}}%
  {\cfoot{}}
%\lipsum[1]  % keine Seitennummerierung
\lipsum   % Seitennummerierung
\label{LastPage}
\end{document}

Kann mir jemand bitte erklären, woran dies liegt und ob es andere Probleme/Seiteneffekte geben kann, wenn man \cfoot u.ä. Befehle in den Body statt in die Präambel schreibt?

Gibt es andere (einfache) Alternativen für eine optionale Seitennummerierung?

gefragt 18 Jun '15, 17:10

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

bearbeitet 18 Jun '15, 17:42

saputello's gravatar image

saputello
11.1k174365


\pageref arbeitet mit Labels. Labels werden zwischen den LaTeX-Läufen in der aux-Datei gespeichert. Die aux-Datei wird während \begin{document} geladen. Daher liefert \pageref erst nach \begin{document} tatsächlich ein Seiten-Label.

Allerdings ist nicht gesagt, dass \pageref tatsächlich eine Zahl liefert. Es könnte beispielsweise auch eine Box mit einer Zahl liefern. Es ist daher etwas riskant eine Zahle mit \pageref{LastPage} zu vergleichen. Mit Hilfe des Pakets refcount gibt es allerdings eine sichere Möglichkeit. Durch geringe Umformung der Logik, kann man außerdem die gesamte Logik in die Präambel verschieben, also eine saubere Trennung von Form und Inhalt durchführen:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage[ngerman]{babel}
\usepackage{refcount}
\usepackage{lipsum}
\usepackage{lastpage}
\cfoot{%
  \ifnum\getpagerefnumber{LastPage}>1
    Seite \thepage\ von \pageref{LastPage}%
  \fi
}
\begin{document}
\lipsum[1]  % keine Seitennummerierung
%\lipsum   % Seitennummerierung
\end{document}

Um noch die Nebenfrage zu beantworten: Es ist durchaus erlaubt \cfoot innerhalb des Dokuments zu verwenden.

Permanenter link

beantwortet 18 Jun '15, 17:31

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 18 Jun '15, 17:34

Vielen Dank, @saputello, für die Erklärung und den Alternativvorschlag!

(20 Jun '15, 13:12) tom75
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×32
×25
×14
×5

gestellte Frage: 18 Jun '15, 17:10

Frage wurde gesehen: 10,450 Mal

zuletzt geändert: 20 Jun '15, 13:12