1 Vorwort

Als ich 1992 zum ersten Mal mit TEX in Berührung kam, lag diesem ein deutscher Brief-Stil, benannt nach seinem Autor, Stefan Lindner, bei. Mit wenig Aufwand habe ich ihn an meine Bedürfnisse angepaßt, ohne zu Verstehen, was ich da eigentlich ändere.

Im Frühjahr 1994 hatten sich bereits drei sehr ähnliche Brief-Stile angesammelt und ich wurde des öfteren gefragt ”Wie machst Du das?“ Nachdem ich jedes mal wieder erklären mußte, was denn nun anzupassen sei und wovon unbedingt die Finger zu lassen sein, entschloß ich mich, einen einfach konfigurierbaren Brief-Stil zu schreiben. (Meine L^{A}TEX-Kenntnisse hatten inzwischen zugenommen.)

Hauptproblem war jedoch das auf meinem Rechner installierte L^{A}TEX mit NFSS, dessen Fähigkeiten ich gerne ausnutzen wollte, das aber in der weiten Welt (dem Rechner im Nebenraum) auf Unverständnis stieß. Das neue L^{A}TEX 2ε mit integriertem NFSS war die Lösung aller Probleme, so entstand der erste deutsche Brief-Stil für L^{A}TEX 2ε. (Inzwischen sind noch ein paar andere dazugekommen.)

Und die Benutzerinnen sahen, das es fehlerhaft war, und schickten haufenweise Bug-Reports. Wie zu erwarten war befanden sich noch viele kleine Fehler in myletter.cls die in Zusammenarbeit mit vielen Betatesterinnen jedoch gefunden und beseitigt werden konnten.

Seit Version 1.5 heißt die Klasse nun akletter.cls und hat ein leicht verändertes Interface. Außerdem ist akletter.cls jetzt mehrsprachig geworden und sollte auch mit babel zusammenarbeiten.^{1}

2 Was kann akletter.cls?

akletter implementiert ein festes Layout mit verschiedenen Boxen, deren Inhalt (in gewissen Grenzen) frei definierbar ist. Das Layout hat ungefähr folgendes Aussehen:

1Ich benutze nur german.sty

FIRM Firmreturn Addressfield Refline Subject Opening Closing Firmfoot  Firmaddress Right- box Date

Ein Teil der Felder ist statisch, wird also einmal aufgebaut und kann dann nicht mehr verändert werden, hierzu gehören:

• FIRM

• Firmaddress

• Firmreturn

• Firmfoot. Die Breite dieser Felder ist abhänging von textwidth, ändert sich, wenn man

das Papierformat wechselt. Dies sollte bei der Definition des Inhalts beachtet werden.

Der Rest wird für jeden Brief neu aufgebaut (dies ist wichtig wenn mehr als ein Brief in einem Dokument ist):

• ref • subject.

• opening

• closing

Das Layout dieser Felder wird in einer cfg-Datei festgelegt, welche sich mit dem \usename-Befehl auswählen läßt. Ohne diesen Befehl wird akletter.cfg geladen. Durch dieses Konzept ist es möglich mehrere cfg-Dateien zu installieren und diese bei einem Update von akletter.cls ohne Änderungen^{2} weiterzuverwenden. Die endgültige Anpassung an babel wird sicher auch noch ein paar Änderungen erfordern.

Mit der Version 1.5 wurde der Name auf akletter geändert. Der Präfix my sollte für lokale Styles reserviert bleiben. Styles, die über CTAN verteilt werden, sollten eindeutig identifizierbar sein.

3 Die cfg-Datei

Diese Datei stellt die unterste Ebene der Benutzerinnenschnittstelle dar, sie wird in der Regel einmalig (bei der Installation) bearbeitet und dann vergessen. Daher ist es wichtig die akletter.cfg-Datei nicht zu löschen, da sich darin noch viele Anregungen für später befinden.

