\documentstyle[german,dina4]{article} \author{Robert Tolksdorf\\K"ortestr.~30\\D-1000 Berlin 61} \title{Kennzeichnung von Vorversionen eines Dokuments} \def\prelim{{\tt prelim}} \def\Prelim{{\tt prelim}\ } \begin{document} \maketitle \begin{abstract} Durch eine kleine Modifikation der Output-Routine von \LaTeX\ werden Vorver"-sion"-en eines Dokuments durch eine zus"atzliche Zeile am Seitenende als solche markiert. Die Modifikation wird als Style-Option implementiert. \end{abstract} \section{Das Problem} Wer Dokumente zur Ver"offentlichung erstellt, schreibt normalerweise nicht sofort die endg"ultige Version. Vor einer Herausgabe stehen diverse Korrekturdurchl"aufe; vor einer Ver"offentlichung eine Edition und Korrektur durch den Herausgeber. Die dabei entstehenden Dokumente sind vorl"aufige Versionen, Korrekturexemplare oder halbfertige Notizensammlungen. Druckt man sich diese Dokumente aus, besteht hinterher keine M"oglichkeit, auf einen Blick festzustellen, aus welcher Phase der Dokumentenerstellung der Ausdruck stammt. W"un"-schens"-wert w"are eine einfache Markierung, m"oglichst mit Ausdruckdatum. Eine L"osung daf"ur w"are mit \LaTeX, vorl"aufige Versionen beispielsweise zweispaltig zu setzen und erst in der endg"ultigen Version auf Spalten zu verzichten. Dieses Vorgehen hat allerdings den Nachteil, da"s die auch bei \LaTeX\ n"otige visuelle Kontrolle des Layouts in den Vorversionen nicht m"oglich ist. Wir implementieren daher eine Dokumentenstil-Option, bei der in den Vorversionen eine zus"atzliche Zeile mit der Kennzeichnung "`ENTWURF"' und dem Formatierungsdatum erscheint. Da die Implementierung an der Output-Routine von \LaTeX\ ansetzt, beeinflu"st sie nicht das Layout. Da gleichzeitig ein vern"unftiges Layout einen unteren Rand l"a"st, wird die Markierung im Ausdruck bei gleichbleibender Druckerseitenl"ange ausreichend Platz finden. \section{Die \prelim-Option} Die hier vorgestellte \prelim-Option sorgt f"ur die Kennzeichnung des Status eines Dokuments als "`preliminary"' -- also vorl"aufig. Dazu wird sie einfach in der \verb!\documentstyle!-Deklaration als Option aufgef"uhrt: {\small\begin{verbatim} \documentstyle[...,prelim]{...} \end{verbatim}} \noindent \Prelim kann an jeder Position in der Liste der Optionen erscheinen. Jeder Seite wird nun eine Zeile der Art "`ENTWURF (27. Mai 1990 -- 12:34)"' hinzugef"ugt, wobei Datum und Uhrzeit dem Formatierungszeitpunkt entsprechen. Die Seite wird dabei etwas h"oher, ohne den Satzspiegel w"ahrend der Formatierung zu "andern. F"ur die Endversion entfernt man einfach die Option in der \verb!\documentstyle!-Deklaration. Text und Aussehen der Markierungszeile sind durch zwei Makros ver"anderbar. Dabei definiert \verb!\drafttext! den Text, der den Status des Dokuments bezeichnet -- also als Voreinstellung "`ENTWURF"' mit Datum und Uhrzeit oder auch "`Draft"' oder "`To appear in `Die \TeX nische Ko"-m"o"-die'"' oder "`Vorversion"'. Eine "Anderung ist beispielsweise durch \verb!\def\drafttext{Draft}! m"oglich. Es sollte hier nur Text expandieren. Das Aussehen der Zeile ist in \verb!\draftmark! definiert. Hier findet das Layout der Zeile statt, wobei mindestens ein variabler horizontaler Leerraum vorhanden sein sollte. Die Voreinstellung lautet \verb!\rm\hfil\drafttext\hfil!, was die Zeile zentriert und die normale Modern-Schrift verwendet. Man k"onnte ihr Erscheinungsbild auch mit einer "Anderung nach \verb!\def\draftmark{\sl\drafttext\hfil}! modifizieren; dann w"urde die Zeile in {\sl slanted} und linksb"undig erzeugt. Zum Einf"ugen des Datums der Formatierung kann das Makro \verb!\timeofday! verwendet werden. In der endg"ultigen Version eines Dokuments brauchen eventuell vorhandene Neudefinitionen von \verb!\drafttext! und \verb!\draftmark! nicht entfernt zu werden, da sie ohne die {\tt prelim}-Option nicht weiter st"oren. Die Einf"uhrung zweier Makros dient der Trennung zwischen Inhalt und Aussehen. Eigentlich sollte die Option {\tt draft} hei"sen. Da aber in \LaTeX\ eine Style-Option \verb!\ds@draft! vordefiniert ist -- bei ihr werden "ubervolle K"asten durch einen \verb!\vrule! markiert -- schied der Name aus zugunsten von \Prelim f"ur "`preliminary"'. \section{Die Implementierung} Zur Implementierung war ein Blick in {\tt LATEX.TEX} n"otig. Die zentrale Routine zum Ausgeben einer Seite ist \verb!\@outputpage!. In ihr wird an \verb!\shipout! eine {\sf vbox} "ubergeben, in der der Seiteninhalt aus mehreren {\sf hbox} zusammengesetzt wird. F"ur unsere Zwecke mu"s nur eine Zeile hinzugef"ugt werden, in der die Kennzeichnung als {\sf hbox} hinzu kommt. Die Stil-Option ersetzt die \LaTeX-Definition von \verb!\@outputpage! einfach durch die so modifizierte. Tats"achlich wurde der Code direkt aus {\tt LATEX.TEX} herauskopiert. Die Idee zu \verb!\timeofday! stammt aus {\tt FONTBL.TEX} von Pierre A.\ MacKay. \noindent Es folgt der Code von {\tt PRELIM.STY}: {\small\begin{verbatim} % Documentstyle-option ``prelim''(-inary) % % Copyright (C) 1990 by % Robert Tolksdorf % K\"ortestr. 30 % D-1000 Berlin 61 % West-Germany % % 27.05.90 Original % 29.05.90 Added a blank after \today in \draftmark % 31.05.90 Changed \timeofday to insert an addition `0' (eg. in 2:07) % 31.07.90 Rearranged the message output % \newcount\@hourmin \def\timeofday{\@hourmin=\time\divide\@hourmin by 60\relax\the\@hourmin:% \multiply\@hourmin by -60 \advance\@hourmin by\time\ifnum\@hourmin<10{0}\fi% \the\@hourmin} % % \drafttext defines what text should appear % \def\drafttext{ENTWURF (\today\ -- \timeofday)} % % \draftmark defines how the draft-marking line should appear % \def\draftmark{\rm\hfil\drafttext\hfil} % % We redefine the original LaTeX-output-grandmaster and introduce an % additional line saying that the document is in draft-status. % \def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi \if@twoside \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot \let\@themargin\oddsidemargin \else \let\@thehead\@evenhead \let\@thefoot\@evenfoot \let\@themargin\evensidemargin \fi\fi \shipout \vbox{\normalsize \baselineskip\z@ \lineskip\z@ \vskip \topmargin \moveright\@themargin \vbox{\setbox\@tempboxa \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}} \dp\@tempboxa\z@ \box\@tempboxa \vskip \headsep \box\@outputbox \baselineskip\footskip \hbox to\textwidth{\@thefoot} % % Here our modification is: simply add an additional line % to the \vbox that contains the \draftmark. Simple, but it works! % \hbox to\textwidth{\draftmark}}}\global\@colht\textheight \endgroup\stepcounter{page}\let\firstmark\botmark} % % Type out a message (it contains a version-number in parenthesis). % \typeout{*** This document is in draft-status *** (1-310790RT)} \endinput \end{verbatim}} \end{document}