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ε.

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.

Inzwischen ist myletter.cls mehrsprachig geworden und sollte auch mit babel zusammenarbeiten.^{1}

2 Was kann myletter.cls?

Myletter 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. Daher ist myletter.cls auch an das DIN A4 Format gebunden. Wenn ich

mal wieder Zeit finde, wird zumindest noch A5 und kurzbrief (297 mm × 297 mm) eingebaut.

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 default.cfg geladen. Durch dieses Konzept ist es möglich mehrere cfg-Dateien zu installieren und diese bei einem Update von myletter.cls ohne Änderungen^{2} weiterzuverwenden.

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 default.cfg-Datei nicht zu löschen, da sich darin noch viele Anregungen für später befinden.

\makeatletter

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

%% You may include logos and other graphic-material into
%% your letterhead:
%%
%%\RequirePackage{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
%%
%\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}

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

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 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.

%% 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 myletter.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. 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.

%%% Return address
%%% one line version
\sbox{\firmreturn}
   {\underline{\fontsize{7}{8pt}\selectfont
    \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}

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

\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
%%% 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

4Daher der Name

 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
     %% If there is a ref-line but no refdate entry print
     %% the date in the rightfield
     %% Note: You may fake an empty refline using
     %% \reftrue instead of \[m]yref \[m]mail
     %% This is a real hack (TM)
     \ifx\@refdate\@empty
\ifref
  \vspace{0.5ex}
  \normalsize\@date
\fi
      \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.

Der letzte Absatz gehört zu den dunkelsten Kapiteln der myletter-Geschichte: Statt eine neue cfg-Datei zu erzeugen, wird hier mit einigen Tricks versucht ein spezielles Layout zu erreichen.

%% The labels defined in myletter.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.

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 verwendet 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 nur eine Sprache pro Dokument verwenden!

Die folgenden Befehle ändern das Aussehen eines Briefes, sie sollten also hinter dem \begin{letter} stehen:

telephone{0531 / 89 34 39} Hiermit überschreibe ich die Telephonnummer der cfg-Datei

telefax{34 21 92} Gleiches für die Fax-Nummer

email{i0080108@ws.rz.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} Achtung! refdatename verändert das Lay-

out der Ref-Zeile, daher muß dieser Befehl vor den nächsten 4 Zeilen stehen.

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

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, 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{default.cfg} Und eine Anlage

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

5 Serienbriefe

Seit Version 1.4 kann myletter 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 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 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 myletter.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ß.