% \CheckSum{455}
% \iffalse^^A meta-comment
% ======================================================================
% pfarrei.dtx
% Copyright (c) 2013 Markus Kohm
%                    komascript at gmx info
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01.
%
% This work has the LPPL maintenance status `unmaintained'.
%
% This package is currently unmaintained.
%
% This work consists of the files `README' and `pfarrei.dtx'.
%
% If you're missing the installation batch file `pfarrei.ins', try
%    tex pfarrei.dtx
% to unpack all files. 
% The package documentation may be produced repeating
%    pdflatex pfarrei.dtx
% at least three times.
% ----------------------------------------------------------------------
% pfarrei.dtx
% Copyright (c) 2013 Markus Kohm
%                    komascript at gmx info
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3c.
% Die neuste Version dieser Lizenz ist
%   http://www.latex-project.org/lppl.txt
% und Version 1.3c ist Teil aller Verteilungen von LaTeX
% Version 2005/12/01.
%
% Dieses Wert hat den LPPL-Verwaltungszustand `unmaintained' (verwaltet).
%
% Autor dieses Werkes ist Markus Kohm.
%
% Das Werk besteht aus den Dateien `README' und `pfarrei.dtx'.
%
% Falls Sie die Installations-Batch-Datei `pfarrei.ins' vermissen,
% probieren Sie einfach einmal
%    tex pfarrei.dtx
% um alle Dateien auszupacken.
% Die Anleitung erhalten Sie durch dreimalige Ausführung von:
%    pdflatex pfarrei.dtx
% ======================================================================
% \fi^^A meta-comment
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \iffalse^^A meta-comment
%<*dtx|tex>
\begingroup
   \def\revisiondate$#1: #2-#3-#4 #5${%
    \gdef\pfarreirevisiondate{#2/#3/#4}%
  }\revisiondate$Date: 2023-11-22 20:54:26 +0200 (Mi, 22. Nov 2023) $
  \def\revision$#1: #2 #3${%
    \gdef\pfarreirevision{#2}%
  }\revision$Revision: 37 $
\endgroup
%<*dtx>
\def\LaTeXformat{LaTeX2e}
\ifx\fmtname\LaTeXformat
  \makeatletter
    \let\saved@@end\@@end
    \def\@@end{\csname fi\endcsname\saved@@end}
  \makeatother
  \ProvidesFile{pfarrei.dtx}
%</dtx>
%<package>\ProvidesPackage{pfarrei}
%<a5toa4>\ProvidesFile{a5toa4.tex}
  [\pfarreirevisiondate\space r\pfarreirevision\space LaTeX2e package
                                                  (for pastors)]
%</dtx|tex>
%<*driver>
\documentclass{ltxdoc}
\usepackage[english,ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{hypdoc}

\newcommand*{\StartBlock}[1][2]{%
  \bigskip\nobreak\vskip#1\baselineskip\pagebreak[1]\vskip-#1\baselineskip
  \nobreak\noindent
}

\CodelineIndex
\RecordChanges
\GetFileInfo{pfarrei.dtx}
\begin{document}
\title{Das Pfarrei-Paket\footnote{%
    \protect\foreignlanguage{english}{Sorry if you don't understand German,
      but currently there's only a German manual, because the idea of this is
      from a German article at ``Die \TeX nische Komödie''. But at least you
      may try to call ``\texttt{a5toa4 --help}'' to get some useful
      information.%
    }%
  }%
} 
\date{\filedate\footnote{Version \fileversion}}
\author{Markus Kohm\footnote{komascript at gmx info}}
\maketitle
\DocInput{pfarrei.dtx}
\PrintChanges
\PrintIndex
\end{document}
%</driver>
%<*dtx>
\fi
%</dtx>
%<*insfile>
\def\batchfile{pfarrei.dtx}
\input docstrip.tex
\ifToplevel{%
  \keepsilent
  \askforoverwritefalse
}

\let\MetaPrefix\relax
\declarepreamble\rawpreamble

Copyright (c) 2013 Markus Kohm
                   komascript at gmx info

This file was generated from file(s) of the work `pfarrei'.
------------------------------------------------------------------

It may be distributed under the conditions of the 
LaTeX Project Public License in the version distributed together
with the work `pfarrei'.  You may however distribute the work
`pfarrei' without all such generated files.  See also 
<http://www.latex-project.org/lppl.txt> for additional 
information.

This work has the LPPL maintenance status `unmaintained'.


This package is currently unmaintained.

The list of files belonging to the work `pfarrei' is given in 
the file `pfarrei.dtx'.

\endpreamble

\let\MetaPrefix\DoubleperCent
\edef\texpreamble{\rawpreamble}

\generate{%
  \usepreamble\texpreamble
  \file{pfarrei.sty}{%
    \from{pfarrei.dtx}{package,tex}%
  }%
  \file{a5toa4.tex}{%
    \from{pfarrei.dtx}{a5toa4,tex}%
  }%
}

\ifToplevel{%
  \generate{%
    \usepreamble\texpreamble
    \file{pfarrei.ins}{%
      \from{pfarrei.dtx}{insfile,tex}%
    }%
  }%
}

\def\MetaPrefix{--}
{
  {
    \catcode`\#=11
    \gdef\Hash{#}%
  }
  \xdef\luapreamble{\Hash!/usr/bin/env texlua^^J%
    ^^J%
    \rawpreamble}
}

\declarepostamble\luapostamble

\endpostamble

\generate{%
  \usepreamble\luapreamble\usepostamble\luapostamble
  \file{a5toa4.tlu}{%
    \from{pfarrei.dtx}{a5toa4,lua}%
  }%
  \file{pfarrei.tlu}{%
    \from{pfarrei.dtx}{pfarrei,lua}%
  }%
}

