summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/fillpages/fillpages.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/fillpages/fillpages.sty')
-rw-r--r--Master/texmf-dist/tex/latex/fillpages/fillpages.sty211
1 files changed, 211 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fillpages/fillpages.sty b/Master/texmf-dist/tex/latex/fillpages/fillpages.sty
new file mode 100644
index 00000000000..47a70ec11c3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/fillpages/fillpages.sty
@@ -0,0 +1,211 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Made by Gabriel Ruprecht %
+% %
+% This work is published under the %
+% LaTeX project public license 1.3 %
+% %
+% Package version 1.1.0 %
+% 2025-01-21 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{fillpages}[version 1.1.0]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Number definitions %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% How many pages were inserted in the last run
+% (at begin document) and how many pages are already
+% inserted in this run (after begin document). The
+% default value is overwritten with the content from
+% the aux file (if there had ever be a run).
+\newcount\GFM@FiPa@numberOfInsertedPages\relax
+\GFM@FiPa@numberOfInsertedPages=0\relax
+
+% To distribute the fill pages on evenly on all
+% insertion points, they must be counted. Default
+% value must be 1 to avoid division by 0. It will
+% be overwritten by the aux file value.
+\newcount\GFM@FiPa@numberOfFillPagePositions\relax
+\GFM@FiPa@numberOfFillPagePositions=1\relax
+
+% Number of pages, if there weren't any fill pages.
+\newcount\GFM@FiPa@pageCountWithoutFillPages\relax
+\GFM@FiPa@pageCountWithoutFillPages=0\relax
+
+% Self-explaining. Will be calculated. It is a
+% float number, therefore realized as a length.
+\newdimen\GFM@FiPa@pagesPerFillPosition\relax
+\GFM@FiPa@pagesPerFillPosition=0pt\relax
+
+% The currentLimit defines, how many new fill pages
+% are inserted. If there were over all 3 and current
+% limit is 5, 2 fill pages will be inserted at the
+% current insertion point.
+\newdimen\GFM@FiPa@currentLimit\relax
+\GFM@FiPa@currentLimit=0pt\relax
+
+% The number, by which the page number must be
+% divisible.
+\newcount\GFM@FiPa@Divisor\relax
+\GFM@FiPa@Divisor=4\relax
+
+% An offset, if the numbers must be i.e. divisible
+% by 4 and have 2 extra pages.
+\newcount\GFM@FiPa@DivisibleOffset\relax
+\GFM@FiPa@DivisibleOffset=0\relax
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Set the number by which the %%%
+%%% page count must be divisible %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NewDocumentCommand\pagesDivisibleBy{m O{0}}{%
+\GFM@FiPa@Divisor=#1\relax%
+\ifnum\GFM@FiPa@Divisor<1\relax%
+ \PackageError{fillpages.sty}{line 69: Illegal number}{You can't divide a page count by zero. Replaced with 1.}%
+ \GFM@FiPa@Divisor=1\relax%
+\fi%
+\ifnum\GFM@FiPa@Divisor>50\relax%
+ \PackageWarning{fillpages.sty}{Strange number. You want your pages divisible by a number greater than 50}%
+\fi%
+\GFM@FiPa@DivisibleOffset=#2\relax%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Defines fillpages %%%
+%%% %%%
+%%% i.e. \setFillPage{1}{custom Text} lets %%%
+%%% appear "custom Text" on fillpage no. 1 %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\setFillPage#1#2{%
+\expandafter\global\expandafter\def\csname GFM@FiPa@insertionFillPage#1\endcsname {%
+#2%
+}%\def\csname...
+}%\def\setFillPage
+
+\long\def\setDefaultFillPage#1{%
+\expandafter\global\expandafter\def\csname GFM@FiPa@defaultFillPage\endcsname {%
+#1%
+}%\def\csname...
+}%\def\setFillPage
+
+
+\setDefaultFillPage{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Do the calculations, after %%%
+%%% the aux file had been read. %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\AtBeginDocument{
+% From aux-file:
+% GFM@FiPa@numberOfFillPagePositions
+% GFM@FiPa@numberOfInsertedPages
+
+% Calculate pagesCountWithoutFillPages
+\GFM@FiPa@pageCountWithoutFillPages=\PreviousTotalPages\relax
+\advance\GFM@FiPa@pageCountWithoutFillPages by -\GFM@FiPa@numberOfInsertedPages\relax
+% Reset to 0 for the next counting round.
+\GFM@FiPa@numberOfInsertedPages=0\relax
+
+\GFM@FiPa@pagesPerFillPosition=\the\GFM@FiPa@pageCountWithoutFillPages pt\relax
+\advance\GFM@FiPa@pagesPerFillPosition by -\GFM@FiPa@DivisibleOffset pt\relax
+
+\ifdim\GFM@FiPa@pagesPerFillPosition>0 pt%
+\loop%
+\advance\GFM@FiPa@pagesPerFillPosition by -\GFM@FiPa@Divisor pt\relax%
+\ifdim\GFM@FiPa@pagesPerFillPosition>0 pt\repeat%
+%loop%
+\fi
+
+\multiply\GFM@FiPa@pagesPerFillPosition by -1\relax%
+
+\divide\GFM@FiPa@pagesPerFillPosition by \GFM@FiPa@numberOfFillPagePositions\relax%
+
+\GFM@FiPa@numberOfFillPagePositions=0\relax
+}%AtBeginDocument
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This defines an insertion point %%%
+%%% where the fill pages will appear. %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\insertFillPages{%
+% i++ for GFM@FiPa@numberOfFillPagePositions%
+\advance\GFM@FiPa@numberOfFillPagePositions by 1\relax%
+%
+% calculate the GFM@FiPa@currentLimit for insertion%
+\GFM@FiPa@currentLimit=\GFM@FiPa@pagesPerFillPosition\relax%
+\multiply\GFM@FiPa@currentLimit by \GFM@FiPa@numberOfFillPagePositions\relax%
+\advance\GFM@FiPa@currentLimit by -0.98pt\relax%
+%
+% insert pages%
+\ifdim\GFM@FiPa@numberOfInsertedPages pt<\GFM@FiPa@currentLimit%
+ \loop%
+ \advance\GFM@FiPa@numberOfInsertedPages by 1\relax%
+ \clearpage%
+ % choose the content of a predefined page. If it doesn't exist, csname expands to nothing.
+ %%%%%%%%%%%%%%
+ \expandafter\ifx%
+ \csname %
+ GFM@FiPa@insertionFillPage\the\GFM@FiPa@numberOfInsertedPages%
+ \endcsname%
+ \relax% -> if x=relax
+ \GFM@FiPa@defaultFillPage%
+ \else%ifx
+ %%%%%%%%%%%%%%
+ \csname %
+ GFM@FiPa@insertionFillPage\the\GFM@FiPa@numberOfInsertedPages
+ \endcsname%
+ \fi%ifx
+ \mbox{}%
+ \clearpage%
+ \ifnum\GFM@FiPa@numberOfInsertedPages>1000\relax%
+ \PackageError{fillpages.sty}{line 156: More than 1000 fill pages produced.}{You tried to insert more than 1000 fill pages. This must be an infinite loop.}%
+ %\errmessage{Infinite loop detected}
+ \stop
+ \fi%
+ \ifdim\GFM@FiPa@numberOfInsertedPages pt<\GFM@FiPa@currentLimit\repeat%
+ %end loop%
+\fi%ifdim
+}%insertFillPages
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Do a calculation and write %%%
+%%% numbers to the aux file. %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\AtEndDocument{
+% Write to aux
+\ifnum\GFM@FiPa@numberOfFillPagePositions > 0\relax
+ \write\@auxout{%
+ \noexpand\global%
+ \noexpand\GFM@FiPa@numberOfFillPagePositions=%
+ \the\GFM@FiPa@numberOfFillPagePositions%
+ \noexpand\relax}
+\fi
+
+\write\@auxout{%
+ \noexpand\global%
+ \noexpand\GFM@FiPa@numberOfInsertedPages=%
+ \the\GFM@FiPa@numberOfInsertedPages%
+ \noexpand\relax}
+
+% Write to log:
+\wlog{Number of fill page positions: \the\GFM@FiPa@pagesPerFillPosition\relax}%
+\wlog{Number of inserted fill pages: \the\GFM@FiPa@numberOfInsertedPages\relax}%
+
+}%AtEndDocument
+