diff options
author | Karl Berry <karl@freefriends.org> | 2006-08-20 00:02:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-08-20 00:02:10 +0000 |
commit | 524b07990fd2040ab6ce24b015b9a2bd4544a3c1 (patch) | |
tree | 93d7c1e1089e6c5df66ce81b57ed93482321baaa /Master/texmf-dist/source/latex/koma-script/scrknpap.dtx | |
parent | affc79c45bfab740028ac1e6b8480c5465a42b01 (diff) |
koma-script 2.95b, using provided texmf zip
git-svn-id: svn://tug.org/texlive/trunk@1990 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrknpap.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrknpap.dtx | 2171 |
1 files changed, 2171 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrknpap.dtx b/Master/texmf-dist/source/latex/koma-script/scrknpap.dtx new file mode 100644 index 00000000000..35743f0ff55 --- /dev/null +++ b/Master/texmf-dist/source/latex/koma-script/scrknpap.dtx @@ -0,0 +1,2171 @@ +% \CheckSum{1687} +% \iffalse meta-comment +% ====================================================================== +% scrknpap.dtx +% Copyright (c) Markus Kohm, 2006 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3b of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3b or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in manifest.txt. +% ---------------------------------------------------------------------- +% scrknpap.dtx +% Copyright (c) Markus Kohm, 2006 +% +% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, +% Version 1.3b, verteilt und/oder veraendert werden. +% Die neuste Version dieser Lizenz ist +% http://www.latex-project.org/lppl.txt +% und Version 1.3b ist Teil aller Verteilungen von LaTeX +% Version 2005/12/01 oder spaeter und dieses Werks. +% +% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained" +% (allein durch den Autor verwaltet). +% +% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm. +% +% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. +% ====================================================================== +% \fi +% +% \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 +%%% From File: scrknpap.dtx +%<*driver> +% \fi +\ProvidesFile{scrknpap.dtx}[2006/06/06 v2.95 KOMA-Script (note-paper)] +% \iffalse +\documentclass{scrdoc} +\usepackage[english,ngerman]{babel} +\usepackage[latin1]{inputenc} +\CodelineIndex +\RecordChanges +\GetFileInfo{scrknpap.dtx} +\title{\KOMAScript{} \partname\ \texttt{\filename}% + \footnote{Dies ist Version \fileversion\ von Datei \texttt{\filename}.}} +\date{\filedate} +\author{Markus Kohm} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.95}{2006/03/16}{% +% erste Version aus der Aufteilung von \textsf{scrclass.dtx}} +% +% \section{Briefbogen und Briefpapier} +% +% Bei Briefen kommt dem Briefbogen, also dem ersten Blatt des Briefes eine +% besondere Bedeutung zu. Dieser ist bei \texttt{scrlttr2} durch diverse +% Optionen, Variablen, Pseudo-Längen und Anweisungen bestimmt. Die weiteren +% Briefseiten werden hier verinfacht als das Briefpapier bezeichnet. Natürlich +% ist genau genommen auch der Briefbogen Briefpapier, aber eben ein besonderes. +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% \iffalse +%<*option> +% \fi +% +% \iffalse +%<*letter> +% \fi +% +% \subsection{Option für den Briefbogen} +% +% Gerade der Briefbogen ist durch eine ganze Anzahl von Optionen +% konfigurierbar. Daher wird hier weiter thematisch untergliedert. +% +% +% \subsubsection{Optionen für den Briefkopf} +% +% Die Gestaltung des Briefkopfes war bei der alten \texttt{scrlettr} +% Klasse eng begrenzt. Deshalb hatte ich für mich selbst das +% \texttt{briefkopf} Paket geschrieben und ohne Support +% veröffentlicht. Die Funktionalität ist nun direkt verfügbar. Dazu +% werden verschiedene Optionen benötigt. +% +% \begin{option}{fromalign} +% \changes{v2.8q}{2002/01/25}{Neu} +% Diese Option legt fest, ob der Absender linksbündig, mittig oder +% rechtsbündig gesetzt werden soll. +% \begin{macro}{\@alignfrom} +% \changes{v2.8q}{2002/01/25}{Neu} +% Die Einstellung wird in einem nummerisch auszuwertenden Makro +% gespeichert. Dabei gelten folgende Werte: +% \begin{center} +% \begin{tabular}{rl} +% Wert & Ausrichtung \\\hline +% 0 & linksbündig \\ +% 1 & zentriert \\ +% 2 & rechtsbündig \\ +% 10000 & nicht antasten \\ +% \end{tabular} +% \end{center} +% Voreingestellt ist "`nicht antasten"'. +% \begin{macrocode} +\newcommand*{\@alignfrom}{0} +\KOMA@ncmdkey{fromalign}{@alignfrom}{% + {left}{0},% + {center}{1},{centered}{1},{middle}{1},% + {right}{2},% + {no}{10000},{false}{10000},{off}{10000}% +} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromrule} +% \changes{v2.8q}{2002/01/25}{Neu} +% Es kann gewählt werden, ob im Absender nach dem Namen oder nach dem +% gesamten Absender eine Linie gesetzt werden soll. +% \begin{macro}{\@rulefrom} +% \changes{v2.8q}{2002/01/25}{Neu} +% Die Einstellung wird in einem nummerisch auszuwertenden Makro +% gespeichert. Dabei gelten folgende Werte: +% \begin{center} +% \begin{tabular}{rl} +% Wert & Absenderlinie \\\hline +% 0 & keine \\ +% 1 & unter dem Name \\ +% 2 & unter der Adresse \\ +% \end{tabular} +% \end{center} +% Voreingestellt ist keine Linie. +% \begin{macrocode} +\newcommand*{\@rulefrom}{0} +\KOMA@ncmdkey{fromrule}[below]{@rulefrom}{% + {false}{0},{no}{0},{off}{0},{aftername}{1},% + {below}{2},{afteraddress}{2},{true}{2},{yes}{2},{on}{2}% +} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromphone} +% \changes{v2.8q}{2002/01/25}{Neu} +% Ob die Telefonnummer im Absender gesetzt werden soll oder nicht, +% kann hier angegeben werden. +% \begin{macro}{\if@phone} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@phonetrue} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@phonefalse} +% \changes{v2.8q}{2002/01/25}{Neu} +% Gespeichert wird die Information in einem einfachen Schalter. +% Voreingestellt ist keine Telefonnummer im Absender. +% \begin{macrocode} +\KOMA@ifkey{fromphone}{@phone} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{fromfax} +% \changes{v2.8q}{2002/01/25}{Neu} +% Ob die Faxnummer im Absender gesetzt werden soll oder nicht, +% kann hier angegeben werden. +% \begin{macro}{\if@fax} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@faxtrue} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@faxfalse} +% \changes{v2.8q}{2002/01/25}{Neu} +% Gespeichert wird die Information in einem einfachen Schalter. +% Voreingestellt ist keine Faxnummer im Absender. +% \begin{macrocode} +\KOMA@ifkey{fromfax}{@fax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{fromemail} +% \changes{v2.8q}{2002/01/25}{Neu} +% Ob die E-Mail-Adresse im Absender gesetzt werden soll oder nicht, +% kann hier angegeben werden. +% \begin{macro}{\if@email} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@emailtrue} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@emailfalse} +% \changes{v2.8q}{2002/01/25}{Neu} +% Gespeichert wird die Information in einem einfachen Schalter. +% Voreingestellt ist keine E-Mail-Adresse im Absender. +% \begin{macrocode} +\KOMA@ifkey{fromemail}{@email} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{fromurl} +% \changes{v2.8q}{2002/01/25}{Neu} +% Ob die URL auf eine Homepage im Absender gesetzt werden soll oder +% nicht, kann hier angegeben werden. +% \begin{macro}{\if@www} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@wwwtrue} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@wwwfalse} +% \changes{v2.8q}{2002/01/25}{Neu} +% Gespeichert wird die Information in einem einfachen Schalter. +% Voreingestellt ist keine URL im Absender. +% \begin{macrocode} +\KOMA@ifkey{fromurl}{@www} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{fromlogo} +% \changes{v2.8q}{2002/01/25}{Neu} +% Ob ein Logo in den Briefkopf gesetzt werden soll oder +% nicht, kann hier angegeben werden. +% \begin{macro}{\if@logo} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@logotrue} +% \changes{v2.8q}{2002/01/25}{Neu} +% \begin{macro}{\@logofalse} +% \changes{v2.8q}{2002/01/25}{Neu} +% Gespeichert wird die Information in einem einfachen Schalter. +% Voreingestellt ist kein Logo im Briefkopf. +% \begin{macrocode} +\KOMA@ifkey{fromlogo}{@logo} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \subsubsection{Optionen für Anschrift und Absenderergänzung} +% +% \begin{option}{addrfield} +% \changes{v2.8q}{2001/10/09}{Neu} +% Das Adressfeld für Fensterumschläge kann mit \texttt{addrfield} ein- und +% ausgeschaltet werden +% \begin{macro}{\if@afield} +% \begin{macro}{\if@afieldtrue} +% \begin{macro}{\if@afieldfalse} +% Die Speicherung erfolgt wiederum in einem Schalter. +% \begin{macrocode} +\newif\if@afield\@afieldtrue +\KOMA@ifkey{addrfield}{@afield} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{backaddress} +% \changes{v2.8q}{2002/01/22}{Neu} +% Im Adressfeld kann die Rücksendeadresse gesetzt werden. Dies geschieht nun +% nicht mehr allein durch Definition einer Rücksendeadresse, sondern auch +% durch eine Option. +% \begin{macro}{\if@baddr} +% \begin{macro}{\@baddrtrue} +% \begin{macro}{\@baddrfalse} +% Die Einstellung der Option wird in einem Schalter gespeichert. +% \begin{macrocode} +\newif\if@baddr\@baddrtrue +\KOMA@ifkey{backaddress}{@baddr} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{locfield} +% \changes{v2.8q}{2001/10/09}{Neu} +% Mit Hilfe der Optione \texttt{locfield} kann der Platz neben dem Adressfeld +% groß oder klein gewählt werden. +% \begin{macro}{\if@bigloc} +% \begin{macro}{\@bigloctrue} +% \begin{macro}{\@biglocfalse} +% Die Einstellung wird in einem Schalter gespeichert. +% \begin{macrocode} +\newif\if@bigloc +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\KOMA@key{locfield}[wide]{% + \begingroup + \KOMA@set@ncmdkey{locfield}{@tempa}{{wide}{0},{narrow}{1}}{#1}% + \ifcase\@tempa + \endgroup + \@biglocfalse + \else + \endgroup + \@bigloctrue + \fi +} +\DeclareOption{wlocfield}{\@ObsoleteOption{locfield=wide}} +\DeclareOption{slocfield}{\@ObsoleteOption{locfield=narrow}} +% \end{macrocode} +% \end{option} +% +% +% \subsubsection{Optionen für Faltmarken} +% +% \begin{option}{foldmarks} +% \changes{v2.8q}{2001/09/10}{Neu} +% Die Faltmarken können mit \texttt{foldmarks} aktiviert und deaktiviert +% werden. +% \begin{macro}{\if@fold} +% \begin{macro}{\@foldtrue} +% \begin{macro}{\@foldfalse} +% Ob Faltmarken gesetzt werden sollen oder nicht, wird in einem +% Schalter gespeichert. +% \begin{macrocode} +\newif\if@fold\@foldtrue +\KOMA@ifkey{foldmarks}{@fold} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \subsubsection{Optionen für die Geschäftszeile} +% +% \begin{option}{refline} +% \changes{v2.8n}{2001/09/08}{Neue Option} +% Kopf und Fuß der ersten Seite sind normalweise so breit, dass sie +% zur Adresse des Empfängers passen. Für die Geschäftszeile gibt es +% zwei Alternativen, eine breite und eine, deren Breite der Textbreite +% entspricht. Voreingestellt ist die Textbreite. +% \begin{macro}{\if@refwide} +% \changes{v2.8n}{2001/09/08}{Neuer Schalter} +% \begin{macro}{\@refwidetrue} +% \begin{macro}{\@refwidefalse} +% Gespeichert wird die Information in einem Schalter. +% \begin{macrocode} +\newif\if@refwide +\KOMA@key{refline}[wide]{% + \begingroup + \KOMA@set@ncmdkey{refline}{@tempa}{{wide}{0},{narrow}{1}}{#1}% + \ifcase\@tempa + \endgroup + \@refwidefalse + \else + \endgroup + \@refwidetrue + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \subsubsection{Optionen für den Betreff} +% +% \begin{option}{subject} +% \changes{v2.8q}{2001/10/09}{Neu} +% Ein Betreff-Titel kann mit \texttt{subject} ein- und abgeschaltet +% werden. In England und Frankreich scheint es teilweise üblich zu +% sein, den Betreff erst nach der Anrede und dafür zentriert zu +% setzen\footnote{Ich kann mir nur mühsahm eine Bemerkung dazu +% verkneifen.}. +% Deshalb kann alternativ zum Einschalten des Betreff-Titels hier auch +% dies aktiviert werden. +% \begin{macro}{\if@subj} +% \begin{macro}{\@subjtrue} +% \begin{macro}{\@subjfalse} +% \begin{macro}{\if@subjafter} +% \begin{macro}{\@subjaftertrue} +% \begin{macro}{\@subjafterfalse} +% Die Speicherung erfolgt in zwei Schaltern. +% \begin{macrocode} +\newif\if@subj +\newif\if@subjafter +\KOMA@key{subject}{% + \begingroup + \KOMA@set@ncmdkey{locfield}{@tempa}{% + {titled}{0},% + {untitled}{1},% + {afteropening}{2},% + {beforeopening}{3}% + }{#1}% + \ifcase\@tempa + \endgroup + \@subjtrue + \or + \endgroup + \@subjfalse + \or + \endgroup + \@subjaftertrue + \else + \endgroup + \@subjafterfalse + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \subsubsection{Optionen für den Satzspiegel} +% +% \begin{option}{enlargefirstpage} +% \changes{v2.8o}{2001/09/18}{Neue Option} +% Normalerweise wird der Text des Briefboges entsprechend dem +% normalen Satzspiegel gesetzt. Ist allerdings der Fuß der ersten +% Seite zu hoch, dann wird der Satzspiegel vertikal entsprechend +% verkürzt. Mit der Option \texttt{firstpageenlarge} kann erzwungen +% werden, dass im umgekehrten Fall, der Satzspiegel vertikal +% verlängert wird. +% \begin{macro}{\if@enlargefp} +% \begin{macro}{\@enlargefptrue} +% \begin{macro}{\@enlargefpfalse} +% Gespeichert wird die Information über die Optionen in einem +% Schalter. +% \begin{macrocode} +\KOMA@ifkey{enlargefirstpage}{@enlargefp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{option} +% +% +% \subsection{Optionen für den Kopf des weiteren Briefpapiers} +% +% Diese Optionen haben zwar nichts mit dem eigentlichen Briefbogen zu tun. Das +% Briefpapier schließt sich aber an, weshalb die Optionen hier zu finden sind. +% +% \begin{option}{pagenumber} +% \changes{v2.8q}{2002/01/31}{Neu} +% Bei Briefen kann gewählt werden, ob auf Folgeseiten die Seitenzahl +% im Kopf oder im Fuß stehen soll. Dabei kann zwischen Seitenzahl +% rechts, links oder zentriert gewählt werden. Voreingestellt ist der +% Fuß und mittig. +% \begin{macro}{\@pageat} +% \changes{v2.8q}{2002/01/31}{Neu} +% In dieser nummerisch auswertbaren Variablen wird gespeichert, wo die +% Seitenzahl stehen soll. Dabei gilt: +% \begin{center}\begin{tabular}{rl} +% Wert & Bedeutung für die Seitenzahl\\\hline +% -1 & keine \\ +% 0 & im Kopf links \\ +% 1 & im Kopf mittig \\ +% 2 & im Kopf rechts \\ +% 3 & im Fuß links \\ +% 4 & im Fuß mittig \\ +% 5 & im Fuß rechts \\ +% \end{tabular}\end{center} +% \begin{macrocode} +\newcommand*{\@pageat}{4} +\KOMA@key{pagenumber}{% + \begingroup + \KOMA@set@ncmdkey{pagenumber}{@tempa}{% + {no}{-1},{off}{-1},{false}{-1},% + {topleft}{0},{headleft}{0},% + {topmiddle}{1},{topcenter}{1},{topcentered}{1},% + {headmiddle}{1},{headcenter}{1},{headcentered}{1},% + {topright}{2},{headright}{2},% + {botleft}{3},{footleft}{3},% + {botmiddle}{4},{botcenter}{4},{botcentered}{4},% + {footmiddle}{4},{footcenter}{4},{footcentered}{4},% + {botright}{5},{footright}{5},% + {top}{10},{head}{10},{bot}{11},{foot}{11},% + {left}{20},{middle}{21},{center}{21},{centered}{21},{right}{22}% + }{#1}% + \ifnum\@tempa<10 + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\@tempa}}% + \else + \ifnum\@tempa<20 + \@tempcnta\@pageat\relax + \ifnum\@tempcnta>2 + \advance\@tempcnta by -3 + \fi + \ifnum\@tempa=11 + \advance\@tempcnta by 3 + \fi + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}% + \else + \ifnum\@pageat>2 + \edef\@pageat{3}% + \else + \edef\@pageat{0}% + \fi + \@tempcnta\@tempa + \advance\@tempcnta by -20 + \advance\@tempcnta by\@pageat + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}% + \fi + \fi + \@tempa +} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% +% \iffalse +%</letter> +%</option> +%<*body> +%<*letter> +% \fi +% +% \subsection{Anweisungen für den Briefbogen} +% +% Auch bei den Anweisungen zunächst alles, was mit dem Briefbogen zu tun hat. +% +% \subsubsection{Der Kopf des Briefbogens} +% +% \begin{macro}{\firsthead} +% \changes{v2.8q}{2002/01/28}{\cs{@alignfrom} auf 10000 gesetzt} +% \begin{macro}{\@firsthead} +% \begin{macro}{\@gen@firsthead} +% \changes{v2.8q}{2002/01/28}{Neu} +% Bei \texttt{scrlttr2} gibt es die üblichen Seitenstile, allerdings +% ist deren Verhalten etwas anders als gewohnt. Dies ist in den +% Besonderheiten für Briefen begründet. Zunächst die Voreinstellung für +% Briefbögen. +% \begin{macrocode} +\newcommand*{\@firsthead}{\noindent% + \parbox[b]{\useplength{firstheadwidth}}% + {\centering\usekomafont{fromaddress}{% + \ifkomavarempty{fromname}{}{% + {\usekomafont{fromname}% + {\ignorespaces\usekomavar{fromname}}}\\[-8pt] + \rule{\useplength{firstheadwidth}}{.4pt}\\ + }% + \ifkomavarempty{fromaddress}{}{% + \ignorespaces\usekomavar{fromaddress}% + }% + }% + }% +} +\newcommand*{\@gen@firsthead}{% +% Damit wird ggf. die Kopfzeile der ersten Seite umdefiniert, nämlich dann, +% wenn dies per Option aktiviert wurde. +% \begin{macrocode} + \ifcase\@alignfrom +% \end{macrocode} +% Wir befinden uns nun in dem Bereich für \verb|\@alignfrom|=0. +% Entsprechend unserer Festlegung wird daher als Erstes der +% linksbündige Absender definiert. Wir verwenden dafür eine +% \emph{parbox}, in der der Text linksbündig angeordnet wird. Diese +% Box soll über die gesamte Breite gehen dürfen: +% \begin{macrocode} + \renewcommand*{\@firsthead}{\noindent + \parbox[b]{\textwidth}{\raggedright +% \end{macrocode} +% Zuerst wird der Name gesetzt. Dabei soll eine eigene Schriftart für +% den Namen verwendet werden. +% \begin{macrocode} + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% +% \end{macrocode} +% Hat \verb|\@rulefrom| den nummerischen Wert 1, so soll direkt auf den +% Absender eine Linie folgen. Die Länge dieser Linie kann vom Anwender +% bestimmt oder automatisch gewählt werden. Es wird dabei die +% Pseudo-Länge \texttt{fromrulewidth} verwendet. Ist diese negativ, +% so wird sie automatisch bestimmt. Bei der automatischen +% Längenbestimmung wird dafür gesorgt, dass die Linie nicht bis in das +% Logo ragt, das eventuell rechtsbündig neben dem Absender steht: +% \begin{macrocode} + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \if@logo + \settowidth{\@tempdimb}{\usekomavar{fromlogo}}% + \addtolength{\@tempdima}{-\@tempdimb}% + \fi + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + }% + \\ + }% +% \end{macrocode} +% Als Nächstes wird die Absenderadresse einschließlich aller +% optionalen Felder gesetzt. Dabei werden optionale Felder nur +% gesetzt, wenn der entsprechende Schalter \emph{true} ist. Die +% Adresse wird ebenfalls innerhalb einer Gruppe in einer eigenen +% Schriftart gesetzt. +% \begin{macrocode} + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% +% \end{macrocode} +% Wie weiter oben erwähnt, kann auch an dieser Stelle eine Linie +% gesetzt werden. Wir gehen davon aus, dass die Linie automatisch +% nicht in das Logo ragt, da es in diesem Fall über der Linie zu +% stehen hat. Die entsprechende Berechnung kann also entfallen. +% \begin{macrocode} + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + \\ + }% + }% +% \end{macrocode} +% Die parbox ist damit ebenfalls beendet. Es muss nun ggf. noch das +% Logo gesetz werden. Es wird in diesem Fall von der aktuellen +% Position am rechten Rand nach links ausgegeben. +% \begin{macrocode} + \if@logo + \llap{\usekomavar{fromlogo}}% + \fi + }% +% \end{macrocode} +% Damit ist die Definition des linksbündigen Absenders abgeschlossen. +% Es geht weiter mit dem zentrierten Absender. Dieser hat als +% Besonderheit, dass das Logo nicht in den Briefkopf, sondern in den +% Bereich rechts neben dem Empfänger gesetzt wird. Dort ist bereits +% das location-Feld, daher wird dieser Fall auch dort behandelt. +% \begin{macrocode} + \or + \renewcommand*{\@firsthead}{\noindent + \parbox[b]{\textwidth}{\centering + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + \\ + }% + }% + }% +% \end{macrocode} +% Damit ist die Definition des zentrierten Absenders abgeschlossen. Es +% geht weiter mit dem rechtsbündigen Absender. Das ganze wird einfach +% beim linksbündigen Absender abgeschaut. +% \begin{macrocode} + \or + \renewcommand*{\@firsthead}{\noindent + \if@logo + \rlap{\usekomavar{fromlogo}}% + \fi + \parbox[b]{\textwidth}{\raggedleft + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \if@logo + \settowidth{\@tempdimb}{\usekomavar{fromlogo}}% + \addtolength{\@tempdima}{-\@tempdimb}% + \fi + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{.4pt}% + \fi + \\ + }% + }% + }% +% \end{macrocode} +% Damit ist die Umdefinierung beendet. In allen anderen Fällen wird +% der Kopf nicht verändert. +% \begin{macrocode} + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Der Benutzer kann die Voreinstellung mit einer einfachen Anweisung ändern: +% \begin{macrocode} +\newcommand{\firsthead}[1]{% + \renewcommand*{\@alignfrom}{10000}% + \renewcommand*{\@firsthead}{\noindent#1}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Schrifteinstellungen für den Briefbogen} +% +% \begin{KOMAfont}{fromname} +% \changes{v2.95}{2006/03/23}{jetzt mit \cs{newkomafont}} +% Der Absendername im Briefkopf. +% \begin{macrocode} +\newkomafont{fromname}{} +% \end{macrocode} +% \end{KOMAfont} +% +% \begin{KOMAfont}{fromaddress} +% \changes{v2.95}{2006/03/23}{jetzt mit \cs{newkomafont}} +% Die Absenderadresse im Briefkopf. +% \begin{macrocode} +\newkomafont{fromaddress}{} +% \end{macrocode} +% \end{KOMAfont} +% +% \begin{KOMAfont}{backaddress} +% \changes{v2.95}{2006/03/23}{jetzt mit \cs{newkomafont}} +% Die Rücksendeadresse. +% \begin{macrocode} +\newkomafont{backaddress}{\sffamily} +% \end{macrocode} +% \end{KOMAfont} +% +% \begin{KOMAfont}{title} +% \changes{v2.95}{2006/03/23}{jetzt mit \cs{newkomafont}} +% Der Brieftitel. +% \begin{macrocode} +\newkomafont{title}{\normalcolor\sffamily\bfseries} +% \end{macrocode} +% \end{KOMAfont} +% +% \begin{KOMAfont}{subject} +% \changes{v2.95}{2006/03/23}{jetzt mit \cs{newkomafont}} +% Der Betreff. +% \begin{macrocode} +\newkomafont{subject}{\normalcolor\bfseries} +% \end{macrocode} +% \end{KOMAfont} +% +% \subsubsection{Längen für den Briefbogen} +% +% \begin{macro}{\ltr@len@foldmarkhpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand der Faltmarken von der linken Papierkante. +% \begin{macrocode} +\@newplength{foldmarkhpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@tfoldmarkvpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% \begin{macro}{\ltr@len@bfoldmarkvpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand der oberen und unteren Faltmarken von der oberen Papierkante. +% \begin{macrocode} +\@newplength{tfoldmarkvpos} +\@newplength{bfoldmarkvpos} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\ltr@len@toaddrvpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand des Adressfensters von der oberen Papierkante. +% \begin{macrocode} +\@newplength{toaddrvpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@backaddrheight} +% \changes{v2.8q}{2001/10/06}{Neu} +% Höhe der Rücksendeadresse. +% \begin{macrocode} +\@newplength{backaddrheight} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@toaddrhpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand des Adressfeldes von der linken Papierkante bzw. wenn negativ von +% der rechten Papierkante. +% \begin{macrocode} +\@newplength{toaddrhpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@specialmailindent} +% \changes{v2.8q}{2002/03/25}{Neu} +% Abstand der Versandtart vom linken Rand des Adressfensters. +% \begin{macrocode} +\@newplength{specialmailindent} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@specialmailrightindent} +% \changes{v2.8q}{2002/03/25}{Neu} +% Abstand der Versandtart vom rechten Rand des Adressfensters. +% \begin{macrocode} +\@newplength{specialmailrightindent} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@toaddrindent} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand der Adresse vom linken Rand des Adressfensters. +% \begin{macrocode} +\@newplength{toaddrindent} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@toaddrwidth} +% \changes{v2.8q}{2001/10/06}{Neu} +% Breite des Adressfensters +% \begin{macrocode} +\@newplength{toaddrwidth} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@toaddrheight} +% \changes{v2.8q}{2001/10/06}{Neu} +% Höhe des Adressfensters ohne Rücksendeadresse +% \begin{macrocode} +\@newplength{toaddrheight} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@locwidth} +% \changes{v2.8q}{2001/10/06}{Neu} +% Breite des Feldes neben dem Adressfenster +% \begin{macrocode} +\@newplength{locwidth} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@refvpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand der Geschäftszeile von der Papieroberkante. +% \begin{macrocode} +\@newplength{refvpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@refwidth} +% \changes{v2.8q}{2001/10/06}{Neu} +% Breite der Geschäftszeile. +% \begin{macrocode} +\@newplength{refwidth} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@refhpos} +% \changes{v2.9l}{2003/01/28}{Neu} +% Horizontale Position der Geschäftszeile. +% \begin{macrocode} +\@newplength{refhpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@refaftervskip} +% \changes{v2.8q}{2001/10/09}{Neu} +% Abstand nach der Geschäftszeile. +% \begin{macrocode} +\@newplength{refaftervskip} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@sigbeforevskip} +% \changes{v2.8q}{2001/10/09}{Neu} +% Raum für die Unterschrift. +% \begin{macrocode} +\@newplength{sigbeforevskip} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@sigindent} +% \changes{v2.8q}{2001/10/06}{Neu} +% Horizontaler Einzug des Schlussgrußes und der Signatur. +% \begin{macrocode} +\@newplength{sigindent} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@@firstfootvpos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand des Fußes der ersten Seite von der Papieroberkante. +% \begin{macrocode} +\@newplength{firstfootvpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@firstfootwidth} +% \changes{v2.8q}{2001/10/06}{Neu} +% Breite des Fußes der ersten Seite. +% \begin{macrocode} +\@newplength{firstfootwidth} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\set@ltr@len@firstheadvspos} +% \changes{v2.8q}{2001/10/06}{Neu} +% Abstand des Kopfes der ersten Seite von der Papieroberkante. +% \begin{macrocode} +\@newplength{firstheadvpos} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@firstheadwidth} +% \changes{v2.8q}{2001/10/06}{Neu} +% Breite des Kopfes der ersten Seite. +% \begin{macrocode} +\@newplength{firstheadwidth} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltr@len@fromrulewidth} +% \changes{v2.8q}{2002/01/28}{Neu} +% Die Länge einer eventuell gesetzten Linie im Absender. Negative +% Werte bedeuten, dass die Länge automtaisch bestimmt wird. +\@newplength{fromrulewidth} +\@setplength{fromrulewidth}{0pt} +% \end{macro} +% +% +% \subsubsection{Fuß des Briefbogens} +% +% \begin{macro}{\firstfoot} +% \begin{macro}{\@firstfoot} +% \begin{macrocode} +% Der Fuß des Briefbogens ist in der Voreinstellung leer. +\newcommand*{\@firstfoot}{} +% \end{macrocode} +% \end{macro} +% Dies kann jedoch über eine einfache Benutzeranweisung geändert werden: +% \begin{macrocode} +\newcommand{\firstfoot}[1]{% + \renewcommand*{\@firstfoot}{\noindent#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Ausgabe des Briefbogens} +% +% Die Ausgabe selbst erfolgt derzeit über die |\opening|-Anweisung, die in +% einem späteren Abschnitt implementiert ist. +% +% \begin{macro}{\move@topt} +% \changes{v2.8n}{2001/09/07}{Neu} +% Für die folgenden Aktionen wird ein Makro benötigt, mit dem man vertikal von +% der relativen Seitenposition zur relativen Papierposition gelangen kann. +% \begin{macrocode} +\newcommand*{\move@topt}{% + \null\vskip -1in\vskip -\topmargin% + \vskip -\headheight\vskip -\headsep% + \vskip -\topskip% + \ignorespaces% +} +% \end{macrocode} +% \begin{macro}{\move@frompt} +% \changes{v2.8n}{2001/09/07}{Neu} +% Natürlich wird auch ein Makro benötigt, um vertikal von einer relativen +% Papierposition wieder auf die relative Seitenposition zurück zu gelangen. +% \begin{macrocode} +\newcommand*{\move@frompt}{% + \vskip 1in\vskip \topmargin% + \vskip \headheight\vskip \headsep% + \vskip \topskip% + \vskip -\baselineskip% + \ignorespaces% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\move@topl} +% \changes{v2.8n}{2001/09/07}{Neu} +% Für die folgenden Aktionen wird außerdem ein Makro benötigt, mit dem man +% horizontal von der relativen Seitenposition zur relativen Papierposition +% gelangen kann. +% \begin{macrocode} +\newcommand*{\move@topl}{% + \null\hskip -1in% + \ifodd\value{page}\hskip -\oddsidemargin\else\hskip -\evensidemargin\fi + \ignorespaces% +} +% \end{macrocode} +% \begin{macro}{\move@frompl} +% \changes{v2.8n}{2001/09/07}{Neu} +% Natürlich wird auch ein Makro benötigt, um horizontal von einer relativen +% Papierposition wieder auf die relative Seitenposition zurück zu gelangen. +% \begin{macrocode} +\newcommand*{\move@frompl}{% + \hskip 1in% + \ifodd\value{page}\hskip \oddsidemargin\else\hskip \evensidemargin\fi% + \ignorespaces% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\vb@t@z} +% \changes{v2.8n}{2001/09/07}{Neu} +% \changes{v2.95}{2006/03/23}{Absatzformatierung mit \cs{setparsizes}} +% Ausserdem wird ein vertikales Äquivalent zu |\rlap| benötigt. +% \begin{macrocode} +\newcommand*{\vb@t@z}[1]{{% + \setbox0\vbox to\z@{#1\vss}% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \setlength{\baselineskip}{\z@}% + \setlength{\@tempdima}{\ht0}\addtolength{\@tempdima}{\dp0}% + \box0\vskip-\@tempdima% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@foldmarks} +% Für die Faltmarken müssen nicht nur Abstände definiert werden, es wird auch +% ein Befehl benötigt, um die Faltmarken zu setzen. +% \begin{macro}{\@foldmark} +% \changes{v2.8n}{2001/09/07}{Neu} +% \changes{v2.95}{2006/06/06}{\cs{vskip} in \cs{vb@t@z} verschoben, damit es +% vom Satzspiegel unabhängig wird} +% Das geht am einfachsten, wenn wir auch einen Befehl haben, mit dem man eine +% einzelne Faltmarke relativ zur aktuellen Position setzen kann. Dies +% geschieht mit Hilfe von |\rlap|, damit die horizontale Position unverändert +% bleibt. Als Parameter werden der vertikale Abstand zur aktuellen Position +% und die Länder der Marke übergeben. +% \begin{macrocode} +\newcommand*{\@foldmark}[2]{% + \vb@t@z{\vskip #1% + \rlap{\move@topl\hskip\useplength{foldmarkhpos}% + \rule{#2}{.2pt}}}% + \ignorespaces% +} +\newcommand*{\@foldmarks}{% + \if@fold% + \typeout{Foldmarks: yes}% + \move@topt + \@foldmark{\useplength{tfoldmarkvpos}}{2mm}% + \@foldmark{.5\paperheight}{4mm}% + \@foldmark{\useplength{bfoldmarkvpos}}{2mm}% + \move@frompt + \else + \typeout{Foldmarks: no}% + \fi% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@savevbox} +% \changes{v2.8n}{2001/09/07}{Neu} +% \changes{v2.8q}{2001/10/30}{zusätzlich ein optionales Argument} +% \begin{macro}{\if@savevbox@warning} +% \begin{macro}{\@savevbox@warningtrue} +% \begin{macro}{\@savevbox@warningfalse} +% \changes{v2.8q}{2001/10/30}{Neu} +% Wenn eine der vertikalen Boxen in \cs{opening} zu einer \texttt{overbox +% \string\vbox\space} Meldung führt, weiss letztlich niemand, welche Box dafür +% verantwortlich war. Deshalb definieren wir hier ein Makro, das ggf. eine +% Meldung ausgibt, die erklärt, welches Element die Ursache war und was man +% tun kann. Das erste Argument ist dabei die Sollhöhe der Box, das zweite +% Argument ist der Boxinhalt, das dritte Argument is der Name des Elements, +% das zu hoch ist, das vierte der Name der Elementhöhe und das fünfte +% schließlich der Befehl, mit dem das Element vom Anwender definiert werden +% kann. Das optionale Argument wird nur bei der Ausgabe mit ausgegeben, findet +% jedoch bei der Berechnung keine Berücksichtigung. +% \begin{macrocode} +\newif\if@savevbox@warning\@savevbox@warningtrue +\newcommand{\@savevbox}[6][]{% + \begingroup% + \vbox to #2{#1#3}% + \if@savevbox@warning\@savevbox@warningfalse% + \setbox0\vbox{#3}% + \setlength{\@tempdima}{#2}% + \setlength{\@tempdimb}{\ht0}\addtolength{\@tempdimb}{\dp0}% + \ifdim \@tempdimb>\@tempdima% + \addtolength{\@tempdimb}{-\@tempdima}% + \ClassWarning{% + scrlttr2% + }{% + #4 is \the\@tempdimb\space too high.\MessageBreak + You have to change `\string#5'\MessageBreak + or you have to define a smaller\MessageBreak + #4 using \string#6.\MessageBreak + Because of this too high #4\MessageBreak + you've got an overfull \string\vbox\space message% + }% + \fi% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@firstheadfootfield} +% \changes{v2.8n}{2001/09/08}{Neu} +% \changes{v2.8q}{2001/10/30}{\cs{parfillskip} lokal auf 0 gesetzt} +% \changes{v2.8q}{2001/10/30}{Fuß explizit in eine Box gesetzt} +% \changes{v2.9l}{2003/01/23}{Positionierung verbessert} +% Ab Version 2.8n werden Kopf und Fuß der ersten Seite nicht mehr per +% Seitenstil \texttt{firstpage} gesetzt, sondern mit einem speziellen +% Feld. Dabei wird auch beachtet, dass dieses Feld im Kopf eine bestimmte aber +% beschränkte Höhe hat. Diese Höhe ist unabhängig von der normalen Kopfhöhe +% und richtet sich stattdessen nach der Position des Adressfeldes. +% \begin{macrocode} +\newcommand*{\@firstheadfootfield}{% + \typeout{Head of first page}% + \move@topt\vskip\useplength{firstheadvpos}% + \vb@t@z{% + \rlap{\move@topl + \setlength\@tempskipa{.5\paperwidth}% + \addtolengthplength[-.5]{\@tempskipa}{firstheadwidth}% + \hskip\@tempskipa + \vbox{\hsize\useplength{firstheadwidth}% + \setlength{\@tempskipa}{\useplength{toaddrvpos}}% + \addtolengthplength[-1]{\@tempskipa}{firstheadvpos}% + \addtolength{\@tempskipa}{-\baselineskip}% +% \end{macrocode} +% Da sich einige -- beispielsweise |briefkopf.sty| -- darauf verlassen, dass +% |\textwidth| die Breite des Briefkopfes ist, wird diese Länge lokal +% entsprechend gesetzt. Außerdem wird dafür gesorgt, dass |\parfillskip| hier +% nicht berücksichtigt wird. +% \begin{macrocode} + \setlength{\textwidth}{\useplength{firstheadwidth}}% + \setlength{\parfillskip}{\z@ \@plus 1fil}% + \@savevbox{\@tempskipa}{\@firsthead\vskip \z@ \@plus .00001fil}% + {head of first page}{firstheadvpos}{\firsthead}% + }% + }% + }% + \vskip-\useplength{firstheadvpos}\move@frompt + \typeout{Foot of first page}% + \move@topt + \vb@t@z{% + \rlap{\move@topl + \setlength\@tempskipa{.5\paperwidth}% + \addtolengthplength[-.5]{\@tempskipa}{firstfootwidth}% + \hskip\@tempskipa% + \vbox{\hsize\useplength{firstfootwidth}% + \vskip\useplength{firstfootvpos}% +% \end{macrocode} +% Da sich einige -- beispielsweise |briefkopf.sty| -- darauf verlassen, dass +% |\textwidth| die Breite des Brieffußes ist, wird diese Länge lokal +% entsprechend gesetzt. Außerdem wird dafür gesorgt, dass |\parfillskip| hier +% nicht berücksichtigt wird. +% \begin{macrocode} + \setlength{\textwidth}{\useplength{firstfootwidth}}% + \setlength{\parfillskip}{\z@ \@plus 1fil}% + \vbox{\hsize\useplength{firstfootwidth}\@firstfoot}% + }% + }% + }% + \move@frompt% + {% + \setlength{\@tempdima}{1in}\addtolength{\@tempdima}{\topmargin}% + \addtolength{\@tempdima}{\headheight}% + \addtolength{\@tempdima}{\headsep}% + \addtolength{\@tempdima}{\textheight}% + \addtolength{\@tempdima}{\footskip}% + \addtolengthplength[-1]{\@tempdima}{firstfootvpos}% + \ifdim\@tempdima>\z@\enlargethispage{-\@tempdima}% + \else\if@enlargefp\enlargethispage{-\@tempdima}\fi\fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addrfield} +% \changes{v2.8q}{2002/04/01}{\cs{parfillskip} lokal geändert} +% \changes{v2.8q}{2002/06/03}{Sonderbehandlung für Adressfeld rechts} +% \changes{v2.9o}{2003/02/20}{\cs{noindent} eingefügt bei +% \texttt{specialmail}} +% Dasselbe gilt auch für das Adressfeld für Fensterumschläge. Die +% Rücksendeadresse und die Briefart wird dabei unterstrichen. +% \begin{macrocode} +\newcommand*{\@addrfield}{% + \if@afield + \begingroup% + \if@baddr + \ifkomavarempty{backaddress}{% + \let\@tempa\@empty\let\@tempb\@empty + }{% + \def\@tempa{backaddress}\def\@tempb{,\space}% + }% + \else + \let\@tempa\@empty\let\@tempb\@empty + \fi + \ifkomavarempty{specialmail}{}{% + \edef\@tempa{\@tempa\@tempb specialmail}\def\@tempb{,\space}% + }% + \typeout{Address (\@tempa\@tempb addressee)}% + \endgroup% + \move@topt\vskip\useplength{toaddrvpos}% + \vb@t@z{{\setlength{\parfillskip}{\z@ \@plus 1fil}% + \rlap{\move@topl + \setlengthtoplength{\@tempskipa}{toaddrhpos}% + \ifdim \@tempskipa<\z@ + \addtolength{\@tempskipa}{\paperwidth}% + \addtolengthplength[-]{\@tempskipa}{toaddrwidth}% + \fi + \hskip\@tempskipa + \@addtoplength{toaddrheight}{\useplength{backaddrheight}}% + \@savevbox{\useplength{toaddrheight}}{\hsize\useplength{toaddrwidth}% + \@savevbox[\vss]{\useplength{backaddrheight}}{% + \hsize\useplength{toaddrwidth}% + \if@baddr + \ifkomavarempty{backaddress}{}{{% + \noindent% + \def\\{\usekomavar{backaddressseparator}\@ogobble}% + \underline{\scriptsize\usekomafont{backaddress}% + \usekomavar{backaddress}}}}% + \fi + }{backaddress}{backaddrheight}{\setkomavar}% + \ifkomavarempty{specialmail}{}{% + \vbox{\hsize\useplength{toaddrwidth}% + \noindent\hspace*{\useplength{specialmailindent}}% + \underline{\usekomavar{specialmail}}% + \hspace*{\useplength{specialmailrightindent}}}% + }% + \vfil% + \noindent\hskip\useplength{toaddrindent}% + \setlength{\@tempdima}{\useplength{toaddrwidth}}% + \addtolengthplength[-2]{\@tempdima}{toaddrindent}% + \vbox{\hsize\@tempdima% + \noindent\usekomavar{toname}\\\usekomavar{toaddress}}% + \vfil\null}% + {address field}{toaddrheight}% + {\begin{letter} or you\MessageBreak + have to define a smaller special purpose using\MessageBreak + \string\specialmail}% + }}}% + \vskip-\useplength{toaddrvpos}\move@frompt + \else + \typeout{Address: No}% + \fi + } +% \end{macrocode} +% \begin{macro}{\@ogobble} +% \changes{v2.8q}{2002/01/22}{Neu} +% In obiger Definition wird das Makro \cs{@ogobble} verwendet, um +% einen optionalen Parameter zu vernichten, falls dieser existiert. +% \begin{macrocode} +\newcommand*{\@ogobble}[1][]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@locfield} +% \changes{v2.8o}{2001/09/17}{\cs{noindent} eingefügt} +% \changes{v2.8q}{2002/02/07}{\cs{noindent} nach dem Logo} +% \changes{v2.8q}{2002/07/23}{Berechnung der Breite hierher verschoben} +% \changes{v2.8q}{2002/06/03}{Sonderbehandlung für Adressfeld rechts} +% Das "`locfield"' wird unabhängig von der Adresse gesetzt. +% \begin{macrocode} +\newcommand*{\@locfield}{% + \ifdim \useplength{locwidth}=\z@% + \@setplength{locwidth}{\paperwidth}% + \ifdim \useplength{toaddrhpos}>\z@ + \@addtoplength[-2]{locwidth}{\useplength{toaddrhpos}}% + \else + \@addtoplength[2]{locwidth}{\useplength{toaddrhpos}}% + \fi + \@addtoplength[-1]{locwidth}{\useplength{toaddrwidth}}% + \if@bigloc% + \@setplength[.66667]{locwidth}{\useplength{locwidth}}% + \else% + \@setplength[.5]{locwidth}{\useplength{locwidth}}% + \fi% + \fi% + \ifnum 1=\@alignfrom + \if@logo + \ifkomavarempty{location}{% + \setkomavar{location}{\null}}{}% + \fi + \fi + \ifkomavarempty{location}{% + \typeout{Location field: empty}% + }{% + \typeout{Location field: yes}% + \move@topt\vskip\useplength{toaddrvpos}% + \vb@t@z{\rlap{% + \move@topl + \setlengthtoplength[-]{\@tempskipa}{toaddrhpos}% + \ifdim \@tempskipa<\z@ + \addtolength{\@tempskipa}{\paperwidth}% + \else + \addtolengthplength{\@tempskipa}{locwidth}% + \fi + \hskip\@tempskipa + \llap{% + \@savevbox{\useplength{toaddrheight}}{% + \noindent\hsize\useplength{locwidth}% + \ifnum 1=\@alignfrom + \if@logo + \ifkomavarempty{fromlogo}{}{% + {\raggedleft\noindent\usekomavar{fromlogo}\\ + \vskip\parskip}\noindent}% + \fi + \fi + \usekomavar{location}\vskip \z@ \@plus .00001fil}% + {location field}{toaddrheight}{\setkomavar}% + }}% + }% + \vskip-\useplength{toaddrvpos}\move@frompt + }% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@datefield} +% \changes{v2.8q}{2002/01/14}{Schalter \cs{if@tempwa} wird bereits hier auf +% \texttt{true} gesetzt} +% Je nachdem, welche Felder definiert sind, muss eine geschäftsmäßiger +% Standardbrief oder ein eher persönliches Aussehen gewählt werden. +% \begin{macro}{\@set@reffield} +% Einzelne Felder werden mit Hilfe dieses Makros gesetzt. Als Parameter wird +% der Name des Feldes übergeben. Es wird dann davon ausgegangen, dass der +% Name des Feldes in der jeweiligen Sprache im Makro +% \verb|\|\texttt{\emph{\#1}}\verb|name| und der Wert des Feldes in +% \verb|\var|\texttt{\emph{\#1}} zu finden ist. +% \begin{macrocode} +\newcommand*{\@set@reffield}[1]{% + \ifkomavarempty{#1}{}{% + \settowidth{\@tempdima}{\strut\usekomavar{#1}}% + \setbox0\hbox{\strut\scriptsize\sffamily\usekomavar*{#1}}% + \ifdim \@tempdima<\wd0\setlength{\@tempdima}{\wd0}\fi + \if@tempswa\enskip\hfill\fi + \parbox[t]{\@tempdima}{\noindent\raggedright + \strut\box0\\\strut\usekomavar{#1}}% + \@tempswatrue + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@set@reffields} +% \changes{v2.8q}{2002/01/14}{Neu} +% Dieses Makro enthält alle Aufrufe von \cs{@set@reffield}, die durchzuführen +% sind. Das Makro kann mit Hilfe von \cs{addtoreffields} erweitert werden. +% \begin{macrocode} +\newcommand*{\@set@reffields}{}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\addtoreffields} +% Dieses Makro erwartet als obligatorisches Argument den Namen einer +% KOMA-Script Variable. Der Befehl arbeitet lokal zur aktuellen Umgebung. +% \begin{macrocode} +\newcommand*{\addtoreffields}[1]{% + \l@addto@macro{\@set@reffields}{\@set@reffield{#1}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\removereffields} +% \changes{v2.8q}{2002/01/14}{Neu} +% Es gibt auch einen Befehl, um alle Felder aus der Geschäftszeile zu +% entfernen. +% \begin{macrocode} +\newcommand*{\removereffields}{% + \renewcommand*{\@set@reffields}{}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\defaultreffields} +% \changes{v2.8q}{2002/01/14}{Neu} +% Ebenso ein Befehl, um die üblichen Felder zu setzen. +% \begin{macrocode} +\newcommand*{\defaultreffields}{% + \removereffields + \addtoreffields{yourref}% + \addtoreffields{yourmail}% + \addtoreffields{myref}% + \addtoreffields{customer}% + \addtoreffields{invoice}% +} +% \end{macrocode} +% Genau diesen Befehl rufen wir auch gleich auf: +% \begin{macrocode} +\defaultreffields +% \end{macrocode} +% \end{macro} +% +% \changes{v2.3e}{1996/05/31}{Abstand zwischen Ort und Datum eingefügt} +% \changes{v2.8o}{2001/09/18}{für den Brieftyp \texttt{KOMAold} anschließend +% einen zusätzlichen vertikalen Abstand eingefügt} +% \changes{v2.8q}{2001/11/13}{\cs{rlap} eingefügt} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/01/14}{Leertests entfernt, da in \cs{@set@reffield} +% bereits enthalten} +% \changes{v2.9l}{2003/01/28}{Berechnung von \texttt{refwidth} an die +% Dokumentation angepasst} +% \changes{v2.9l}{2003/01/28}{Berechnung von \texttt{refhpos} hinzugefügt} +% \changes{v2.95}{2006/03/23}{Absatzeinzug mit \cs{setparsizes} abschalten} +% \begin{macrocode} +\newcommand*{\@datefield}{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \ifdim\useplength{refwidth}=\z@ + \if@refwide + \@setplength{refwidth}{\paperwidth}% + \ifdim \useplength{toaddrhpos}>\z@ + \@setplength{refhpos}{\useplength{toaddrhpos}}% + \else + \@setplength[-]{refhpos}{\useplength{toaddrhpos}}% + \fi + \@addtoplength[-2]{refwidth}{\useplength{refhpos}}% + \else + \@setplength{refwidth}{\textwidth}% + \@setplength{refhpos}{\oddsidemargin}% + \@addtoplength{refhpos}{1in}% + \fi + \else\ifdim\useplength{refhpos}=\z@ + \begingroup +% \end{macrocode} +% Wir bestimmen zunächst, um wieviel die Geschäftszeile schmaler ist als der +% Textbereich. +% \begin{macrocode} + \setlength\@tempdima{\textwidth}% + \addtolengthplength[-]{\@tempdima}{refwidth}% +% \end{macrocode} +% Dann wird bestimmt, wie groß der linke Rand tatsächlich ist. +% \begin{macrocode} + \setlength\@tempdimb{\oddsidemargin}% + \addtolength\@tempdimb{1in}% +% \end{macrocode} +% Ebenso wird bestimmt, wie groß der linke und rechte Rand zusammen sind. +% \begin{macrocode} + \setlength{\@tempdimc}{\paperwidth}% + \addtolength{\@tempdimc}{-\textwidth}% +% \end{macrocode} +% Jetzt wird aus dem Gesamtrand der Geschäftszeile der linke Rand der +% Geschäftszeile so bestimmt, dass das Randverhältnis dabei unverändert +% bleibt. Dabei erlauben wir uns eine gewisse Rechenungenauigkeit beim +% Verhältnis. +% \begin{macrocode} + \divide\@tempdimb by 32768\relax + \divide\@tempdimc by 32768\relax + \ifdim\@tempdimc=\z@\else + \multiply\@tempdima by\@tempdimb + \divide\@tempdima by\@tempdimc + \fi + \edef\@tempa{\noexpand\endgroup + \noexpand\@setplength{refhpos}{\the\@tempdima}}% + \@tempa + \fi\fi + \@tempswafalse + \move@topt\vskip\useplength{refvpos}% +% \end{macrocode} +% Jetzt erfolgt noch die Absatzeinzugkorrektur. Danach kommt die eigentliche +% Arbeit. +% \begin{macrocode} + \rlap{\noindent\move@topl\hskip\useplength{refhpos}% + \vbox{\hsize\useplength{refwidth}% + \noindent\@set@reffields + \ifkomavarempty{date}{% + \if@tempswa + \typeout{Reference line(s): with fields but without date}% + \else + \typeout{Reference line(s): no}% + \aftergroup\aftergroup\aftergroup\@tempswatrue + \fi + }{% + \if@tempswa + \typeout{Reference line(s): with fields and date}% + \settowidth{\@tempdima}{\strut\usekomavar{date}}% + \setbox0\hbox{\scriptsize\sffamily\usekomavar*{date}}% + \ifdim \@tempdima<\wd0\setlength{\@tempdima}{\wd0}\fi + \enskip\hfill + \parbox[t]{\@tempdima}{\noindent\raggedright% + \strut\box0\\\strut\usekomavar{date}}% + \else + \typeout{Reference line: only place and date}% + \enskip\hfill + \ifkomavarempty{place}{}{% + \usekomavar{place}\usekomavar{placeseparator}}% + \usekomavar{date}% + \@tempswatrue + \fi + }% + }% + }% + \if@tempswa\vskip-\baselineskip\fi + \vskip\useplength{refaftervskip}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@maketitle} +% \changes{v2.3b}{1996/01/14}{Verwendung von \cs{sectfont} für den +% \cs{title}} +% \changes{v2.8p}{2001/09/22}{\cs{titlefont} an Stelle von \cs{sectfont}} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.9t}{2004/09/16}{\cs{par} in Größe und Schrift des Titels} +% \changes{v2.95}{2006/03/22}{\cs{usekomafont} and Stelle fon \cs{titlefont}} +% \begin{macro}{\@subjfield} +% \changes{v2.8q}{2001/10/19}{\cs{centerline} durch \cs{centering} +% ersetzt} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/01/31}{wird mit hängendem Einzug gesetzt} +% \changes{v2.95}{2006/03/23}{Absatzeinzug mit cs{setparsizes} einstellen} +% Der eigentliche Titel wir mit |\@maketitle| gesetzt. Dies sollte jedoch +% ebenso wie beim Betreff (|\@subjfield|) \emph{nicht} manuell geschehen. +% \begin{macrocode} +\newcommand*{\@maketitle}{% + \ifkomavarempty{title}{% + \typeout{Title: no}% + }{% + \typeout{Title: yes}% + {\setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \centering\LARGE\usekomafont{title}\usekomavar{title}\par}% + \vskip\baselineskip% + }% +} +\newcommand*{\@subjfield}{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \ifkomavarempty{subject}{% + \typeout{Subject: no}% + }{% + \if@subjafter% + \typeout{Subject: after opening}% + \centering% + \else% + \typeout{Subject: before opening}% + \noindent% + \fi% + {\usekomafont{subject}\if@subj\@hangfrom{\usekomavar*{subject}}\fi% + {\usekomavar{subject}}\par}\vskip2\baselineskip% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Anweisungen für das Briefpapier} +% +% Für das Briefpapier gibt es etwas weniger Anweisungen. Teilweise werden hier +% auch die Anweisungen für den Briefbogen mit verwendet. +% +% \subsubsection{Kopf des Briefpapiers} +% +% Der Kopf des Briefpapiers wird wieder ganz normal über den Seitenstil +% festgelegt. Allerdings kann er entsprechende dem Briefbogen manuell +% definiert werden. +% +% \begin{macro}{\nexthead} +% \begin{macro}{\@nexthead} +% Die Voreinstellung ist ebenfalls von Optionen abhängig. +% \begin{macrocode} +\newcommand*{\@nexthead}{% + \rlap{\parbox[c]{\textwidth}{\raggedright\strut + \ifnum\@pageat=0\pagemark\else\leftmark\fi\strut}}% + \parbox[c]{\textwidth}{% + \centering\strut + \ifcase\@pageat + \rightmark + \or + \pagemark + \or + \rightmark + \fi\strut}% + \llap{\parbox[c]{\textwidth}{\raggedleft\strut + \ifcase\@pageat + \leftmark + \or + \rightmark + \or + \pagemark + \else + \rightmark + \fi\strut}}% +}% +% \end{macrocode} +% \end{macro} +% Die Voreinstellung ist wiederum mit einer einfachen Benutzeranweisung +% änderbar. +% \begin{macrocode} +\newcommand{\nexthead}[1]{% + \renewcommand*{\@nexthead}{\noindent#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Fuß des Briefpapiers} +% +% \begin{macro}{\nextfoot} +% \begin{macro}{\@nextfoot} +% Je nach Optioneneinstellung kann sich die Seitenmarke in der Voreinstellung +% auch im Fuß befinden. +% \begin{macrocode} +\newcommand*{\@nextfoot}{% + \ifnum\@pageat>2 + \parbox[c]{\textwidth}{% + \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi + \strut\pagemark% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% Auch diese Einstellung ist per Benutzeranweisung leicht zu ändern. +% \begin{macrocode} +\newcommand{\nextfoot}[1]{% + \renewcommand*{\@nextfoot}{\noindent#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Die Brief-Umgebung} +% +% \begin{environment}{letter} +% \changes{v2.8q}{2002/01/16}{optionales Argument hinzugefügt} +% \changes{v2.8q}{2002/01/16}{Fußnotenzähler wird zurückgesetzt} +% \changes{v2.9d}{2002/08/12}{Fußnotenzähler wird korrekt zurückgesetzt} +% Diese Umgebung ist etwas anders definiert, als normalerweise von +% \LaTeX gewohnt. Mit ihr können innerhalb eines Dokuments beliebig +% viele Briefe erzeugt werden. Eine der Abweichungen von der +% Standardklasse besteht darin, dass als optionales Argument Optionen +% gesetzt werden können. +% \begin{macro}{\stopletter} +% \begin{macro}{\@processto} +% \changes{v2.9r}{2004/06/16}{robust gegen leeren Empfänger} +% \begin{macro}{\@xproc} +% Die Adresse, die als Argument der Briefumgebung übergeben wird, muss in Name +% und Adresse zerlegt werden. +% \begin{macrocode} +\newenvironment{letter}[2][]{% +% \end{macrocode} +% Als erstes wird eine neue Seite begonnen. Dies kann ggf. auch eine neue +% rechte Seite sein. Danach werden alle relevanten Zähler und Strafpunkte +% zurückgesetzt und der obligatorische Parameter ausgewertet. +% \begin{macrocode} + \newpage + \if@twoside\ifodd\c@page\else\thispagestyle{empty}\null\newpage\fi\fi + \setcounter{page}{\@ne}% + \setcounter{footnote}{0}% + \interlinepenalty=200\@processto{#2}% +% \end{macrocode} +% Dann werden ggf. die übergebenen Optionen ausgeführt. +% \begin{macrocode} + \KOMAoptions{#1}% +% \end{macrocode} +% Zum Schluss werden die per \cs{AtBeginLetter} angegeben Anweisungen +% ausgeführt. +% \begin{macrocode} + \@beginletterhook +}{% + \stopletter\@@par\pagebreak\@@par% +} +\newcommand*{\stopletter}{} +\newcommand{\@processto}[1]{% + \ifx\relax#1\relax\else + \expandafter\@xproc#1\\\@nil\ifkomavarempty{toaddress}{}{% + \expandafter\@xproc#1\@nil}% + \fi +} +\newcommand*{\@xproc}{} +\long\def\@xproc#1\\#2\@nil{% + \setkomavar{toname}{#1}\setkomavar{toaddress}{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{environment} +% +% \begin{macro}{\AtBeginLetter} +% \changes{v2.8n}{2001/09/08}{Neu} +% \begin{macro}{\@beginletterhook} +% \changes{v2.8n}{2001/09/08}{Neu} +% Wie oben zu sehen, wurde in den Anfang der Briefumgebung ein Haken +% eingefügt. Dieser wird auch tatsächlich intern genutzt. Er funktioniert +% prinzipiell wie der |\AtBeginDocument|-Haken. Zunächst macht der Haken rein +% gar nichts. +% \begin{macrocode} +\newcommand{\AtBeginLetter}{\g@addto@macro\@beginletterhook} +\newcommand{\@beginletterhook}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\AtEndLetter} +% \changes{v2.95}{2006/03/22}{Neu} +% Analog zu |\AtBeginLetter| gibt es auch ein |\AtEndLetter|. Als Haken wird +% hierbei |\stopletter| verwendet. +% \begin{macrocode} +\newcommand{\AtEndLetter}{\g@addto@macro\stopletter} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\stopbreaks} +% \begin{macro}{\startbreaks} +% \begin{macro}{\@nobreakvspace} +% \begin{macro}{\@nobreakvspacex} +% \begin{macro}{\@nobreakcr} +% Innerhalb von Briefen wird der Umbruch etwas anders gehandhabt. +% Dadurch soll der Brieftext besser positioniert werden. +% \begin{macrocode} +\newcommand*{\stopbreaks}{\interlinepenalty \@M + \def\par{\@@par\nobreak}\let\\=\@nobreakcr + \let\vspace\@nobreakvspace} +\newcommand*{\@nobreakvspace}{% + \@ifstar{\@nobreakvspacex}{\@nobreakvspacex}} +\newcommand*{\@nobreakvspacex}[1]{\ifvmode\nobreak\vskip #1\relax\else + \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi} +\newcommand*{\@nobreakcr}{% + \vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}} +\newcommand*{\startbreaks}{\let\\=\@normalcr + \interlinepenalty 200\def\par{\@@par\penalty 200}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\opening} +% \changes{v2.8n}{2001/09/08}{Komplett überarbeitet} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/03/25}{\cs{@PapersizeWarning}} +% \changes{v2.95}{2003/03/23}{Absatzformatierung mit \cs{setparsizes} +% einstellen} +% Denn beim Eröffnungsgruß mit |\opening| wird neben sämtlichen Feldern auch +% der Titel und der Betreff gesetzt. +% \begin{macrocode} +\newcommand{\opening}[1]{% + \@PapersizeWarning + \@gen@firsthead + \@mkboth{\scr@fromname@var}{\scr@subject@var}% + \thispagestyle{empty}\noindent + \@foldmarks\@firstheadfootfield\@addrfield\@locfield\@datefield + \@maketitle + \if@subjafter\else\@subjfield\fi + {\setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative#1\par}% + {\setlength{\@tempdima}{\baselineskip}% + \addtolength{\@tempdima}{-\parskip}% + \ifdim \@tempdima>\z@\vskip\@tempdima\fi}% + \if@subjafter\@subjfield\fi% + \@afterindentfalse\@afterheading +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closing} +% \changes{v2.2b}{1995/02/16}{{\cmd\fromsig} wird nicht mehr auf \cs{empty} +% getestet sondern direkt eingesetzt} +% \changes{v2.3b}{1996/01/14}{Abstand zwischen Schlussgruß und Signatur +% erhöht} +% \changes{v2.5d}{2000/06/10}{Abstand zwischen Schlussgruß und Signatur +% variabel} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/02/05}{nicht mehr \cs{long}} +% \changes{v2.8q}{2002/02/05}{darf \texttt{\cmd{\\}[\dots]} enthalten} +% \changes{v2.95}{2003/03/23}{Absatzformatierung mit \cs{setparsizes} +% einstellen} +% Außer dem Eröffnungsgruß mit |\opening| gibt es natürlich auch einen +% Schlussgruß mit |\closing|, bei dem außerdem die Unterschrift u.\,ä. gesetzt +% wird. +% \begin{macro}{\presig@skip} +% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen +% Schlussgruß und Signatur beinhaltet} +% \changes{v2.8q}{2001/10/09}{Ersetzt durch Pseudo-Länge sigbeforevskip} +% \end{macro} +% \begin{macro}{\setpresigskip} +% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen +% Schlussgruß und Signatur setzt} +% \changes{v2.8q}{2001/10/09}{Mit Hilfe der neuen Pseudo-Längen definiert} +% Das Makro |\presig@skip| beinhaltet dabei den Abstand zwischen Schlussgruß +% und Signatur. Da der Wert über ein Benutzerinterface per |\setpresigskip| +% gesetzt wird, muss hier kein kostbares Längenregister (skip oder dim) +% verschwendet werden, sondern ein Makro reicht aus. In |\setpresigskip| wird +% allerdings noch sichergestellt, dass die Fehlermeldung bei falschem +% Parameter möglichst nicht erst bei Verwendung auftritt. +% \begin{macrocode} +%</letter> +%<lco&KOMAold>\def\setpresigskip{\@setplength{sigbeforevskip}} +%<*letter> +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@xtrimtempa} +% \changes{v2.8q}{2002/02/05}{Neu (intern)} +% \begin{macro}{\@@xtrimtempa} +% \changes{v2.8q}{2002/02/05}{Neu (intern)} +% Die beiden internen Macros werden benötigt, um beim Zerlegen eines mit +% \texttt{\cmd{\\}[\cs{dots}]} zusammengesetzten Arguments das optionale +% Argument in eckigen Klammern abzutrennen. Das Ergebnis steht anschließend in +% \cs{@tempa}. +% \begin{macrocode} +\newcommand*{\@xtrimtempa}{% + \@ifnextchar [{\@@xtrimtempa}{\@@xtrimtempa[]}} +\newcommand*{\@@xtrimtempa}{} +\def\@@xtrimtempa[#1]#2\@nil{\def\@tempa{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\@tempdimaismaxwidthof} +% \changes{v2.8q}{2002/02/05}{Neu (intern)} +% Das Makro zerlegt ein mit \texttt{\cmd{\\}[\cs{dots}]} zusammengesetzten +% Arguments und merkt in \cs{@tempdima} die Länge des längsten +% Elements. \cs{@tempdima} enthält beim Aufruf die minimale Länge. +% \begin{macrocode} +\newcommand*{\@tempdimaismaxwidthof}{} +\def\@tempdimaismaxwidthof#1\\#2\@nil{% + \settowidth{\@tempdimb}{\strut\ignorespaces#1}% + \ifdim\@tempdima<\@tempdimb\setlength{\@tempdima}{\@tempdimb}\fi + \def\@tempa{#2}\ifx\@tempa\@empty + \let\@tempb\relax + \else + \expandafter\@xtrimtempa\@tempa\@nil + \def\@tempb{\expandafter\@tempdimaismaxwidthof\@tempa\@nil}% + \fi + \@tempb +} +% \end{macrocode} +% \end{macro} +% Jetzt endlich zum eigentichen Befehl. +% \changes{v2.9r}{2004/01/28}{Längenbegrenzung auf \cs{hsize}} +% \changes{v2.9r}{2004/01/28}{das Argument darf leer sein} +% \begin{macrocode} +\newcommand*{\closing}[1]{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative\nobreak\par% + \nobreak\vskip\baselineskip% + \stopbreaks\noindent% + \setlength{\@tempdima}{0pt}% + \expandafter\@tempdimaismaxwidthof\scr@signature@var\\\@nil + \expandafter\@tempdimaismaxwidthof\strut\ignorespaces#1\\\@nil + \setlength{\@tempdimb}{\hsize}% + \addtolength{\@tempdimb}{-\useplength{sigindent}}% + \ifdim\@tempdima>\@tempdimb\setlength{\@tempdima}{\@tempdimb}\fi% + \hspace{\useplength{sigindent}}% + \parbox{\@tempdima}{\raggedsignature\strut\ignorespaces% + #1\strut\\[\useplength{sigbeforevskip}] + \strut\usekomavar{signature}\strut}}\par + \nobreak\vskip\baselineskip% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps} +% \changes{v2.8n}{2001/09/08}{Komplett überarbeitet} +% Ebenfalls möglich ist ein Postscriptum. Dieser Befehl erwartet das +% Postscriptum nicht als Argument, sondern schaltet zum Nachtext um. +% \begin{macrocode} +\newcommand\ps{\par% + \ifdim\parskip=\z@% + \vskip\baselineskip% + \fi\startbreaks\noindent\ignorespaces% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cc} +% Darüber hinaus gibt es noch einen Verteiler. Dieser wird sauber formatiert. +% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt} +% \changes{v2.8n}{2001/09/08}{Komplett "uberarbeitet} +% \changes{v2.9o}{2003/04/22}{\cs{parfillskip} angepasst} +% \changes{v2.9q}{2004/04/26}{\cs{parfillskip} auf \texttt{1em plus 1fil} +% geändert} +% \changes{v2.9r}{2004/05/25}{\cs{parfillskip} auf \texttt{\cs{z@} plus +% 1fil} geändert} +% \begin{macrocode} +\newcommand*{\cc}[1]{\par% + \ifdim\parskip=\z@% + \vskip\baselineskip% + \fi\noindent% + \begingroup + \parbox[t]{\textwidth}{% + \ifkomavarempty{ccseparator}{}{% + \@hangfrom{% + \strut\usekomavar*{ccseparator}\usekomavar{ccseparator}}% + }% + \ignorespaces #1\strut}% + \setlength{\parfillskip}{\z@ \@plus 1fil}\par + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\encl} +% Auch Anlagen werden ordentlich gesetzt. +% \changes{v2.4a}{1997/06/06}{der Doppelpunkt bei den Anlagen wird nur noch +% gesetzt, wenn \cs{enclname} nicht leer ist} +% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt} +% \changes{v2.8n}{2001/09/08}{Komplett überarbeiten} +% \changes{v2.8q}{2002/01/31}{Fehlendes \% ergänzt} +% \changes{v2.9o}{2003/04/22}{\cs{parfillskip} angepasst} +% \changes{v2.9q}{2004/04/26}{\cs{parfillskip} auf \texttt{1em plus 1fil} +% geändert} +% \changes{v2.9r}{2004/05/25}{\cs{parfillskip} auf \texttt{\cs{z@} plus +% 1fil} geändert} +% \begin{macrocode} +\newcommand*{\encl}[1]{\par% + \ifdim\parskip=\z@% + \vskip\baselineskip% + \fi\noindent% + \begingroup + \parbox[t]{\textwidth}{% + \ifkomavarempty*{enclseparator}{}{% + \@hangfrom{% + \strut\usekomavar*{enclseparator}\usekomavar{enclseparator}}% + }% + \ignorespaces #1\strut}% + \setlength{\parfillskip}{\z@ \@plus 1fil}\par + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Briefspezifische Feld-Variablen} +% +% \begin{KOMAvar}{signature} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{place} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{location} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{backaddress} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{specialmail} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{title} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{fromlogo} +% \changes{v2.8q}{2002/01/28}{Neu} +% Zunächst besitzt die Briefklasse einige Variablen, die von Haus aus nicht +% über einen Ausgabenamen verfügen, weil sie üblicherweise ohne Ausgabe einer +% Bezeichung verwendet werden. Diese Variablen haben teilweise auch keinen +% vordefinierten Inhalt. Der Inhalt muss erst vom Anwender gesetzt +% werden. Teilweise gibt es aber auch einen vordefinierten Inhalt, der von +% anderen Variablen abhängt. +% \begin{macrocode} +\newkomavar{signature} +\setkomavar{signature}{\usekomavar{fromname}} +\newkomavar{place} +\newkomavar{location} +\newkomavar{backaddress} +\setkomavar{backaddress}{% + \ifkomavarempty{fromname}{}{% + \strut\ignorespaces\usekomavar{fromname}% + \ifkomavarempty{fromaddress}{}{\\}}% + \ifkomavarempty{fromaddress}{}{% + \strut\ignorespaces\usekomavar{fromaddress}}% + } +\newkomavar{specialmail} +\newkomavar{title} +\newkomavar{fromlogo} +% \end{macrocode} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% +% \begin{KOMAvar}{placeseparator} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{subjectseparator} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{ccseparator} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{enclseparator} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{backaddressseparator} +% \changes{v2.8q}{2002/01/22}{Neu} +% \begin{KOMAvar}{phoneseparator} +% \changes{v2.8q}{2002/03/25}{Neu} +% \begin{KOMAvar}{faxseparator} +% \changes{v2.8q}{2002/03/25}{Neu} +% \begin{KOMAvar}{emailseparator} +% \changes{v2.8q}{2002/03/25}{Neu} +% \begin{KOMAvar}{urlseparator} +% \changes{v2.8q}{2002/03/25}{Neu} +% Daneben gibt es einige Trennzeichen. Diese haben ggf. als Ausgabenamen das +% Feld, für das sie als Trennzeichen dienen. Die Trennzeichen sind +% vordefiniert. +% \begin{macrocode} +\newkomavar[\usekomavar{place}]{placeseparator} +\setkomavar{placeseparator}{,~} +\newkomavar[\subjectname]{subjectseparator} +\setkomavar{subjectseparator}{: } +\newkomavar[\ccname]{ccseparator} +\setkomavar{ccseparator}{: } +\newkomavar[\enclname]{enclseparator} +\setkomavar{enclseparator}{: } +\newkomavar{backaddressseparator} +\setkomavar{backaddressseparator}{,~} +\newkomavar[\phonename]{phoneseparator} +\setkomavar{phoneseparator}{:~} +\newkomavar[\faxname]{faxseparator} +\setkomavar{faxseparator}{:~} +\newkomavar[\emailname]{emailseparator} +\setkomavar{emailseparator}{:~} +\newkomavar[\wwwname]{urlseparator} +\setkomavar{urlseparator}{:~} +% \end{macrocode} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% +% \begin{KOMAvar}{fromname} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{fromaddress} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{fromemail} +% \changes{v2.8q}{2002/01/28}{Neu} +% \begin{KOMAvar}{fromurl} +% \changes{v2.8q}{2002/01/28}{Neu} +% \begin{KOMAvar}{frombank} +% \changes{v2.8q}{2002/01/28}{Neu} +% \begin{KOMAvar}{toname} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{toaddress} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{fromphone} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{fromfax} +% \changes{v2.8q}{2002/01/28}{Neu} +% \begin{KOMAvar}{yourmail} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{yourref} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{myref} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{customer} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{invoice} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{subject} +% \changes{v2.8q}{2002/01/16}{Neu} +% \begin{KOMAvar}{date} +% \changes{v2.8q}{2002/01/16}{Neu} +% Desweiteren gibt es einige Variable, die auch einen Ausgabenamen haben, weil +% dieser üblicherweise vorangestellt wird. Eine Besonderheit stellt dabei +% \texttt{subject} dar. Der Ausgabename beinhaltet dabei nämlich auch die +% Trennzeichen, die hinter dem Namen üblicherweise stehen. Diese sind wiederum +% ein Variable, deren Name der Ausgabename des Feldes ist. Will man also nur +% den Namen aber nicht die Trennzeichen ändern, so ändert man statt dem Namen +% von \texttt{subject} den Namen von \texttt{subjectseparator}. +% +% Ähnlich ist es mit \texttt{toaddress} und \texttt{fromaddress}. Dort ist der +% Wert von \texttt{toname} bzw. \texttt{fromname} der Ausgabename. Bei +% \texttt{toaddress} und \texttt{fromaddress} wird davon jedoch intern kein +% Gebrauch gemacht. Die Variable \texttt{date} wird bereits so vordefiniert, +% dass auch weiterhin \cs{date} funktioniert. +% \begin{macrocode} +\newkomavar[\headfromname]{fromname} +\newkomavar[\usekomavar{fromname}]{fromaddress} +\newkomavar[\headtoname]{toname} +\newkomavar[\usekomavar{toname}]{toaddress} +\newkomavar[\usekomavar*{phoneseparator}% + \usekomavar{phoneseparator}]{fromphone} +\newkomavar[\usekomavar*{faxseparator}% + \usekomavar{faxseparator}]{fromfax} +\newkomavar[\usekomavar*{emailseparator}% + \usekomavar{emailseparator}]{fromemail} +\newkomavar[\usekomavar*{urlseparator}% + \usekomavar{urlseparator}]{fromurl} +\newkomavar[\bankname]{frombank} +\newkomavar[\yourrefname]{yourref} +\newkomavar[\yourmailname]{yourmail} +\newkomavar[\myrefname]{myref} +\newkomavar[\customername]{customer} +\newkomavar[\invoicename]{invoice} +\newkomavar[\usekomavar*{subjectseparator}% + \usekomavar{subjectseparator}]{subject} +\newkomavar[\datename]{date} +\setkomavar{date}{\@date} +% \end{macrocode} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% \end{KOMAvar} +% +% \iffalse +%</letter> +% \fi +% +% \iffalse +%</body> +% \fi +% +% \Finale +% +\endinput +% +% end of file `scrknpap.dtx' +%%% Local Variables: +%%% mode: doctex +%%% TeX-master: t +%%% End: |