Wie verwende ich die Gesamtseitenzahl in einem bedingten Ausdruck?

Wie verwende ich die Gesamtseitenzahl in einem bedingten Ausdruck?

Ich möchte einen unterschiedlichen Fußzeilen- oder Seitenstil, je nachdem, ob das Dokument eine oder mehrere Seiten hat. Ich habe nicht viel Erfahrung mit TeX-Programmierung, daher die Antwortenzum Thema „Vergleichen eines Arguments mit einer Zeichenfolge, wenn das Argument das Ergebnis eines Befehls mit etoolbox ist“hat mir nicht viel geholfen und"Wann verwendet man \edef, \noexpand und \expandafter?"ist für mich zum ersten Mal etwas kompliziert.

Ich habe dies versucht, aber es hat nicht funktioniert:

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}
\begin{document}

\expandafter\ifstrequal{\pageref*{LastPage}}{1}{
  \pagestyle{empty}
  }{
  \pagestyle{plain}}

\lipsum[2-3]

\end{document}

Ich werde vielleicht weiter experimentieren.

Kann mir bitte jemand eine gute Möglichkeit zeigen, dies zu tun?

Antwort1

Stattdessen lastpagekönnen Sie das Paket verwenden totcount.

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{totcount}
\regtotcounter{page}

\begin{document}

\ifnumcomp{\totvalue{page}}{>}{1}{\pagestyle{plain}}{\pagestyle{empty}}

\lipsum[2]

\end{document}

Bildbeschreibung hier eingeben

Bis es funktioniert, sind zwei Kompilierungsdurchläufe erforderlich.

Antwort2

Ich habe das gleiche Problem bezüglich der Seitenzahlen in Dokumenten und habe mehrere Lösungen gefunden.

Indem ich etwas Code aus Ulrike Fishers Antwort aufdiese FrageIch konnte dieses Makro definieren:

\documentclass{article}
\usepackage{lipsum,ifthen}
\usepackage[lastpage]{zref}

\makeatletter
\zref@newprop*{numpage}{\the\value{page}}
\zref@addprop{main}{numpage}
\newcommand{\oneormorepages}%
    {\ifthenelse{\zref@extractdefault{LastPage}{numpage}{1}>1}%
        {\thispagestyle{plain}}%
        {\thispagestyle{empty}}%
    }
\makeatother

\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\oneormorepages
\lipsum[1-60] %More than one page
%\lipsum[1]   % One page
\end{document}

Hier ist das Ergebnis, das ich bis heute verwendet habe. Ich patche \maketitleim laufenden Betrieb mit \patchcmdfrom etoolbox, einem Paket, das ich für andere Zwecke im „echten“ Dokument lade:

\documentclass{article}
\usepackage{lipsum,etoolbox}

%% No page number  if the document ai a onepager
\makeatletter
\AtEndDocument{%
  \ifnum\value{page} > \@ne
    \immediate\write\@auxout{\global\let\string\@multipage\relax}%
  \fi
}
\newcommand*{\oneormorepages}{%
    \ifdefined\@multipage
        \thispagestyle{plain}%
    \else
        \thispagestyle{empty}%
    \fi
 }
\patchcmd{\maketitle}
    {\thispagestyle{plain}}%
    {\oneormorepages}{}{}
%% Change `plain` to `title` if you are using a `memoir` class
\makeatother

\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\lipsum[1-60] % More than one page
%\lipsum[1]   % One page
\end{document}

Wie egreg im Kommentar unten (und in einem Kommentar zur ursprünglichen Antwort) betont, ist die Lösung nicht hundertprozentig narrensicher (sie funktioniert beispielsweise nicht unter scrartcl). Ich habe jetzt die von jfbu aufgezeigten Fehler behoben.

Heute konnte ich sogar zwei weitere Lösungen finden, die kein Patchen benötigenusw.:

Basierend auf der Diskussion indiese FrageUnddiese Antwortzu einer anderen Frage: Ich habe eine funktionierende Lösung zusammengebastelt, die keine zusätzlichen Pakete erfordert und unter KOMAscript und den Standardklassen funktioniert. Sie überlebt \pagenumbering{Roman}. Wie egreg angemerkt hat, ist sie immer noch nicht narrensicher, aber ich habe versucht, die Tests zu verschieben, indem ich die atendvi- und atveryend-Pakete aus dem oberdiek-Bundle geladen und Befehle aus diesen Paketen verwendet habe. Dann schlagen die Tests fehl. Für die folgenden MWEs müssen wir also vertrauen \AtEndDocument.

Hier sind die MWEs:

\documentclass{article}
\usepackage{lipsum}
\makeatletter % You may remove this line if you change\@ne to 1
\AtEndDocument{\ifnum\value{page]=\@ne\thispagestyle{empty}{}\fi} % survives `\pagenumbering{Roman}`
\makeatother % You may remove this line if you change\@ne to 1
\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\lipsum[1]
\lipsum[1-6] % Turn on/off this line...
\end{document}

Wenn Sie römische Nummerierungen benötigen, können Sie zref-totpagesden Test auch laden und wie folgt ändern:

\AtEndDocument{\ifnum\ztotpages=\@ne\thispagestyle{empty}{}\fi}

Bezogen aufdiese Antwortscrartcl, ich habe eine Lösung mit , scrpage2und gefunden zref-totpages, die auch überlebt \pagenumbering{Roman}. Sie können den falseund trueTeilen des Tests zusätzlichen Code hinzufügen:

\documentclass{scrartcl}
\usepackage{zref-totpages,lipsum,scrpage2}
\pagestyle{scrplain}
\clearscrheadfoot
% You may use \@ne instead of 1 if you enclose the line in a `\makeatletter\makeatother`
\cfoot[\ifnum\ztotpages=1 \else\pagemark\fi]{\pagemark}

\begin{document}

\lipsum[1] % automatically remove page number in a document with this line
%\lipsum[1-6] % automatically keep page numbers in a document with this line
\end{document}

Hoffentlich ist es nützlich.

verwandte Informationen