Auf Anregung von Jan Braun hat sich hier einiges getan: akletter.cls sucht nun nach akletter.cfg wenn kein Benutzername angegeben wird. Diese Datei sollte so geändert werden, das sie mit den örtlichen Gegebenheiten (Institut/Firma) übereinstimmt. Die persönliche cfg-Datei enthält dann nur noch die Änderungen zu diesem Normal, wie z. B. Namen, Durchwahl, Zimmernummer … Die persönlche Konfigurationsdatei lädt dann einfach die Firmendatei nach.

Hier zuerst die Firmendatei:

\makeatletter

Das ist notwendig, damit die internen Befehle definiert werden können.

\telephone{0800 / 12 34 56 }
\telefax  {0800 / 12 34 57 }
%% You may include logos and other graphic-material into
%% your letterhead:
%%
%%\RequirePackage[dvips]{graphics}

Neben der Möglichkeit Bilder mit der graphics-Package einzubinden gibt es natürlich noch viele andere Möglichkeiten. Mit graphics ist es getestet und sollte daher funktionieren. (graphics.sty braucht entweder eine Option, die den DVI-Treiber angibt oder eine Datei graphics.cfg)

%% You may redefine the following variables
%%

2Bein Wechsel von Version 1.3 auf 1.4 waren leider doch Änderungen notwendig :-(

%\renewcommand*{\yourrefname}   {Ihr Zeichen:}
%\renewcommand*{\yourmailname}  {Ihr Schreiben vom:}
%\renewcommand*{\myrefname}     {Unser Zeichen:}
%\renewcommand*{\mymailname}    {Unser Schreiben vom:}
%\renewcommand*{\customername}  {Kundennummer }
%\renewcommand*{\invoicename}   {Rechnungsnummer }
%\renewcommand*{\subjectname}   {}  %{Betr.}
%\renewcommand*{\ccname}        {Kopien an:}
%\renewcommand*{\enclname}      {Anlagen:}
%\renewcommand*{\headtoname}    {An}
%\renewcommand*{\datename}      {Datum}
%\renewcommand*{\pagename}      {Seite}
%\renewcommand*{\telephonename} {Telefon}
%\renewcommand*{\telefaxname}   {FAX}

Diese Namen können in der cfg-Datei an örtliche Gegebenheiten angepaßt werden, außerdem ist so eine Anpassungen an andere Sprachen möglich, auch wenn diese nicht explizit von german.sty/babel.sty unterstützt werden. Die Definitionen sind kompatibel zu scrlettr.cls aus dem Koma-Script-Paket. Nicht alle Namen werden tatsächlich genutzt. Damit das auch mit babel funtioniert, ist noch etwas mehr Aufwand notwendig, siehe akletter.cfg.

%% Alternate definitions for the reference-line.
%% Use this if you do not need a mymail-entry.
%% In fact you can do a lot of things with these
%% 4 entries, e.g. setting \mymailname to {InvoiceNo}
%% and using \mymail to display an invoiceno.
%% You may change these lines but make sure that
%% the combined length of the 4 fields is 1\leftfield
%% or less.
%\def\yref#1{\def\@yref{\parbox[t]{.33\leftfield}
%    {\scriptsize \yourrefname\\ \normalsize #1}}
%     reftrue}
%\def\ymail#1{\def\@ymail{\parbox[t]{.33\leftfield}
%    {\scriptsize \yourmailname\\ \normalsize #1}}
%     reftrue}
%\def\myref#1{\def\@myref{\parbox[t]{.33\leftfield}
%    {\scriptsize \myrefname\\ \normalsize #1}}
%     reftrue}
%\let\mymail=\@gobbleone

Die Referenz-Zeile in akletter.cls ist nach DIN 676 ausgelegt, kann aber beliebig verändert werden, die Summe der Einträge sollte jedoch in eine Zeile passen.

%%% Top of first page: left
\sbox{\FIRM}
   {\parbox[t]{\leftfield}
   {\fontsize{17.28}{22pt}\fontseries{bx}\selectfont%
    Mein Name\hfill}}
%%% Top of first page: right

\sbox{\firmaddress}
% Use either Text:
   {\parbox[t]{\rightfield}{%
    \fontsize{9}{10pt}\selectfont\normalfont
    Meine Stra{\ss}e 1\\ 12345 Meindorf}}
% or graphic:
% {\includegraphics{ourlogo}}
% and don't forget to adjust FIRM and firmaddress:
%%% Top of first page: left + right
%%% You may want to adjust the raisebox
\sbox{\FIRMHEAD}
   {\usebox{\FIRM}\raisebox{3mm}{\usebox{\firmaddress}}}

Der Briefkopf der ersten Seite setzt sich aus zwei Elementen zusammen, der Box FIRM und der Box firmaddress. Die Breite der Boxen wird in akletter.cls festgelegt, rightfield ist immer 42 mm breit, leftfield ist textwidth − rightfield. Beide werden in die Box FIRMHEAD gepackt, wobei die horizontale Ausrichtung stattfindet. Natürlich könnte man das auch mit ein paar Parboxen oder Minipages machen, da aber firmaddress ein guter Platz für eine Graphik ist und diese mit Sicherheit ein Fein-Tuning^{3} erfordert, habe ich diese etwas umständlich wirkende Lösung beibehalten.

%%% Top of every other page
\sbox{\firm}
   {\fontsize{10}{12pt}\selectfont\normalfont
    Mein Name}

Die Folgeseiten brauchen kein so aufwendiges Layout. Wer mehr möchte, dann sich natürlich auch ein anderes Layout definieren, seit 1.5e sind entsprechende Muster in der cfg-Datei vorhanden:

% \if@twoside % Twoside definition
%   \def\ps@headings{%
%       \def\@oddfoot{\hfil Text on the odd page}
%    \def\@evenfoot{Text on the even page\hfil}
%       \def\@oddhead{\usebox{\firm}
%          \headfont\hfil\@date\hfil\pagename\ \pnumfont\thepage}%
%       \let\@evenhead\@oddhead}
% \else % Oneside definition
%   \def\ps@headings{%
%       \def\@oddfoot{\hfil Text for one-side layout\hfill}
%       \def\@oddhead{\usebox{\firm}
%          \headfont\hfil\@date\hfil\pagename\ \pnumfont\thepage}}
% \fi
%%% Return address
%%% one line version
\sbox{\firmreturn}
   {\underline{\fontsize{7}{8pt}\selectfont

3Nicht nur der Text, nein, auch die Worte sind zweisprachig :-)

    \hskip5mm Mein Name $\cdot$ Meine Stra{\ss}e 1
    $\cdot$ D--12345 Meindorf\hskip5mm}}