\ifToplevel{%
  \Msg{+-------------------------------------------------------------------}
  \Msg{| To finish the installation copy the files into a TEXMF tree:}
  \Msg{| \space\space a5toa4.tlu  --> scripts/pfarrei/a5toa5.tlu}
  \Msg{| \space\space pfarrei.tlu --> scripts/pfarrei/pfarrei.tlu}
  \Msg{| \space\space a5toa4.tex  --> tex/latex/pfarrei/a5toa4.tex}
  \Msg{| \space\space pfarrei.sty --> tex/latex/pfarrei/pfarrei.sty}
  \Msg{| If you are not using Windows, you should also copy a5toa4.tlu}
  \Msg{| to the binary directory of your TeX distribution and rename}
  \Msg{| it into a5toa4.}
  \Msg{| If you are using MiKTeX 2.9, you should rename file pfarrei.tlu}
  \Msg{| into a5toa4.tlu, because the outdated texlua of MiKTeX 2.9 doesn't}
  \Msg{| search for modules like the current vanilla version of texlua.}
  \Msg{| If you are using Windows, you should make a copy of runscript.exe}
  \Msg{| (TeX Live) resp. runtexlua.exe (MiKTeX) at the binary directory}
  \Msg{| of your TeX distribution and rename it into a5toa4.exe.}
  \Msg{+-------------------------------------------------------------------}
}
%</insfile>
%<*dtx|doc>
\csname endinput\endcsname
% \fi^^A meta-comment
%
% \begin{abstract}
%   In "`Die \TeX nische Kömdie"', Ausgabe 1/2013 hat Christian Justen über
%   seinen Einsatz von \LaTeX{} im Pfarrdienst berichtet. Einige der von ihm
%   verwendeten bash-Scripte und seine Schilderungen dazu haben mich
%   inspiriert, eine Sammlung zu beginnen, die entsprechende Dinge leisten.
%   Allerdings habe ich mich entschlossen, keine bash-Script zu verwenden,
%   sondern die Funktionalität derselben in lua-Scripte für die Ausführung mit
%   \TeX Lua zu realisieren, da \TeX Lua inzwischen Bestandteil aller
%   \TeX-Distributionen ist. Somit wurde das ganze besser vom Betriebssystem
%   unabhängig.
%
%   Ergänzt habe ich das ganze durch einige Befehle und Umgebungen, die für
%   die Erstellung von Lied- und Gebetsheftchen für den Gottesdienst
%   praktisch sein könnten. Jedenfalls habe ich selbst Nutzen daraus
%   gezogen. Weiteres ist geplant.
% \end{abstract}
%
% \tableofcontents
%
% \section{Die Skripte-Seite}
% \label{sec:skripte}
%
% In besagtem Artikel wurden zwei Skripte, "`\texttt{a5toa}4"' und
% "`\texttt{a5toa4bogen}"' vorgestellt. Beide erzeugen aus PDF-Dateien, die im
% A5-Format vorliegen, neue PDF-Dateien im A4-quer-Format.
%
% Das erste, "`a5toa4", arrangiert die A5-Seiten dabei so, dass jeweils zwei
% aufeinander folgende A5-Seiten nebeneinandern ausgegeben werden. Das ist vor
% allem dann praktisch, wenn man nur einseitig druckt und die Seiten später
% geteilt werden sollen. Im folgenden wird diese Ausgabe \emph{side-by-side}
% genannt.
%
% Das zweite, "`a5toa4bogen"', erzeugt hingegen ein sogenanntes Booklet. Dabei
% werden die Seiten so angeordnet, dass nach dem beidseitigen Druck, der ganze
% Stapel nur noch in der Mitte geknickt werden muss, um eine Art Heft zu
% erhalten. Daher wird für diese Ausgabe im Weiteren die Bezeichnung
% \emph{booklet} verwendet.
%
% \StartBlock%^^A
% Ich\marginpar{\raggedleft\texttt{a5toa4.tlu}} dachte mir, das könne man in
% ein einziges Programm gießen. Dieses heißt bei mir dann schlicht
% "`a5toa4.tlu"'. Bei optimaler Installation kann es auch als "`a5toa4"'
% angesprochen werden.
%
% Ruft\marginpar{\raggedleft\texttt{-{}-version}} man das Programm mit der
% Option "`\texttt{-V}"' oder "`\texttt{-{}-version}"' auf, so gibt es lediglich
% eine Versionsinformation aus.
%
% Beim\marginpar{\raggedleft\texttt{-{}-help}} Aufruf mit Option
% "`\texttt{-h}"' oder "`\texttt{-{}-help}"' wird hingegen eine ausführliche
% Hilfe zu den Aufrufmöglichkeiten und den Optionen ausgegeben.
%
% Man\marginpar{\raggedleft\texttt{-{}-booklet}\\\texttt{-{}-sidebyside}} kann
% es aber auch mit einer Reihe von Durchführungsoptionen und Namen von
% PDF-Dateien aufrufen. In diesem Fall wird entweder eine booklet- oder eine
% side-by-side-Ausgabe erzeugt.  Die Wahl, ob eine booklet- oder eine
% side-by-side-Ausgabe erfolgen soll, erfolgt über die Optionen
% "`\texttt{-b}"' oder "`\texttt{-{}-booklet}"' für booklet
% bzw. "`\texttt{-s}"' oder "`\texttt{-{}-sidebyside}"' für
% side-by-side. Voreingstellt ist die side-by-side-Ausgabe.
%
% Für die Durchführung wurde auch ein Verbesserungsvorschlag von Christian
% Justen selbst aufgegriffen. Bei ihm haben die Skripte mit einer
% Zwischendateien mit dem festen Namen "`\texttt{cj.tmp}"' gearbeitet. Im
% Extramfall konnte dies dazu führen, dass Dateien unerwünscht überschrieben
% und so vernichtet wurden.
%
% In meiner Fassung als texlua-Skript wird mit einem temporären Verzeichnis im
% aktuellen Arbeitsverzeichnis gearbeitet. Darin wird eine temporäre
% \LaTeX-Datei erzeugt und alle Ausgabedateien eines PDF\LaTeX-Laufs
% abgelegt. Das PDF-Ergebnis des PDF\LaTeX-Laufs wird dann wieder in das noch
% immer aktuelle Arbeitsverzeichnis kopiert. Im Normalfall wird dabei der
% Basisname (also ohne Extension) der Ursprungsdatei je nachdem, was erzeugt
% wurde, entweder um "`\texttt{-booklet.pdf}"' oder
% "`\texttt{-sidebyside.pdf}"' ergänzt. Auch dies ist eine Abweichung von
% Christian Justens Original-Skripten, bei denen immer die Ursprungsdatei vom
% Ergebnis überschrieben wurde.
%
% Ein\marginpar{\raggedleft\texttt{-{}-overwrite}} Überschreiben der
% Ursprungsdatei wie bei Christian Justens Original-Skripten kann man aber
% alternativ ebenfalls erreichen, indem man Option "`\texttt{-o}"' oder
% "`\texttt{-{}-overwrite}"' angibt. Nach erfolgreichem PDF\LaTeX-Lauf und dem
% Kopieren des Ergebnisses ins aktuelle Arbeitsverzeichnis, wird das temporäre
% Verzeichnis samt Inhalt wieder gelöscht.
%
% Eine weitere Änderung bei mir betrifft die Tatsache, dass man für die
% Verarbeitung mehrerer Dateien nicht mehrere Aufrufe benötigt, man kann auch
% in einem Aufruf beliebig oft Optionen und Dateien hintereinander anfügen,
% die dann nacheinander verarbeitet werden. So würde beispielsweise mit dem
% Aufruf:
% \begin{verbatim}
%       a5toa4 -b foo.pdf -s bar.pdf -o bum.pdf
% \end{verbatim}\unskip\ignorespaces
% sowohl "`\texttt{foo-booklet.pdf}"' als auch "`\texttt{bar-sidebyside.pdf}"'
% erzeugt und anschließend "`\texttt{bum.pdf}"' durch eine
% side-by-side-Fassung von sich selbst überschrieben werden.
% 
% Es ist zu beachten, dass nach jeder erzeugten Datei die
% Überschreibeinstellung von Option "`\texttt{-o}"' oder
% "`\texttt{--overwrite}"' aus Sicherheitsgründen wieder aufgehoben wird. Will
% man also mehrere Dateien nacheinander bearbeiten und bei mehreren davon soll
% die Ursprungsdatei überschrieben werden, so ist vor jeder dieser Dateien die
% Option erneut zu setzen.
%
% Tatsächlich\marginpar{\raggedleft\texttt{pfarrei.tlu}} ist
% "`\texttt{a5toa4.tlu}"' aber nur ein Wrapper für
% "`\texttt{pfarrei.tlu}"'. Das wurde deshalb so gemacht, damit das
% eigentliche Programm leichter durch Versionen in \texttt{TEXMFLOCAL} oder
% \texttt{TEXMFHOME} ersetzt werden kann, ohne dass jedes Mal das
% \emph{Binary} ersetzt werden muss.
%
% Eine letzte kleine Änderung meiner Fassung betrifft die Anforderungen an das
% Seitenformat der Quelldateien. Im Original wurde mit der \texttt{pdfpages}
% Option \texttt{noautoscale} gearbeitet. Damit wurden die Seiten der
% Quelldatei nicht an das Seitenformat der Zieldatei angepasst. War die
% Quelldatei also nicht im Format A5, sondern beispielsweise A6, dann wurden
% zwei A6-Seiten auf einer A4-quer-Seite platziert. War die Quelldatei im Format
% A4, passten ihre Seiten nicht einmal auf die A4-quer-Seite. Ich habe diese
% Option daher weggelassen. Nun werden die Seiten der Quelldatei automatisch
% ins A5-Format gebracht, bevor sie auf der A4-quer-Seite platziert werden.
%
%
% \subsection*{Zusammenfassung\marginpar{\raggedleft\texttt{a5toa4}}}
%
% Um\marginpar{\raggedleft\texttt{-s}} aus einem Quell-PDF
% "`\texttt{foo.pdf}"' ein Ziel-PDF "`\texttt{foo-sidebyside.pdf}"' zu
% erzeugen, bei dem die Seiten des Quell-PDF aufeinander folgend,
% nebeneinander auf einer A4-quer-Seite platziert sind, verwendet man:
% \begin{verbatim}
%       a5toa4 -s foo.pdf
% \end{verbatim}\unskip\ignorespaces
% Soll die Ziel-PDF hingegen die Quell-PDF überschreiben, so gibt vor dem
% Dateinamen zusätzlich Option "`\texttt{-o}"' an.
%
% Um\marginpar{\raggedleft\texttt{-b}} aus einem Quell-PDF
% "`\texttt{foo.pdf}"' ein Ziel-PDF "`\texttt{foo-booklet.pdf}"' zu erzeugen,
% bei dem die Seiten des Quell-PDF so auf einer A4-quer-Seite platziert sind,
% dass durch Falten in der Mitte ein Heft entsteht, verwendet man:
% \begin{verbatim}
%       a5toa4 -b foo.pdf
% \end{verbatim}\unskip\ignorespaces
%
% Soll\marginpar{\raggedleft\texttt{-o}} die Ziel-PDF hingegen die Quell-PDF
% überschreiben, so gibt vor dem Dateinamen zusätzlich Option "`\texttt{-o}"'
% an.
%
% Informationen\marginpar{\raggedleft\texttt{-V}} über die verwendete Version
% von "`\texttt{a5toa4}"' erhält man mit:
% \begin{verbatim}
%       a5toa4 -V
% \end{verbatim}\unskip
%
% Eine\marginpar{\raggedleft\texttt{-h}} Hilfe zum Programm erhält man mit:
% \begin{verbatim}
%       a5toa4 -h
% \end{verbatim}
%
%
% \section{Die \LaTeX-Seite}
% \label{sec:latex}
%
% Die \LaTeX-Seite zu den Skripten aus \autoref{sec:skripte} besteht
% zunächst einmal aus dem \LaTeX-Dokument "`\texttt{a5toa4.tex}"'. Dieses
% lädt wiederum das \LaTeX-Paket "`\texttt{pfarrei.sty}"'. Die eigentliche
% Funktionalität verbirgt sich darin. 
%
% \StartBlock%^^A
% \DescribeMacro{\AvToAiv}\hspace*{-\marginparsep}\oarg{Original-Datei}\\%^^A
% \DescribeMacro{\OriginalFile}%^^A
% Die Anweisung \cs{AvToAiv} erledigt die Hauptarbeit für \texttt{a5toa4}. Die
% Voreinstellung für das optionale Argument \meta{Original-Datei} ist
% \cs{OriginalFile}.  Das Skript "`\texttt{a5toa4.tlu}"' setzt dieses Makro
% entsprechend.
%
% \StartBlock[1]%^^A
% Man kann das \LaTeX-Paket \textsf{pfarrei} aber auch per
% \begin{verbatim}
% \usepackage{pfarrei}
% \end{verbatim}\unskip
% oder
% \begin{verbatim}
% \usepackage[booklet]{pfarrei}
% \end{verbatim}\unskip
% direkt in seinem Dokument laden. Dann stellt es Umgebungen und Befehle für
% die Erstellung von Textblättern oder Textheften für Pfarrer, Lektoren und
% andere Mitwirkende an einem Gottesdienst oder auch für die Gemeinde
% bereit.
%
% \StartBlock%^^A
% \DescribeMacro{\ifbooklet}
% \hspace*{-\marginparsep}\marg{Dann-Code}\marg{Sonst-Code}\\*
% Es kann Code davon abhängig ausgeführt werden, ob ein Booklet erzeugt wird
% oder nicht. Im Falle eines Booklets wird der \meta{Dann-Code} ausgeführt,
% anderenfalls der \meta{Sonst-Code}. Dies wird auch intern, beispielsweise
% innerhalb von \cs{AvToAiv} oder innerhalb der
% \texttt{booklet}\dots\texttt{page}-Umgebungen verwendet, um die
% entsprechende Entscheidung durchzuführen.
%
% \StartBlock%^^A
% \DescribeEnv{bookletfrontpage}%^^A
% \DescribeMacro{\bookletfrontpagestyle}%^^A
% Mit der Umgebung \texttt{bookletfontpage} kann eine Titelseite erstellt
% werden, die nur bei der Erzeugung eines Booklets ausgegeben wird. Die
% Umgebung sollte immer am Anfang des Dokuments stehen, anderenfalls
% produziert sie eine Fehlermeldung. Dies geschieht, weil die Titelseite nun
% einmal die erste Seite sein sollte. Sollte der Seitenstil \texttt{empty}
% einmal nicht für die Titelseite gewünscht werden, kann man
% \cs{bookletfrontpagestyle} auf den Namen des gewünschten Stils umdefinieren.
%
% \StartBlock[6]%^^A
% \DescribeMacro{\motto}\hspace*{-\marginparsep}\marg{Motto}\\*%^^A
% \DescribeMacro{\titlepicture}\hspace*{-\marginparsep}\marg{Bild}\\*%^^A
% \DescribeMacro{\title}\hspace*{-\marginparsep}\marg{Titel}\\*%^^A
% \DescribeMacro{\parish}\hspace*{-\marginparsep}\marg{Gemeinde}\\*%^^A
% \DescribeMacro{\date}\hspace*{-\marginparsep}\marg{Datum}\\*%^^A
% \DescribeMacro{\makebooklettitlepage}%^^A
% Ähnlich zu \cs{maketitle} bei den Standard-Klassen kann man für Booklets
% (aufbauend auf der oben erklärten Umgebung \texttt{bookletfrontpage} statt
% auf \texttt{titlepage}) mit Hilfe von \cs{makebooklettitlepage} eine
% Titelseite für ein Booklet erzeugen. Der Titel besteht aus einem Motto (oben
% auf der Seite), gefolgt von einem Titelbild, gefolgt von dem Titel, Angaben
% zur Gemeinde und zum Schluss das Datum. Es ist zu beachten, dass man
% \cs{makebooklettitlepage} \emph{nicht} selbst in eine Umgebung packen
% sollte, da diese Anweisung intern die Umgebung \texttt{bookletfrontpage}
% verwendet. Darüber hinaus ist zu beachten, dass als Titelbild nicht einfach
% ein Dateinamen angegeben wird, sondern die kompletten Anweisungen, um ein
% Bild einzuladen oder zu erstellen. Auch muss ggf. ein Grafikpaket selbst
% geladen werden.
%
% \StartBlock%^^A
% \DescribeEnv{bookletbackpage}%^^A
% \DescribeEnv{bookletemptypage}%^^A
% \DescribeMacro{\bookletbackpagestyle}%^^A
% \DescribeMacro{\bookletemptypagestyle}%^^A
% Für ein Booklet kann mit der Umgebung \texttt{bookletbackpage} außerdem eine
% Rückseite definiert werden. Die Definition kann an beliebiger Stelle
% erfolgen. Die Ausgabe findet auf einer durch vier teilbaren Seite am Ende
% des Dokuments statt. Dazu werden ggf. leere Seiten eingefügt. Den Inhalt der
% \emph{leeren Seiten} kann ebenfalls mit einer Umgebung, nämlich
% \texttt{bookletemptypage}, definiert werden. Wie bereits beim Seitenstil für
% die Vorderseite, kann auch der Seitenstil für die \emph{leeren Seiten} und
% die Rückseite umdefiniert werden.
%
% \StartBlock%^^A
% \DescribeEnv{samedoublepage}%^^A
% Wenn der Inhalt dieser Umgebung auf die aktuelle Seite passt, wird er
% ausgegeben. Passt er nicht auf die aktuelle Seite und die aktuelle Seite ist
% eine Seite mit einer ungeraden Seitenzahl, dann wird zunächst ein
% Seitenumbruch durchgeführt. Anschließend wird der Inhalt ausgegeben. Dadurch
% wird vermieden, dass beispielsweise ein Lektor oder Pfarrer unnötig
% innerhalb eines Textes umblättern muss. Es ist zu beachten, dass innerhalb
% dieser Umgebung Fußnoten, Marginalien und Gleitumgebungen nicht korrekt
% funktionieren.
%
% \StartBlock%^^A
% \DescribeMacro{\setupprayer}\hspace*{-\marginparsep}\marg{Optionen}\\*%^^A
% \DescribeEnv{prayer}%^^A
% \DescribeMacro{\noresponder}%^^A
% Die Umgebung \texttt{prayer} ist für Gebete gedacht. Die Umgebung hat ein
% optionales Argument. Dieses ist identisch mit \meta{Optionen} gilt dann aber
% nur lokal für diese Gebetsumgebung. Als \meta{Optionen} kann eine
% Komma-separierte Liste von \meta{Schlüssel}\texttt{=}\meta{Wert}-Optionen
% angegeben werden. Folgende Schlüssel werden verstanden:
% \begin{description}
% \item[\texttt{leader=}\meta{Vorbeter}:] Setzt die Voreinstellung für das
%   optionale Argument von \cs{item} auf \meta{Vorbeter}.
% \item[\texttt{responder=}\meta{Antwortende(r)}:] Setzt die Voreinstellung
%   für das optionale Argument des automatisch als Antwort eingefügten
%   \cs{item} auf \meta{Antwortende(r)}.
% \item[\texttt{response=}\meta{Antwort}:] Setzt die automatisch eingefügte
%   Antwort auf \meta{Antwort}.
% \end{description}
% Eine automatische Antwort wird nur eingefügt, wenn sowohl \texttt{responder}
% als auch \texttt{response} angegeben sind. Soll nur für einzelne \cs{item}
% keine automatische Antwort erstellt werden, so ist irgendwo innerhalb des
% entsprechenden \cs{item} (\emph{nicht} jedoch innerhalb des optionalen
% Arguments von \cs{item}) oder danach ein \cs{noresponder} einzufügen.
%
% \StopEventually{}
%
% \iffalse^^A meta-comment
%</dtx|doc>
% \fi^^A meta-comment
%
% \section{Implementierung der \LaTeX-Seite}
%
% \iffalse^^A meta-comment
%<*tex>
% \fi^^A meta-comment
%
% \subsection{Das \LaTeX-Dokument "`\texttt{a5toa4.tex}"'}
%
% \iffalse^^A meta-comment
%<*a5toa4>
% \fi^^A meta-comment
%
% Das ist wirklich geradezu trivial:
%    \begin{macrocode}
\documentclass[a4paper,landscape]{article}
\usepackage{pfarrei}
\begin{document}
\AvToAiv
\end{document}
%    \end{macrocode}
% Das war es schon. Trotzdem hat die Verwendung einer solchen zusätzlichen
% Datei den Vorteil, dass man bei Bedarf lokal auch ein ganz anderes
% "`\texttt{a5toa4.tex}"' speichern kann.
%
% \iffalse^^A meta-comment
%</a5toa4>
% \fi^^A meta-comment
%
% \subsection{Das \LaTeX-Paket "`\texttt{pfarrei}"'}
%
% \iffalse^^A meta-comment
%<*package>
% \fi^^A meta-comment
%
% \begin{macro}{\ifbooklet}
%   \changes{r28}{2013/04/01}{neue Anweisung}
% Wir haben eine Option, die bestimmt, ob wir ein Booklet erzeugen oder
% nicht. Später wird das schlicht über das Makro \cs{ifbooklet}
% festgestellt. Falls ein Booklet erzeugt werden soll wird das erste, sonst
% das zweite Argument ausgeführt.
%    \begin{macrocode}
\newcommand*{\ifbooklet}{}
\let\ifbooklet\@secondoftwo
\DeclareOption{booklet}{\let\ifbooklet\@firstoftwo}
\DeclareOption{nobooklet}{\let\ifbooklet\@secondoftwo}
%    \end{macrocode}
% \end{macro}
%
% Dann werden die Optionen ausgeführt:
%    \begin{macrocode}
\ProcessOptions*
%    \end{macrocode}
% Dann benötigen wir ein paar Pakete:
%    \begin{macrocode}
\RequirePackage{ifpdf}
\RequirePackage{pdfpages}
%    \end{macrocode}
%
%
% \begin{macro}{\AvToAiv}
% Der Name des Makros kommt von \texttt{a5toa4}. Es muss sichergestellt sein,
% dass dies im PDF-Modus verwendet wird.
%    \begin{macrocode}
\newcommand*{\AvToAiv}[1][\OriginalFile]{%
  \ifpdf\else
    \PackageError{pfarrei}{PDF mode needed}{%
      a5toa4 needs the direct PDF mode.\MessageBreak
      Usually this may be activated using either pdflatex, lualatex or
      xelatex.%
    }%
    \input{x.tex}
  \fi
  \ifbooklet{%
    \includepdf[pages=-,booklet]{#1}%
  }{%
    \includepdf[pages=-,nup=2x1]{#1}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \AvToAiv
%
% \begin{environment}{bookletpage}
%   \changes{r28}{2013/04/01}{neue virtuelle Umgebung}
% Da mehrfach eine Umgebung für einzelne Seiten benötigt wird, definieren wir
% dafür eine eigene Umgebung, die dann entsprechend individualisiert wird. Es
% ist zu beachten, dass diese Umgebung nicht als Umgebung aufgerufen werden
% sollte, sondern direkt \cs{bookletpage} und \cs{endbookletpage}.
%    \begin{macrocode}
\newenvironment*{bookletpage}{%
  \edef\reserved@a{bookletpage}%
  \ifx\@currenvir\reserved@a
    \PackageError{pfarrei}{`bookletpage' used as ordinary environment}{%
      Please note, that `bookletpage' is a virtual environment
      only.\MessageBreak
      You should not use it directly as an environment, but use
      `\string\bookletpage' at the\MessageBreak
      begin code and `\string\endbookletpage' at the end code of a wrapper
      environment.\MessageBreak
      If you'll continue, expect several additional errors%
    }%
    \let\bookletpagebox\@tempboxa
    \let\bookletpagestyle\@empty
  \else
    \expandafter\let\expandafter\bookletpagebox
    \csname \@currenvir box\endcsname
    \expandafter\let\expandafter\bookletpagestyle
    \csname \@currenvir style\endcsname
  \fi
  \edef\reserved@a{%
    \noexpand\begin{lrbox}{\bookletpagebox}
    \noexpand\begin{minipage}[t][\textheight][t]{\textwidth}%
      \begingroup
        \def\noexpand\@currenvir{\@currenvir}%
        \def\noexpand\@currenvline{\@currenvline}%
        \noexpand\parskip=\the\parskip
        \noexpand\parindent=\the\parindent
        \noexpand\parfillskip=\the\parfillskip
  }\reserved@a
}{%
%    \end{macrocode}
% Das Ende wird in zwei Portionen aufgeteilt:
%    \begin{macrocode}
  \endbookletpagebox
  \printbookletpagebox
}
%    \end{macrocode}
% \begin{macro}{\endbookletpagebox}
%   \changes{r28}{2013/04/01}{neue (eigentlich interne) Anweisung}
% das Beenden der Erzeugung der Box für die Seite
%    \begin{macrocode}
\def\endbookletpagebox{%
        \par
      \endgroup
    \end{minipage}%
  \end{lrbox}%
  \global\setbox\bookletpagebox\box\bookletpagebox
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\printbookletpagebox}
%   \changes{r28}{2013/04/01}{neue (eigentlich interne) Anweisung}
% und die Ausgabe der Box, falls ein Booklet erzeugt wird.
%    \begin{macrocode}
\newcommand*\printbookletpagebox[1][\@currenvir]{%
  \ifbooklet{%
    \@ifundefined{bookletpagestyle}{}{%
      \ifx\bookletpagestyle\@empty\else\thispagestyle{\bookletpagestyle}\fi%
    }%
    \clearpage\noindent\usebox\bookletpagebox\clearpage
  }{%
    \PackageInfo{pfarrei}{`#1' not printed}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \end{environment}
%
%
% \begin{environment}{bookletfrontpage}
%   \changes{r26}{2013/03/31}{neue Umgebung}
% Umgebung, um eine Booklet-Titelseite zu erzeugen.
% \begin{macro}{\bookletfrontpagebox}
%   \changes{r26}{2013/03/31}{neue Box}
% \begin{macro}{\bookletfrontpagestyle}
%   \changes{r26}{2013/03/31}{neues Makro}
% Es ist nur eine Seite erlaubt. Also packen wir das ganze in eine Box. Dafür
% brauchen wir eine solche:
%    \begin{macrocode}
\newsavebox\bookletfrontpagebox
\newcommand*{\bookletfrontpagestyle}{empty}
\newenvironment*{bookletfrontpage}{%
  \bookletpage
}{%
  \endbookletpagebox
  \clearpage
  \ifbooklet{%
    \ifnum\c@page>\@ne
      \PackageError{pfarrei}{Booklet front page not first page}{%
        The booklet font page should be the first page, but it seems, that it
        is\MessageBreak
        page no. \the\c@page. \space Maybe you should put it immediately after
        `\string\begin{document}.%
        Nevertheless, if you'll continue it will be printed here%
      }%
    \fi
    \printbookletpagebox
  }{%
    \PackageInfo{pfarrei}{Booklet front page ignored}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{environment}
%
% \begin{environment}{bookletbackpage}
%   \changes{r26}{2013/03/31}{neue Umgebung}%^^A
% \begin{macro}{\bookletbackpagebox}
%   \changes{r26}{2013/03/31}{neue Box}%^^A
% \begin{macro}{\bookletbackpagestyle}
%   \changes{r26}{2013/03/31}{neues Makro}
% Im Prinzip ist die Booklet-Rückseite fast wie bei der Titelseite,
% allerdings fügen wir hier so viele Leerseiten ein, dass wir wirklich auf
% einer durch 4 teilbaren Seite landen.
% \begin{environment}{bookletemptypage}
%   \changes{r26}{2013/03/31}{neue Box}%^^A
% \begin{macro}{\bookletemptypagebox}
%   \changes{r26}{2013/03/31}{neue Umgebung}%^^A
% \begin{macro}{\bookletemptypagestyle}
%   \changes{r26}{2013/03/31}{neues Makro}%^^A
% Die Umgebung für die konfigurierbare \emph{Leerseite}, besitzt keine eigene
% Ausgabe, sondern sammelt tatsächlich nur den Inhalt. Die Ausgabe erfolgt
% dann bei der Ausgabe der Booklet-Rückseite.
%    \begin{macrocode}
\newsavebox\bookletemptypagebox
\newcommand*{\bookletemptypagestyle}{empty}
\newenvironment*{bookletemptypage}{%
  \bookletpage
}{%
  \endbookletpagebox
}
\newsavebox\bookletbackpagebox
\newcommand*{\bookletbackpagestyle}{empty}
\newenvironment*{bookletbackpage}{%
  \bookletpage
}{%
  \endbookletpagebox
  \if@filesw\immediate\write\@mainaux{\string\printbookletbackpage}\fi
}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{environment}
% \begin{macro}{\printbookletbackpage}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@printbookletbackpage}
%   \changes{r26}{2013/03/31}{neue interne Anweisung}%^^A
% Die eigentliche Ausgabe der letzten Seite geschieht über einen Eintrag in
% der \texttt{aux}-Datei. Das ist zwar nicht ganz sauber (und
% \textsf{scrlfile} meckert deshalb ggf.), aber die Standard-Klasse
% \textsf{letter} macht das ähnlich für die Etiketten. Also hoffen wir
% einfach, dass es gut geht.
%    \begin{macrocode}
\newcommand*{\printbookletbackpage}{}
\newcommand*{\@printbookletbackpage}{%
  \ifbooklet{%
    \clearpage
    \let\bookletpagestyle\bookletemptypagestyle
    \ifvoid\bookletemptypagebox
      \let\bookletpagebox\strutbox
    \else
      \let\bookletpagebox\bookletemptypagebox
    \fi
    \@tempcnta=\c@page
    \divide\@tempcnta by 4
    \multiply\@tempcnta by 4
    \ifnum \@tempcnta=\c@page\else
      \advance\@tempcnta by 4
      \@whilenum \c@page<\@tempcnta\do{%
        \printbookletpagebox
      }%
    \fi
    \let\bookletpagestyle\bookletbackpagestyle
    \let\bookletpagebox\bookletbackpagebox
    \printbookletpagebox
  }{%
    \PackageInfo{pfarrei}{Booklet back page ignored}%
  }%
}
%    \end{macrocode}
% Das Drucken darf während des Lesens der \texttt{aux}-Datei in
% \cs{begin{document}} nicht erfolgen. Daher definieren wir es erst danach
% entsprechend um. Dadurch ist es während des Lesens der \texttt{aux}-Datei in
% \cs{end{document}} funktionsfähig.
%    \begin{macrocode}
\AtBeginDocument{\let\printbookletbackpage\@printbookletbackpage}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{environment}
%
%
% \begin{macro}{\makebooklettitlepage}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\motto}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@motto}
%   \changes{r26}{2013/03/31}{neues internes Makro}%^^A
% \begin{macro}{\titlepicture}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@titlepicture}
%   \changes{r26}{2013/03/31}{neues internes Makro}%^^A
% \begin{macro}{\title}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@title}
%   \changes{r26}{2013/03/31}{neues internes Makro}%^^A
% \begin{macro}{\parish}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@parish}
%   \changes{r26}{2013/03/31}{neues internes Makro}%^^A
% \begin{macro}{\date}
%   \changes{r26}{2013/03/31}{neue Anweisung}%^^A
% \begin{macro}{\@date}
%   \changes{r26}{2013/03/31}{neues internes Makro}%^^A
% Der Standard-Titel für Booklets besteht aus einem Motto, einem Bild, einem
% Titel, der Gemeinde und dem Datum. Wir gehen davon aus, dass die
% Klasse bereits \cs{date}, \cs{@date}, \cs{title} und \cs{@title} zur
% Verfügung stellt. Allerdings ergibt die Voreinstellung \cs{today} für das
% Datum hier wenig Sinn, weshalb die Voreinstellung in einen leeren Wert
% geändert wird. Den Rest machen wir komplett selbst:
%    \begin{macrocode}
\newcommand*{\motto}[1]{\gdef\@motto{#1}}
\newcommand*{\@motto}{}
\newcommand*{\titlepicture}[1]{\gdef\@titlepicture{#1}}
\newcommand*{\@titlepicture}{}
\providecommand*{\title}[1]{\gdef\@title{#1}}
\providecommand*{\@title}{}
\newcommand*{\parish}[1]{\gdef\@parish{#1}}
\newcommand*{\@parish}{}
\providecommand*{\date}[1]{\gdef\@date{#1}}
\def\@date{}
\newcommand*{\makebooklettitlepage}{%
  \begin{bookletfrontpage}
    \parskip.5\baselineskip
    \parindent\z@
    \parfillskip \z@ \@plus 1fil
    \centering
    \ifx\@motto\@empty\else{\Huge\@motto\par}\fi
    \vfill
    \ifx\@titlepicture\@empty\else\@titlepicture\par\fi
    \vfill
    \parskip\z@
    \Huge
    \@title\par
    \@parish\par
    \@date\par
    \ifx\@title\@empty\ifx\@parish\@empty\ifx\@date\@empty\null\fi\fi\fi
  \end{bookletfrontpage}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{environment}{samedoublepage}
%   \changes{r28}{2013/03/31}{neue Umgebung}%^^A
% \begin{macro}{\samedoublepage@save@hbox}
%   \changes{r28}{2013/03/31}{neues internes Makro}%^^A
% Es wird etwas umständlich eine vertikale Box gespeichert,
%    \begin{macrocode}
\let\samedoublepage@save@hbox\hbox
\newenvironment*{samedoublepage}{%
  \par
  \let\hbox\vbox
  \begin{lrbox}{\@tempboxa}%
    \let\hbox\samedoublepage@save@hbox
}{%
  \end{lrbox}%
  \let\hbox\samedoublepage@save@hbox
%    \end{macrocode}
% um diese dann in Stücke zu zerschneiden, die auf eine Seite passen,
%    \begin{macrocode}
  \@tempdima\ifdim\pagegoal=\maxdimen\textheight
            \else\dimexpr\pagegoal-\pagetotal\fi
  \ifdim \@tempdima 
        <\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
    \ifodd\c@page
%    \end{macrocode}
% Wobei aber nicht auf ungeraden Seiten mit nur einem Stück des Kuchens
% begonnen wird.
%    \begin{macrocode}
      \newpage
      \@tempdima\textheight
    \else \typeout{even page}%
    \fi
    \@whiledim \@tempdima
              <\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax\do{%
      \splitmaxdepth\dp\strutbox
      \splittopskip\topskip
      \setbox\z@\vsplit\@tempboxa to \@tempdima
      \usebox\z@
      \newpage
      \@tempdima\textheight
    }%
  \fi
%    \end{macrocode}
% Und am Ende nicht vergessen, den Rest der Box auch noch auszugeben.
%    \begin{macrocode}
  \ifvoid\@tempboxa\else\usebox\@tempboxa\fi
}
%    \end{macrocode}
% \end{macro}
% \end{environment}
%
% \begin{environment}{prayer}
%   \changes{r28}{2013/04/01}{neue Umgebung}
% \begin{macro}{\setupprayer}
%   \changes{r28}{2013/04/01}{neue Anweisung}
% Die Gebetsumgebung wird mit Hilfe von \textsf{keyval} definiert. Sie kann
% außer mit dem optionalen Argument auch jederzeit mit \cs{setupprayer}
% konfiguriert werden.
% \begin{macro}{\prayer@responder}
%   \changes{r28}{2013/04/01}{neues internes Makro}
% \begin{macro}{\prayer@response}
%   \changes{r28}{2013/04/01}{neues internes Makro}
% \begin{macro}{\prayer@leader}
%   \changes{r28}{2013/04/01}{neues internes Makro}
% Dafür werden mehrere interne Makros benötigt, um die gewünschten Werte
% aufzunehmen.
%    \begin{macrocode}
\RequirePackage{keyval}
\define@key{pfarrei.prayer}{response}{\def\prayer@response{#1}}
\define@key{pfarrei.prayer}{responder}{\def\prayer@responder{#1:}}
\define@key{pfarrei.prayer}{leader}{\def\prayer@leader{#1:}}
\newcommand*{\prayer@responder}{}
\newcommand*{\prayer@response}{}
\newcommand*{\prayer@leader}{}
\newcommand*{\setupprayer}{%
  \setkeys{pfarrei.prayer}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\ifprayer@firstitem}
%   \changes{r28}{2013/04/01}{neuer interner Schalter}
% \begin{macro}{prayer@response@item}
%   \changes{r28}{2013/04/01}{neue interne Anweisung}
% Da die Antwort beim ersten \cs{item} noch nicht ausgegeben werden darf,
% sondern nur nach den nachfolgenden, muss die Information, ob es das erste
% \cs{item} ist, über einen Schalter gespeichert werden.
%    \begin{macrocode}
\newif\ifprayer@firstitem
\newcommand*{\prayer@response@item}{%
  \ifprayer@firstitem\else
    \ifx\prayer@responder\@empty\else
      \ifx\prayer@response\@empty\else
        \prayer@save@item[\prayer@responder] \prayer@response
      \fi
    \fi
  \fi
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\prayer@item}
%   \changes{r28}{2013/04/01}{neue interne Anweisung}
% \begin{macro}{\prayer@save@item}
%   \changes{r28}{2013/04/01}{neue interne Anweisung}
% Die \cs{item}-Anweisung von \texttt{prayer} ist etwas anders als von anderen
% Listen-Umgebungen. Sie baut jedoch auf der Originaldefinition auf. Daher
% muss die Originaldefinition gespeichert und entsprechend erweitert verwendet
% werden.
%    \begin{macrocode}
\newcommand*{\prayer@item}[1][\prayer@leader]{%
  \prayer@response@item
  \prayer@firstitemfalse
  \prayer@save@item[{#1}]%
}
%    \end{macrocode}
% \begin{macro}{\noresponder}
%   \changes{r28}{2013/04/01}{neue Anweisung}
% Das Abschalten der nächsten automatischen Antwort geschieht einfach, indem
% so getan wird, als wäre das nächste \cs{item} wieder das erste.
%    \begin{macrocode}
\newenvironment*{prayer}[1][]{%
  \begin{description}
    \begingroup
      \def\@currenvir{prayer}%
      \setupprayer{#1}%
      \let\prayer@save@item\item
      \let\item\prayer@item
      \prayer@firstitemtrue
      \let\noresponder\prayer@firstitemtrue
}{%
      \prayer@response@item
    \endgroup
  \end{description}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{environment}
%
% 
% \iffalse^^A meta-comment
%</package>
% \fi^^A meta-comment
%
%
% \iffalse^^A meta-comment
%</tex>
% \fi^^A meta-comment
%
% \section{Implementierung der Skripten}
%
% \iffalse^^A meta-comment
%<*lua>
% \fi^^A meta-comment
%
% \subsection{Der kleine Wrapper "`\texttt{a5toa4.tlu}"'}
%
% \iffalse^^A meta-comment
%<*a5toa4>
% \fi^^A meta-comment
%    \begin{macrocode}
-- $Id: pfarrei.dtx 37 2023-11-22 18:54:26Z ps $

kpse.set_program_name(arg[-1], 'a5toa4')
require('pfarrei.pfarrei')
%    \end{macrocode}
% \iffalse^^A meta-comment
%</a5toa4>
% \fi^^A meta-comment
%
% \subsection{Das Haupt-Skript "`\texttt{pfarrei.tlu}"'}
%
% \iffalse^^A meta-comment
%<*pfarrei>
% \fi^^A meta-comment
%    \begin{macrocode}
local version_number = string.sub( '$Revision: 37 $', 12, -2 )
local action_version = ' r' .. version_number .. '\n' .. [[

Copyright (c) 2013 Markus Kohm.
License: lppl 1.3c or later. See <http://www.latex-project.org/lppl.txt>.
]]
local action_help = [[
action options:

  -h, --help            Print this help message.
  -V, --version         Print the version information.

processing options:
  -b, --booklet         Generate a booklet instead of only two pages side by
                        side onto one page.  The whole booklet will be one
                        signature.
  -s, --sidebyside      Generate only two pages side by side onto one page
                        instead of a booklet.
  -o, --overwrite       Write the output to the <PDF file> instead of appending
                        "-sidebyside.pdf" or "--booklet.pdf" to the basename 
                        of <PDF file>
]]
local action_opts = {
   ['-h']           = 'help',
   ['--help']       = 'help',
   ['-V']           = 'version',
   ['--version']    = 'version',
}
local processing_opts = {
   ['-b']           = 'booklet',
   ['--booklet']    = 'booklet',
   ['-s']           = 'sidebyside',
   ['--sidebyside'] = 'sidebyside',
   ['-o']           = 'overwrite',
   ['--overwrite']  = 'overwrite',
   ['-d']           = 'debug',
   ['--debug']      = 'debug',
}

-- detect action options and do action
local i = 1
local action
while arg[i] do
   action = action_opts[arg[i]]
   i = i+1
   if     action == 'help' then
      print( arg[0]..action_version );
      print( 'Usage: ' .. arg[0] .. ' <action option>' )
      print( '       ' .. arg[0] .. ' [<processing options>] <PDF file> ...\n' )
      print( action_help );
      os.exit( 0 );
   elseif action == 'version' then
      print( arg[0] .. action_version );
      os.exit( 0 );
   end
end

-- process options and parameters
local booklet = false
local overwrite = false
local debug = false
i = 1
while arg[i] do
   action = processing_opts[arg[i]]
   if     action == 'booklet' then booklet = true
   elseif action == 'sidebyside' then booklet = false
   elseif action == 'overwrite' then overwrite = true
   elseif action == 'debug' then debug = true
   elseif action == nil then
      -- build the temporary tex file
      local tmpdir = os.tmpdir("pfarrei.XXXXXX" )
      local tmpfile = string.match( arg[i], '.*/(.*)$') or arg[i]
      -- pdflatex's -output-directory search for source pdf works with path specification but fails
      -- when simple file name in the current working directory is provided, we need to provide '../' then
      local local_source=''
      if tmpfile == arg[i] then local_source = '../' end
      local basename = string.match( tmpfile,'(.*)%.[^.]*$') or tmpfile
      tmpfile = tmpdir..'/'..basename..'.tex'
      local file = assert( io.open( tmpfile, 'w' ) )
      if booklet then assert( file:write("\\PassOptionsToPackage{booklet}{pfarrei}\n") ) end
      assert( file:write("\\def\\OriginalFile{"..local_source,arg[i],"}\n") )
      assert( file:write("\\input{a5toa4.tex}\n") )
      assert( file:flush() )
      file:close()
      -- call pdflatex
      assert( os.execute( 'pdflatex -interaction=batchmode -output-directory='..tmpdir..' '..tmpfile ) )
      -- copy the resulting pdf file
      local srcfile = assert( io.open( tmpdir..'/'..basename..'.pdf', 'rb' ) )
      if overwrite 
      then
         tmpfile = arg[i]
      else
         tmpfile = string.match( arg[i], '(.*)%.[^.]*$' ) or arg[i]
         if booklet 
         then
            tmpfile = tmpfile..'-booklet.pdf'
         else
            tmpfile = tmpfile..'-sidebyside.pdf'
         end
      end
      local destfile = assert( io.open( tmpfile, 'wb' ) )
      local buffer
      while true do
         buffer = srcfile:read(8388608)
         if buffer==nil then break end
         assert( destfile:write(buffer) )
      end
      assert( destfile:close() )
      srcfile:close()
      if debug
      then
         print('DEBUG: Temporary files in: '..tmpdir);
      else
         tmpfile=tmpdir..'/'..basename
         os.remove( tmpfile..'.aux' )
         os.remove( tmpfile..'.tex' )
         os.remove( tmpfile..'.log' )
         os.remove( tmpfile..'.pdf' )
         os.remove( tmpdir )
      end
      overwrite = false
   end
   i=i+1
end
%    \end{macrocode}
% \iffalse^^A meta-comment
%</pfarrei>
% \fi^^A meta-comment
%
% \iffalse^^A meta-comment
%</lua>
% \fi^^A meta-comment
%
% \Finale
%
\endinput
%
% end of file `pfarrei.dtx'
%
%%% Local Variables:
%%% mode: doctex
%%% TeX-PDF-mode: t
%%% mode: flyspell
%%% ispell-local-dictionary: "de_DE"
%%% TeX-master: t
%%% End:

