From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/pfarrei/pfarrei.dtx | 1194 ++++++++++++++++++++++++++++++ 1 file changed, 1194 insertions(+) create mode 100644 macros/latex/contrib/pfarrei/pfarrei.dtx (limited to 'macros/latex/contrib/pfarrei/pfarrei.dtx') diff --git a/macros/latex/contrib/pfarrei/pfarrei.dtx b/macros/latex/contrib/pfarrei/pfarrei.dtx new file mode 100644 index 0000000000..17ab114049 --- /dev/null +++ b/macros/latex/contrib/pfarrei/pfarrei.dtx @@ -0,0 +1,1194 @@ +% \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 `maintained'. +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% 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 `maintained' (verwaltet). +% +% Der Aktuelle Verwalter und 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: 2013-10-16 20:54:26 +0200 (Mi, 16. Okt 2013) $ + \def\revision$#1: #2 #3${% + \gdef\pfarreirevision{#2}% + }\revision$Revision: 36 $ +\endgroup +%<*dtx> +\def\LaTeXformat{LaTeX2e} +\ifx\fmtname\LaTeXformat + \makeatletter + \let\saved@@end\@@end + \def\@@end{\csname fi\endcsname\saved@@end} + \makeatother + \ProvidesFile{pfarrei.dtx} +% +%\ProvidesPackage{pfarrei} +%\ProvidesFile{a5toa4.tex} + [\pfarreirevisiondate\space r\pfarreirevision\space LaTeX2e package + (for pastors)] +% +%<*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} +% +%<*dtx> +\fi +% +%<*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 + for additional +information. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Markus Kohm. + +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{+-------------------------------------------------------------------} +} +% +%<*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 +% +% \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 +% +% \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 +% +% \fi^^A meta-comment +% +% +% \iffalse^^A meta-comment +% +% \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 36 2013-10-16 18:54:26Z mjk $ + +kpse.set_program_name(arg[-1], 'a5toa4') +require('pfarrei.pfarrei') +% \end{macrocode} +% \iffalse^^A meta-comment +% +% \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: 36 $', 12, -2 ) +local action_version = ' r' .. version_number .. '\n' .. [[ + +Copyright (c) 2013 Markus Kohm. +License: lppl 1.3c or later. See . +]] +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 instead of appending + "-sidebyside.pdf" or "--booklet.pdf" to the basename + of +]] +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] .. ' ' ) + print( ' ' .. arg[0] .. ' [] ...\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] + 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{",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 +% +% \fi^^A meta-comment +% +% \iffalse^^A meta-comment +% +% \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: + -- cgit v1.2.3