\documentclass[a4paper]{article} \usepackage{german} \setlength{\unitlength}{1mm} \title{Myletter.cls\\Anleitung} \author{Axel Kielhorn\\a.kielhorn@tu-bs.de} \begin{document} \section{Vorwort} Als ich 1992 zum ersten Mal mit \TeX\ in Ber"uhrung kam, lag diesem ein deutscher Brief-Stil, benannt nach seinem Autor, Stefan Lindner, bei. Mit wenig Aufwand habe ich ihn an meine Bed"urfnisse angepa"st, ohne zu verstehen, was ich da eigentlich "andere. Im Fr"uhjahr 1994 hatten sich bereits drei sehr "ahnliche Brief-Stile angesammelt und ich wurde des "ofteren gefragt "`Wie machst Du das?"' Nachdem ich jedes mal wieder erkl"aren mu"ste, was denn nun anzupassen sei und wovon unbedingt die Finger zu lassen sein, entschlo"s ich mich, einen einfach konfigurierbaren Brief-Stil zu schreiben. (Meine \LaTeX-Kenntnisse hatten inzwischen zugenommen.) Hauptproblem war jedoch das auf meinem Rechner installierte \LaTeX\ mit NFSS, dessen F"ahigkeiten ich gerne ausnutzen wollte, das aber in der weiten Welt (dem Rechner im Nebenraum) auf Unverst"andnis stie"s. Das neue \LaTeXe\ mit integriertem NFSS war die L"osung aller Probleme, so entstand der erste deutsche Brief-Stil f"ur \LaTeXe. Und die Benutzerinnen sahen, das es fehlerhaft war, und schickten haufenweise Bug-Reports. Wie zu erwarten war befanden sich noch viele kleine Fehler in \texttt{myletter.cls} die in Zusammenarbeit mit vielen Betatesterinnen jedoch gefunden und beseitigt werden konnten. Inzwischen ist \texttt{myletter.cls} mehrsprachig geworden und sollte auch mit \texttt{babel} zusammenarbeiten.\footnote{Ich benutze nur \texttt{german.sty}} \section{Was kann \texttt{myletter.cls}?} \texttt{Myletter} implementiert ein festes Layout mit verschiedenen Boxen, deren Inhalt (in gewissen Grenzen) frei definierbar ist. Das Layout hat ungef"ahr folgendes Aussehen: \begin{picture}(100.00,140.00) \put(5.00,5.00){\framebox(90.00,130.00){}} \put(5.00,120.00){\framebox(90.00,15.00){}} \put(70.00,135.00){\framebox(0.00,0.00){}} \put(65.00,120.00){\framebox(30.00,15.00){}} \put(65.00,85.00){\framebox(30.00,35.00){}} \put(5.00,85.00){\framebox(45.00,25.00){}} \put(5.00,80.00){\framebox(90.00,5.00){}} \put(5.00,75.00){\framebox(60.00,5.00){}} \put(65.00,75.00){\framebox(30.00,5.00){}} \put(5.00,110.00){\framebox(45.00,5.00){}} \put(5.00,65.00){\framebox(45.00,5.00){}} \put(5.00,25.00){\framebox(45.00,5.00){}} \put(5.00,5.00){\framebox(90.00,20.00){}} \put(10.00,126.5){{FIRM}} \put(10.00,111.5){{Firmreturn}} \put(10.00,96.5){{Addressfield}} \put(10.00,81.5){{Ref"|line}} \put(10.00,76.5){{Subject}} \put(10.00,66.5){{Opening}} \put(10.00,26.5){{Closing}} \put(10.00,16.5){{Firmfoot}} \put(70.00,126.5){{Firmaddress}} \put(70.00,106.5){{Right-}} \put(70.00,101.5){{box}} \put(70.00,76.5){{Date}} \end{picture} % % % So we finished the picture at last. Let's now take a look at the output. % Ein Teil der Felder ist statisch, wird also einmal aufgebaut und kann dann nicht mehr ver"andert werden, hierzu geh"oren: \begin{itemize} \item FIRM \item Firmaddress \item Firmreturn \item Firmfoot. \end{itemize} Daher ist \texttt{myletter.cls} auch an das DIN~A4 Format gebunden. Wenn ich mal wieder Zeit finde, wird zumindest noch A5 und \texttt{kurzbrief} (297~mm $\times$ 297~mm) eingebaut. Der Rest wird f"ur jeden Brief neu aufgebaut (dies ist wichtig wenn mehr als ein Brief in einem Dokument ist): \begin{itemize} \item ref \item subject. \item opening \item closing \end{itemize} Das Layout dieser Felder wird in einer \texttt{cfg}-Datei festgelegt, welche sich mit dem \verb+\usename+-Befehl ausw"ahlen l"a"st. Ohne diesen Befehl wird \texttt{default.cfg} geladen. Durch dieses Konzept ist es m"oglich mehrere \texttt{cfg}-Dateien zu installieren und diese bei einem Update von \texttt{myletter.cls} ohne "Anderungen\footnote{Bein Wechsel von Version 1.3 auf 1.4 waren leider doch "Anderungen notwendig :-(} weiterzuverwenden. \section{Die \texttt{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 \texttt{default.cfg}-Datei nicht zu l"oschen, da sich darin noch viele Anregungen f"ur sp"ater befinden. \begin{verbatim} \makeatletter \end{verbatim} Das ist notwendig, damit die internen Befehle definiert werden k"onnen. \begin{verbatim} %% You may include logos and other graphic-material into %% your letterhead: %% %%\RequirePackage{graphics} \end{verbatim} Neben der M"oglichkeit Bilder mit der \texttt{graphics}-Package einzubinden gibt es nat"urlich noch viele andere M"oglichkeiten. Mit \texttt{graphics} ist es getestet und sollte daher funktionieren. (\texttt{graphics.sty} braucht entweder eine Option, die den DVI-Treiber angibt oder eine Datei \texttt{graphics.cfg}) \begin{verbatim} %% 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} \end{verbatim} Diese Namen k"onnen in der \texttt{cfg}-Datei an "ortliche Gegebenheiten angepa"st werden, au"serdem ist so eine Anpassungen an andere Sprachen m"oglich, auch wenn diese nicht von \texttt{german.sty}/\texttt{babel.sty} unterst"utzt werden. Die Definitionen sind kompatibel zu \texttt{scrlettr.cls} aus dem \texttt{Koma-Script}-Paket. Nicht alle Namen werden tats"achlich genutzt. \begin{verbatim} %% 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 \end{verbatim} Die Referenz-Zeile in \texttt{myletter.cls} ist nach DIN 676 ausgelegt, kann aber beliebig ver"andert werden, die Summe der Eintr"age sollte jedoch in eine Zeile passen. \begin{verbatim} %%% 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}}} \end{verbatim} Der Briefkopf der ersten Seite setzt sich aus zwei Elementen zusammen, der Box \texttt{FIRM} und der Box \texttt{firmaddress}. Beide werden in die Box \texttt{FIRMHEAD} gepackt, wobei die horizontale Ausrichtung stattfindet. Nat"urlich k"onnte man das auch mit ein paar Parboxen oder Minipages machen, da aber \texttt{firmaddress} ein guter Platz f"ur eine Graphik ist und diese mit Sicherheit ein Fein-Tuning\footnote{Nicht nur der Text, nein, auch die Worte sind zweisprachig :-)} erfordert, habe ich diese etwas umst"andlich wirkende L"osung beibehalten. \begin{verbatim} %%% Top of every other page \sbox{\firm} {\fontsize{10}{12pt}\selectfont\normalfont Mein Name} \end{verbatim} Die Folgeseiten brauchen kein so aufwendiges Layout. \begin{verbatim} %%% 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}} \end{verbatim} Damit unzustellbare Briefe den Weg zur"uck finden erscheint im Fenster die \texttt{firmreturn}-Adresse. An der zweizeiligen Version habe ich ein Wochenende gebastelt bis sie mir gefiel. \begin{verbatim} %%% 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} \end{verbatim} Die erste Seite kann auch einen Brief"|fu"s tragen, nach DIN ist das der Ort f"ur Bankverbindungen, Gerichtsstand und "ahnliches. Damit man auch Briefe ohne diesen Kram verschicken kann, ohne eine neue \texttt{cfg}-Datei zu erzeugen, gibt es die Option \texttt{banklow}, die den Schalter \verb+@banklo+ setzt. Hiermit k"onnen die Bankverbindungen\footnote{Daher der Name} eingeschaltet werden. Diese Einstellung gilt f"ur das gesamte Dokument. \begin{verbatim} %%% 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 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 }} \end{verbatim} Dies ist der komplexeste Code in der \texttt{cfg}-Datei, das Feld rechts neben dem Adressfeld. Es wird f"ur jeden Brief neu ausgewertet, darf daher nicht in eine Box. Normalerweise soll hier Platz f"ur einen Eingangsstempel sein, aber viele Amateurdesigner packen hier lieber die Bankverbindungen hin, mit der Option \texttt{bankhigh} besteht die M"oglichkeit beides vorzusehen und bei Bedarf umzuschalten. Der letzte Absatz geh"ort zu den dunkelsten Kapiteln der \texttt{myletter}-Geschichte: Statt eine neue \texttt{cfg}-Datei zu erzeugen, wird hier mit einigen Tricks versucht ein spezielles Layout zu erreichen. \begin{verbatim} %% 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% %} \end{verbatim} 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"ur werden die Aufkleber besser eingezogen; so viel zum Thema ``Device Independend''. \begin{verbatim} \makeatother \endinput \end{verbatim} Das wars. \section{Der erste Brief} Nicht alle Einstellungen k"onnen in der \texttt{cfg}-Datei gemacht werden, sonst w"urde man ja immer den selben Brief schreiben. Daher gibt es noch viele Einstellungen im eigentlichen Text zu machen. (Nat"urlich k"onnen default-Werte in der \texttt{cfg}-Datei gesetzt werden.) Folgende Befehle m"ussen in der Pr"aambel (vor dem \verb+\begin{document}+) gesetzt werden. \begin{description} \item [\texttt{usename\{default\}}] w"ahlt die \texttt{cfg}-Datei aus. \item [\texttt{pagestyle\{headings\}}] Folgeseiten mit Kopfzeile. \item [\texttt{makelabels}] Adressaufkleber erzeugen \item [\texttt{selectlanguage\{english\}}] Die verwendete Sprache. Wenn der \texttt{german.sty} verwendet wird, Seitenkopf und -fu"s aber die englischen Namen tragen sollen, kann das \emph{hier} (und nur hier) eingestellt werden. Durch die mehrfache Verwendung von \verb+\selectlanguage{}+ kann ein furchtbares Durcheinander entstehen, daher nur eine Sprache pro Dokument verwenden! \end{description} Die folgenden Befehle "andern das Aussehen eines Briefes, sie sollten also hinter dem \verb+\begin{letter}+ stehen: \begin{description} \item [\texttt{telephone\{0531 / 89 34 39\}}] Hiermit "uberschreibe ich die Telephonnummer der \texttt{cfg}-Datei \item [\texttt{telefax\{34 21 92\}}] Gleiches f"ur die Fax-Nummer \item [\texttt{email\{i0080108@ws.rz.tu-bs.de\}}] Steht auch schon in der \texttt{cfg}-Datei \item [\texttt{mailbox\{ \}}] \item [\texttt{name\{A. Kielhorn\}}] Sinnvoll, wenn die \texttt{cfg}-Datei f"ur eine Abteilung erstellt wurde, dann steht hier die Sachbearbeiterin. Dieser Befehl setzt auch die \texttt{signature} \item [\texttt{signature\{(Axel Kielhorn)\}}] Wenn die \texttt{signature} nicht mit dem Namen "ubereinstimmt (i.~A.) \item [\texttt{specialmail\{Einschreiben\}}] \item [\texttt{refdatename\{Braunschweig, den\}}] Achtung! \texttt{refdatename} ver"andert das Layout der Ref-Zeile, daher \emph{mu"s} dieser Befehl vor den n"achsten 4 Zeilen stehen. \item [\texttt{yref\{ \}}] \item [\texttt{ymail\{1.6.1994\}}] \item [\texttt{myref\{ak/AK\}}] \item [\texttt{mymail\{1.6.1994\}}] \item [\texttt{subject\{LaTeX2e Letter-style\}}] Die Betreffzeile \item [\texttt{opening\{Dear friends,\}}] Die Anrede, der einzige Befehl der in jedem Brief vorhanden sein \emph{mu"s}, da er den Briefkopf erzeugt. Dabei kann das Argument leer sein, um Vordrucke zu erzeugen. \end{description} Hier sollte dann der Text stehen\dots Der Abschlu"s des Briefes: \begin{description} \item [\texttt{closing\{mfg\}}] Auch dieser Befehl darf nicht fehlen, er beendet den Brief. \item [\texttt{cc\{comp.text.tex\}}] Eine Kopie f"ur das Archiv \item [\texttt{encl\{default.cfg\}}] Und eine Anlage \item [\texttt{ps}] Der Brief ist zu Ende! Kein langes Postscriptum mehr. \end{description} \section{Serienbriefe} Seit Version 1.4 kann \texttt{myletter} auch Serienbriefe erzeugen. Ich habe hier die entsprechenden Programmteile aus der \texttt{scrlettr.cls} des Koma-Script-Paketes kopiert. Daher k"onnen die \texttt{adr}-Dateien zwischen beiden Systemen ausgetauscht werden. Programmierbeispiele hierzu in der anleitung zu Koma-Script. \section{Danksagungen} Bedanken m"ochte ich mich bei Donald E. Knuth und Leslie Lamport, die mit \TeX\ und \LaTeX\ ein sehr brauchbares Textverarbeitungssystem geschaffen haben, bei Stefan Lindner f"ur die Portierung auf Atari und beim \LaTeX3-Team f"ur die Weiterentwicklung von \LaTeX. Mein spezieller Dank gilt den Betatestern, die sich mit fr"uhen Versionen vom \texttt{myletter.cls} rumgeschlagen haben, hier ganz besonders Helmut Lichtenberg, dem ich viele Anregungen verdanke und Jan Braun, der den Ansto"s zu dieser Anleitung gegeben hat und sie korrektur la"s. \end{document}