Abwechselnde Seitenanzahl, wenn Seitenzahlen ein Vielfaches von vier sein sollen

Abwechselnde Seitenanzahl, wenn Seitenzahlen ein Vielfaches von vier sein sollen

Ich möchte sicherstellen, dass meine Seitenanzahl ein Vielfaches von vier ist. Wenn es kein Vielfaches von vier ist, möchte ich hinzufügen, \newpage\begin{center}\textbf{BLANK PAGE}\end{center}bis ich erreiche, dass die Seitenanzahl ein Vielfaches von vier ist. Ich versuche primitiv, die expl3-Lösung zu verwenden, die in dokumentiert istdiese Antwortmit folgendem MWE:

\documentclass{article}
\usepackage{refcount, lastpage}
\newcommand{\blankpage}{\newpage\begin{center}\textbf{BLANK PAGE}\end{center}}
\ExplSyntaxOn
\NewDocumentCommand{\ensurefour} { }
 {
  \prg_replicate:nn
   { \int_mod:nn { 4 - \int_mod:nn { \getpagerefnumber{LastPage} } { 4 } } { 4 } }
   { \blankpage }
 }
\ExplSyntaxOff
\begin{document}
Test\newpage

\ensurefour
\end{document}

Wenn ich es zum ersten Mal mit einer beliebigen Engine kompiliere, wird eine Ausgabe von einer Seite erzeugt, d. h. eine einzelne Seite mit dem Text „Test“. Wenn ich es ein zweites Mal kompiliere, wird eine Ausgabe von vier Seiten erzeugt, was der gewünschten Ausgabe entspricht.

Aber wenn ich zum dritten Mal mit der Kompilierung fortfahre, ohne die .aux-Datei zu entfernen, wird die Seitenzahl auf 1 zurückgesetzt.

Dies liegt daran, dass LaTeX bei der ersten Kompilierung Folgendes in die .aux-Datei schreibt:

\relax 
\newlabel{LastPage}{{}{1}}
\xdef\lastpage@lastpage{1}
\gdef\lastpage@lastpageHy{}
\gdef \@abspage@last{1}

Daher \getpagerefnumber{LastPage}sieht es bei der zweiten Kompilierung „1“ und \ensurefourfügt 3 Seiten hinzu, sodass insgesamt 4 Seiten entstehen. Dann sieht es jedoch, dass vier Seiten erstellt wurden, und schreibt in die AUX-Datei:

\relax 
\newlabel{LastPage}{{}{4}}
\xdef\lastpage@lastpage{4}
\gdef\lastpage@lastpageHy{}
\gdef \@abspage@last{4}

Dies führt dazu, dass die dritte Kompilierung davon ausgeht, dass bereits vier Seiten vorhanden sind. Daher werden keine weiteren Seiten hinzugefügt, und es bleibt nur eine Seite übrig … und so weiter.

Frage: Gibt es eine Möglichkeit, die Seitenzahlen auf 4 zusammenzuführen, ohne zwischen 1 und 4 zu wechseln?

Antwort1

Leider hat das Paket lastpagedie Art und Weise geändert, wie es das Label verwaltet, und verwendet jetzt den Hook afterlastpage.

Sie können \clearpageden aktuellen Wert von ausgeben und verwenden page.

\documentclass{article}

\newcommand{\blankpage}{\begin{center}\textbf{BLANK PAGE}\end{center}\clearpage}

\ExplSyntaxOn
\NewDocumentCommand{\ensurefour} { }
 {
  \clearpage
  \prg_replicate:nn
   { \int_mod:nn { 4 - \int_mod:nn { \value{page}-1 } { 4 } } { 4 } }
   { \blankpage }
 }
\ExplSyntaxOff
\AtEndDocument{\ensurefour}

\begin{document}

Test
%\newpage
test
%\newpage
test
%\newpage
test

\end{document}

Durch Aufheben der Kommentierung der \newpageBefehle wird das richtige Ergebnis angezeigt.

Antwort2

Sie müssen nicht bis zur letzten Seite beschriften. Das \ensureforMakro kann \vfill\breakzuerst ausgeführt werden (oder \vfill\superejectwenn Sie Floats im Dokument haben). Dann ist die letzte echte Seite fertig und Sie können sicher sein, dass sie \pagenogleich n+1 ist, wobei n die Anzahl der echten Seiten ist. Sie können gewünschte Bankseiten über das \pagenoRegister hinzufügen.

Ein weiterer Vorteil dieser Lösung besteht darin, dass Sie nicht bis zum zweiten TeX-Durchlauf warten müssen, um die richtige Seitenzahl zu erhalten.

Ich kann Ihnen zeigen, wie das in OpTeX geht. Eine LaTeX-Lösung kann analog sein.

\newcount\restpages
\def\ensurefour{\vfill\break
   \restpages = \expr[0]{ 4 - (\the\pageno-1)\%4 }\relax
   \ifnum\restpages=4 \restpages=0 \fi
   \fornum 1..\restpages \do{\null\vfill\break}
}

Test:
\lipsum[1-10]

\ensurefour

\bye

Antwort3

Eine schnelle und einfache Lösung wäre die Bezeichnung LastPage (oder ein gleichwertiges Produkt).Vor \ensurefourerzeugt zusätzliche Seiten. Beispiel:

\documentclass{article}
\usepackage{refcount}
\newcommand{\blankpage}{\newpage\begin{center}\textbf{BLANK PAGE}\end{center}}
\ExplSyntaxOn
\NewDocumentCommand{\ensurefour} { }
        {
                \label{LastPageBeforeEnsureFour}
                \prg_replicate:nn
                { \int_mod:nn { 4 - \int_mod:nn { \getpagerefnumber{LastPageBeforeEnsureFour} } { 4 } } { 4 } }
                { \blankpage }
        }
\ExplSyntaxOff
\begin{document}
Test

\ensurefour
\end{document}

Antwort4

Ich erstelle Druckdokumente mit einer Seitenzahl, die ein Vielfaches von vier ist, und bei denen ich auf den letzten oder vorletzten Seiten einen bestimmten Inhalt platzieren möchte. Hier sind die Befehle, die ich zu diesem Zweck geschrieben habe.

Ich erhalte die Anzahl der aktuellen physischen Seiten \ReadonlyShipoutCounter(Anzahl der bereits erstellten vollständigen Seiten, füge eine hinzu, um die aktuelle zu berücksichtigen).

\newcommand{\theabsolutepage}{\inteval{\ReadonlyShipoutCounter+1}}

Ich definiere einen Befehl \blankpage, mit dem der Seitenstil festgelegt werden kann ( \blankpage[plain]wenn Sie den plainSeitenstil für die leeren Seiten wünschen).

\NewDocumentCommand{\blankpage}{ O{empty} }
% #1: page style for the blank page
{
  \clearpage{}\thispagestyle{#1}\null\clearpage{}
}

und ein Befehl \clearpagestoendzum Abrufen der gewünschten Anzahl leerer Seiten

\NewDocumentCommand{\clearpagestoend}{ O{0} O{empty} }
% #1: number of reserved pages at end
% #2: page style for blank pages
{
  \clearpage{\pagestyle{#2}}
  \count255=\theabsolutepage \advance \count255 by #1 \advance \count255 by -1
  \count254=\count255 
  \divide \count254 by 4 \multiply \count254 by 4
  \advance \count255 by -\count254
  \ifcase\count255  % pages nb % 4 == 0: do nothing
    \relax
  \or               % pages nb % 4 == 1: skip 3 pages
    \blankpage[#2]  \blankpage[#2] \blankpage[#2]
  \or               % pages nb % 4 == 2: skip 2 pages
    \blankpage[#2]  \blankpage[#2]
  \or               % pages nb % 4 == 3: skip 1 page
    \blankpage{\pagestyle{#2}}
  \fi
}

Zum Beispiel

\clearpagestoend[2][plain]

Generieren Sie die Anzahl der leeren Seiten, um ein Vielfaches von vier minus 2 Seiten mit dem plainSeitenstil zu erhalten.

Vollständiges Beispiel:

\documentclass{article}

\usepackage{lipsum}

\newcommand{\theabsolutepage}{\inteval{\ReadonlyShipoutCounter+1}}

\NewDocumentCommand{\blankpage}{ O{empty} }
% #1: page style for the blank page
{
  \clearpage{}\thispagestyle{#1}\null\clearpage{}
}

\NewDocumentCommand{\clearpagestoend}{ O{0} O{empty} }
% #1: number of reserved pages at end
% #2: page style for blank pages
{
  \clearpage{\pagestyle{#2}}
  \count255=\theabsolutepage \advance \count255 by #1 \advance \count255 by -1
  \count254=\count255
  \divide \count254 by 4 \multiply \count254 by 4
  \advance \count255 by -\count254
  \ifcase\count255  % pages nb % 4 == 0: do nothing
    \relax
  \or               % pages nb % 4 == 1: skip 3 pages
    \blankpage[#2]  \blankpage[#2] \blankpage[#2]
  \or               % pages nb % 4 == 2: skip 2 pages
    \blankpage[#2]  \blankpage[#2]
  \or               % pages nb % 4 == 3: skip 1 page
    \blankpage{\pagestyle{#2}}
  \fi
}

\begin{document}

\lipsum

\clearpagestoend

\end{document}

verwandte Informationen