%%% two line version
%\sbox{\firmreturn}
%   {\underline{
%      \fontsize{7}{8pt}\fontfamily{\sfdefault}\selectfont
%      \hskip3mm\parbox{65mm}
%      {\makebox[65mm][c]
%   {Fachschaft -- Maschinenbau $\cdot$
%    \mbox{\raise .75ex \hbox{c}\kern -.15em /\kern -.125em
%        \smash{\lower .3ex \hbox{o}}}
% AStA TU Braunschweig}
% \makebox[65mm][c]
%    {Katharinenstra{\ss}e 1 $\cdot$ D--38106 Braunschweig}}
%   \hskip3mm}}

Damit unzustellbare Briefe den Weg zurück finden, erscheint im Fenster die firmreturn-Adresse. An der zweizeiligen Version habe ich ein Wochenende gebastelt bis sie mir gefiel.

%%% Firstpage footer
%%% The code should be controlled by @banklo
\sbox{\firmfoot}
   {\fontsize{9}{11pt}\selectfont
%%% The following line may look nice in a FAX.CFG :-)
%%% If you have a bad telephone-line try snail-mail!\\
     \if@banklo
       \ifnum\language = \l@german
  Bankverbindung:
  \hspace{5mm}
  \parbox[t]{\rightfield}{\raggedright
  Undeutsche Landesbank Frankfurt,
  BLZ~123\,456\,78, Konto~1\,111\,007\\}%
  \hspace{5mm}
  \parbox[t]{\rightfield}{\raggedright
  Die Sparkasse Meindorf,
  BLZ~007\,123\,10, Konto~08\,15\\}
       \fi
     \fi}

Die erste Seite kann auch einen Brieffuß tragen, nach DIN ist das der Ort für Bankverbindungen, Gerichtsstand und ähnliches. Damit man auch Briefe ohne diesen Kram verschicken kann, ohne eine neue cfg-Datei zu erzeugen, gibt es die Option banklow, die den Schalter @banklo setzt. Hiermit können die Bankverbindungen^{4} eingeschaltet werden. Diese Einstellung gilt für das gesamte Dokument.

%%% Text displayed below the header on the right side
%%% This should be controlled by @bankhi

4Daher der Name

%%% This is the only place that will be re-evaluated for
%%% every letter! Everything that changes for different
%%% letters (in the same document) must go either here
%%% or in the ref-line.
\newcommand{\rightbox}
{\parbox[t]{\rightfield}
{\fontsize{9}{11pt}\selectfont
\raggedright
\ifx\fromname\@empty
\else
  \ifnum \language = \l@german
Sachbearbeiter:
  \fi
  \fromname\\
\fi
\ifx\telephonenum\@empty
\ifnum \language = \l@german
\telephonename: 040 / 44\,17\,77
\else
\telephonename: 49--40--44\,17\,77
\fi
\else
\telephonename: \telephonenum
\fi\\[1.5ex]
\ifx\telefaxnum\@empty
\ifnum \language = \l@german
\telefaxname: 040 / 44\,17\,77
\else
\telefaxname: 49--40--44\,17\,77
\fi
\else
\telefaxname: \telefaxnum
\fi\\[1.5ex]
\ifx\@email\@empty
e-mail Kein Mehl\\[1.5ex]
\else
e-mail: \@email \\[1.5ex]
\fi
\if@bankhi
  \ifnum \language = \l@german
Bankverbindung:\\[1ex]
Undeutsche Landesbank Frankfurt,
BLZ~123\,456\,78, Konto~1\,111\,007\\[.5ex]
Die Sparkasse L\"uneburg,
BLZ~007\,123\,10, Konto~08\,15 \\[.5ex]
  \fi
\fi
%% Finally fixed it!
%% If you want to have the date here, set the
%% rightdate option.

     %% (With a big excuse to Markus and many others, who
     %% had to wait that long)
     \if@rightdate
       \vspace{0.5ex}
       \normalsize\@date
     \fi
      }}

Dies ist der komplexeste Code in der cfg-Datei, das Feld rechts neben dem Adressfeld. Es wird für jeden Brief neu ausgewertet, darf daher nicht in eine Box. Normalerweise soll hier Platz für einen Eingangsstempel sein, aber viele Amateurdesigner packen hier lieber die Bankverbindungen hin, mit der Option bankhigh besteht die Möglichkeit beides vorzusehen und bei Bedarf umzuschalten.

Die Optionen banklow und bankhigh sind nicht exclusiv.

%% The labels defined in akletter.cls are what my printer likes:
%% Onecolumn, 100mm * 50mm, 3mm separation.
%% If you have different lables edit here:
%\renewcommand*{\startlabels}{\labelcount\z@
%   \pagestyle{empty}\let\@texttop\relax
% The margins are calculated from the 1in,1in point,
% thus negative values will occur if the margins are smaller
%   \topmargin -60\p@
%   \headsep \z@
%   \oddsidemargin -35\p@
%   \evensidemargin -35\p@
%   \textheight 10in
%   \@colht\textheight \@colroom\textheight \vsize\textheight
%   \textwidth 550\p@
% You may have to increase columnsep if you use twocolumn
% This is what letter.cls uses.
%   \columnsep 26\p@
% This does almost nothing since there is an explicit
% fontsize-command in the text written.
%   \ifcase \@ptsize\relax
%     \normalsize
%   \or
%     \small
%   \or
%     \footnotesize
%   \fi
%   \baselineskip \z@
%   \lineskip \z@
%   \boxmaxdepth \z@
%   \parindent \z@
% This is obvious, isn't it?
%   \twocolumn
%   \relax}

%% This is how the label will look like when printed.
%% Note that specialmail will be written to the .aux-file
%% when the letter is processed. The width used here is
%% what letter.cls uses.
%\renewcommand*{\mlabel}[2]{%
%  \parbox[b][2in][c]{262\p@}{%
%     \strut\ignorespaces\usebox{\firmreturn}\\
%     \fontsize{12}{14pt}\selectfont
%     \parbox[t][1.2in][c]{3in}{#2}
%   }\par%
%}

Um echte Adressaufkleber zu erzeugen ist noch einiges an Arbeit notwendig. Das hier angegebene Layout funktioniert mit meinen Aufklebern auf einem Deskjet 500 recht gut, auf dem neuen Deskjet 540 ist alles um 20 mm verschoben, dafür werden die Aufkleber besser eingezogen; so viel zum Thema “Device Independend”.

\makeatother
\endinput

Das wars.

Die einzelnen Mitarbeiterinnen brauchen dann nur noch folgendes:

%
\input{akletter.cfg}
%
\email{A.Kielhorn@tu-bs.de}
\mailbox{}
\name{A. Kielhorn }
\signature{(Axel Kielhorn)}
%

4 Der erste Brief

Nicht alle Einstellungen können in der cfg-Datei gemacht werden, sonst würde man ja immer den selben Brief schreiben. Daher gibt es noch viele Einstellungen im eigentlichen Text zu machen. (Natürlich können default-Werte in der cfg-Datei gesetzt werden.)

Folgende Befehle müssen in der Präambel (vor dem \begin{document}) gesetzt werden.

usename{default} wählt die cfg-Datei aus.

pagestyle{headings} Folgeseiten mit Kopfzeile.

makelabels Adressaufkleber erzeugen selectlanguage{english} Die verwendete Sprache. Wenn der german.sty ver-

wendet wird, Seitenkopf und -fuß aber die englischen Namen tragen sollen, kann das hier (und nur hier) eingestellt werden. Durch die mehrfache Verwendung von \selectlanguage{} kann ein furchtbares Durcheinander entstehen, daher am besten nur eine Sprache pro Dokument verwenden!

Seit Version 1.5e kann der Benutzer das Aussehen noch feiner manipulieren:

reffont Mit \renewcommand*\reffont{} kann das Aussehen der von Akletter.cls

erzeugten Texte wie ”Ihr Schreiben vom“ verändert werden, default ist

     normalfont
reftextfont Mit \renewcommand*\reftextfont{} kann das Aussehen der Ar-

gumente der Referenzzeile verändert werden, default ist normalfont

headfont Mit einem \renewcommand*\headfont{} kann das Aussehen der Kopf-

zeile (ohne Seitenzahl) verändert werden, default ist slshape

pnumfont Mit einem \renewcommand*\pnumfont{} kann das Aussehen der Sei-

tenzahl verändert werden, default ist normalfont Die folgenden Befehle ändern das Aussehen eines Briefes, sie sollten also

hinter dem \begin{letter} stehen: telephone{0800 / 12 34 56} Hiermit überschreibe ich die Telephonnummer

der cfg-Datei telefax{0800 / 12 34 57} Gleiches für die Fax-Nummer

email{A.Kielhorn@tu-bs.de} Steht auch schon in der cfg-Datei
mailbox{ }

name{A. Kielhorn} Sinnvoll, wenn die cfg-Datei für eine Abteilung erstellt wurde, dann steht hier die Sachbearbeiterin. Dieser Befehl setzt auch die

     signature
signature{(Axel Kielhorn)} Wenn die signature nicht mit dem Namen über-

einstimmt (i. A.)

specialmail{Einschreiben}

refdatename{Braunschweig, den} Refdatename wird nur benutzt, wenn auch

tatsächlich eine Referenzzeile vorhanden ist.

yref{ }
ymail{1.6.1994}
myref{ak/AK}
mymail{1.6.1994}
subject{LaTeX2e Letter-style} Die Betreffzeile
invoice{Rechnungsnummer} noch experimentell

customer{Kundennummer} noch experimetell

opening{Dear friends,} Die Anrede, der einzige Befehl der in jedem Brief vorhanden sein muß, da er den Briefkopf erzeugt. Dabei kann das Argument leer sein, z. B. um Vordrucke zu erzeugen.

Hier sollte dann der Text stehen… Der Abschluß des Briefes:

closing{mfg} Auch dieser Befehl darf nicht fehlen, er beendet den Brief.

cc{comp.text.tex} Eine Kopie für das Archiv

encl{akletter.cfg} Und eine Anlage

ps Der Brief ist zu Ende! Kein langes Postscriptum mehr.

5 Serienbriefe

Seit Version 1.4 kann akletter auch Serienbriefe erzeugen. Ich habe hier die entsprechenden Programmteile aus der scrlettr.cls des Koma-Script-Paketes kopiert. Daher können die adr-Dateien zwischen beiden Systemen ausgetauscht werden. Programmierbeispiele hierzu in der Anleitung zu Koma-Script.

6 Optionen

akletter.cls kennt eine Reihe von Optionen die nicht unerwähnt bleiben sollen:

a4paper Wählt das Papierformat aus. Diese Option kann auch weggelassen werden, da sie default ist.

a4offset Erzeugt ein um 24 Punkte (ca. 8 mm) nach rechts verschobenes Layout, das um 24 Punkte schmaler ist. Gedacht ist dieses Layout für Bewerbungsmappen, bei denen der linke Rand durch eine Klemmleiste verdeckt ist.

letterpaper Wählt das amerikanische letter Format. Der Brief wird etwas breiter, dafür aber kürzer. Ob das Layout mit amerikanischen Fensterumschlägen zurechtkommt, kann ich nicht überprüfen.

banklow und

bankhigh sind zwei Schalter zur freien Verfügung. Im Original dienen sie dazu, die Bankverbindungen in Fuß der Seite (wo sie hingehören) oder im Feld rechts neben der Anschrift (wo viele Designer sie gerne hinpacken) ein- und auszuschalten. Beide Schalter können unabhängig voneinander benutzt werden.

foldmarks schaltet die Falzmarken ein. Ob sie auch wirklich zu sehen sind, liegt dann am Drucker. Der oben genannte DeskWriter 540 läßt einen zu breiten linken Rand, so daß die Falzmarken nicht gedruckt werden können. refdate Aktiviert das Datum in der Referenzzeile

subjectdate Das Datum erscheint in der Subjectzeile (default)

rightdate Wenn im rightfield entsprechneder Code enthalten ist, wird das Datum dort ausgegeben. Ansonsten wird kein Datum gedruckt.

Da ich ein großer Anhänger von Normen bin, habe ich jetzt auch das Datumsformat nach ISO 8601 definiert. Für deutsche Briefe ist es relevant, da die DIN 5008 von 1996 (Maschinenschreiben) dieses Format empfiehlt. Durch den Befehl \dateiso in der Präamble wird das Datum als JJJJ-MM-TT gesätzt, also z.B. 2000-05-28 für den 28. Mai 2000. Mit jeder Sprachumschaltung wird das Datum wieder auf den Standardwert für diese Sprache zurückgesätzt.

7 Danksagungen

Bedanken möchte ich mich bei Donald E. Knuth und Leslie Lamport, die mit TEX und L^{A}TEX ein sehr brauchbares Textverarbeitungssystem geschaffen haben, bei Stefan Lindner für die Portierung auf Atari, bei Andrew Trevorrow für die Portierung auf MacIntosh und beim L^{A}TEX3-Team für die Weiterentwicklung von L^{A}TEX.

Mein spezieller Dank gilt den Betatestern, die sich mit frühen Versionen vom akletter.cls rumgeschlagen haben, hier ganz besonders Helmut Lichtenberg, dem ich viele Anregungen verdanke und Jan Braun, der den Anstoß zu dieser Anleitung gegeben hat und sie Korrektur laß.