% ====================================================================== % scrlttr2-experts.tex % Copyright (c) Markus Kohm, 2002-2019 % % 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.3c of the license. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c 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. % ---------------------------------------------------------------------- % scrlttr2-experts.tex % Copyright (c) Markus Kohm, 2002-2019 % % Diese Datei ist Teil der KOMA-Script-Sammlung für LaTeX2e. % % Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, % Version 1.3c, verteilt und/oder veraendert werden. % Die neuste Version dieser Lizenz ist % http://www.latex-project.org/lppl.txt % und Version 1.3c 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. % ====================================================================== % % Chapter about scrlttr2 of the KOMA-Script guide expert part % Maintained by Markus Kohm % % ---------------------------------------------------------------------- % % Kapitel über scrlttr2 im Experten-Teil der KOMA-Script-Anleitung % Verwaltet von Markus Kohm % % ============================================================================ \KOMAProvidesFile{scrlttr2-experts.tex}% [$Date: 2019-12-03 09:41:21 +0100 (Tue, 03 Dec 2019) $ KOMA-Script guide (chapter: scrlttr2 for experts)] \chapter{Zusätzliche Informationen zur Klasse \Class{scrlttr2} und Paket \Package{scrletter}} \labelbase{scrlttr2-experts} \BeginIndexGroup% \BeginIndex{Class}{scrlttr2}% In diesem Kapitel finden Sie zusätzliche Informationen zu der \KOMAScript-Klasse \Class{scrlttr2}\important{\Class{scrlttr2}}. % \iffree{Einige Teile des Kapitels sind dabei dem \KOMAScript-Buch \cite{book:komascript} vorbehalten. Dies sollte kein Problem sein, denn der}{Der} % Anwender, der die Klasse einfach nur verwenden will, wird diese Informationen normalerweise nicht benötigen. Ein Teil der Informationen richtet sich an Anwender, denen die vordefinierten Möglichkeiten nicht genügen. So befasst sich beispielsweise der erste Abschnitt ausführlich mit der Definition und Verwendung von Variablen.% \iffalse% Es wird Zeit das komplett rauszuwerfen! \ Darüber hinaus finden sich in diesem Kapitel auch Informationen über Möglichkeiten, die aus Gründen der Verbesserung der Kompatibilität zur obsoleten \KOMAScript-Klasse \Class{scrlettr} geschaffen wurden. Es wird auch ausführlich erklärt, wie man einen Brief dieser veralteten Klasse auf die aktuelle Briefklasse übertragen kann. \fi \BeginIndex{Package}{scrletter}% Darüber hinaus gibt es seit \KOMAScript~3.15\ChangedAt[2014/11]{v3.15}{\Package{scrletter}} das Paket \Package{scrletter}\important{\Package{scrletter}}, das zusammen mit einer der \KOMAScript-Klassen \Class{scrartcl}, \Class{scrreprt} oder \Class{scrbook} verwendet werden kann. Es stellt nahezu die komplette Funktionalität von \Class{scrlttr2} für die drei genannten Klassen zur Verfügung. Einige wenige Unterschiede gibt es jedoch, die ebenfalls in diesem Kapitel genannt werden.% \section{Variablen für fortgeschrittene Anwender} \seclabel{variables} \BeginIndexGroup \BeginIndex{}{Variablen} Neben der Möglichkeit, vordefinierte Variablen zu verwenden, bietet \KOMAScript{} auch Anweisungen, um neue Variablen zu definieren oder deren automatische Verwendung innerhalb der Geschäftszeile zu beeinflussen. \begin{Declaration} \Macro{newkomavar}\OParameter{Bezeichnung}\Parameter{Name} \Macro{newkomavar*}\OParameter{Bezeichnung}\Parameter{Name} \Macro{addtoreffields}\Parameter{Name} \Macro{removereffields} \Macro{defaultreffields} \end{Declaration} Mit \Macro{newkomavar} wird eine neue Variable definiert. Diese Variable wird über \PName{Name} angesprochen. Optional kann eine \PName{Bezeichnung} für die Variable \PName{Name} angegeben werden. Eine \PName{Bezeichnung} wird dabei im Unterschied zu \PName{Name} nicht verwendet, um auf eine Variable zuzugreifen. Vielmehr ist die \PName{Bezeichnung} eine Ergänzung zum Inhalt einer Variable, die ähnlich ihrem Inhalt ausgegeben werden kann. Mit der Anweisung \Macro{addtoreffields} kann die Variable \PName{Name} der Geschäftszeile\Index{Geschaeftszeile=Geschäftszeile}\textnote{Geschäftszeile} (siehe \autoref{sec:scrlttr2.firstpage}, \DescPageRef{scrlttr2.option.refline}) hinzugefügt werden. Dabei wird die \PName{Bezeichnung} und der Inhalt der Variablen an das Ende der Geschäftszeile angehängt, falls ihr Inhalt nicht leer ist. Die Sternvariante \Macro{newkomavar*} entspricht der Variante ohne Stern mit anschließendem Aufruf der Anweisung \Macro{addtoreffields}. Bei der Sternvariante wird die Variable also automatisch zur Geschäftszeile hinzugefügt. \begin{Example} Angenommen, Sie benötigen in der Geschäftszeile ein zusätzliches Feld für eine Durchwahl. Sie können das Feld dann wahlweise mit \begin{lstcode} \newkomavar[Durchwahl]{myphone} \addtoreffields{myphone} \end{lstcode} oder kürzer mit \begin{lstcode} \newkomavar*[Durchwahl]{myphone} \end{lstcode} definieren. \end{Example} Im\textnote{Achtung!} Fall, dass eine Variable für die Geschäftszeile definiert wird, sollten Sie immer eine Bezeichnung dafür angeben. Mit der Anweisung \Macro{removereffields} können alle Variablen aus der Geschäftszeile entfernt werden. Dies betrifft auch die in der Klasse vordefinierten Variablen. Die Geschäftszeile ist dann leer. Sie können dies beispielsweise nutzen, wenn Sie die Reihenfolge der Variablen in der Geschäftszeile ändern wollen. Zur Wiederherstellung der Reihenfolge der vordefinierten Variablen in der Geschäftszeile dient \Macro{defaultreffields}. Dabei werden auch alle selbst definierten Variablen aus der Geschäftszeile entfernt. Das\textnote{Achtung!} Datum sollte der Geschäftszeile nicht über die Anweisung \Macro{addtoreffields} hinzugefügt werden. Stattdessen stellt man mit Option \DescRef{scrlttr2.option.refline}% \important{\OptionValueRef{scrlttr2}{refline}{dateleft}\\ \OptionValueRef{scrlttr2}{refline}{dateright}\\ \OptionValueRef{scrlttr2}{refline}{nodate}}% \IndexOption{refline~=\textKValue{dateleft}}% \IndexOption{refline~=\textKValue{dateright}}% \IndexOption{refline~=\textKValue{nodate}} ein, ob das Datum links, rechts oder gar nicht in der Geschäftszeile erscheinen soll. Diese Einstellungen haben darüber hinaus auch einen Einfluss auf die Position des Datums, wenn gar keine Geschäftszeile verwendet wird.% % \EndIndexGroup \begin{Declaration} \Macro{usekomavar}\OParameter{Anweisung}\Parameter{Name} \Macro{usekomavar*}\OParameter{Anweisung}\Parameter{Name} \end{Declaration} Die Anweisungen \DescRef{scrlttr2.cmd.usekomavar} und \DescRef{scrlttr2.cmd.usekomavar*} sind wie alle Anweisungen, von denen es eine Sternvariante gibt oder die ein optionales Argument besitzen, nicht voll expandierbar. Bei Verwendung innerhalb von \DescRef{scrlttr2.cmd.markboth}\IndexCmd{markboth}, \DescRef{scrlttr2.cmd.markright}\IndexCmd{markright} oder ähnlichen Anweisungen muss dennoch kein \Macro{protect}\IndexCmd{protect} vorangestellt werden. Selbstverständlich gilt dies bei Verwendung von \hyperref[cha:scrlayer-scrpage]{\Package{scrlayer-scrpage}}% \IndexPackage{scrlayer-scrpage} auch für \DescRef{scrlayer-scrpage.cmd.markleft}\IndexCmd{markleft} (siehe \autoref{sec:scrlayer-scrpage.pagestyle.content}, \DescPageRef{scrlayer-scrpage.cmd.markleft}). Allerdings\textnote{Achtung!} können die Anweisungen nicht innerhalb von \Macro{MakeUppercase}\important{\Macro{MakeUppercase}}\IndexCmd{MakeUppercase} und ähnlichen Anweisungen verwendet werden, die direkten Einfluss auf ihr Argument haben. Diese Anweisungen können jedoch als optionales Argument angegeben werden. So erhält man beispielsweise den Inhalt einer Variable in Großbuchstaben mit: \begin{lstcode}[escapeinside=><] \usekomavar[\MakeUppercase]{>\PName{Name}<} \end{lstcode} % \EndIndexGroup \begin{Declaration} \Macro{Ifkomavarempty}\Parameter{Name}\Parameter{Wahr}\Parameter{Falsch} \Macro{Ifkomavarempty*}\Parameter{Name}\Parameter{Wahr}\Parameter{Falsch} \end{Declaration} Für die exakte Funktion ist wichtig, dass der Inhalt der Variablen soweit expandiert wird, wie dies mit \Macro{edef} möglich ist. Bleiben dabei Leerzeichen oder unexpandierbare Makros wie \Macro{relax} übrig, so gilt der Inhalt auch dann als nicht leer, wenn die Verwendung der Variablen zu keiner Ausgabe führen würde. Auch\textnote{Achtung!} diese Anweisung kann nicht innerhalb von \Macro{MakeUppercase} oder ähnlichen Anweisungen verwendet werden. Sie ist jedoch robust genug, um beispielsweise als Argument von \DescRef{scrlttr2.cmd.markboth} oder \DescRef{scrlttr2.cmd.footnote} zu funktionieren.% \EndIndexGroup \begin{Declaration} \Macro{foreachkomavar}\Parameter{Variablenliste}\Parameter{Befehl} \Macro{foreachnonemptykomavar}\Parameter{Variablenliste}\Parameter{Befehl} \Macro{foreachemptykomavar}\Parameter{Variablenliste}\Parameter{Befehl} \Macro{foreachkomavarifempty}\Parameter{Variablenliste} \Parameter{Dann-Befehl}\Parameter{Sonst-Befehl} \end{Declaration} Mit\ChangedAt{v3.27}{\Class{scrlttr2}\and \Package{scrletter}} der Anweisung \Macro{foreachkomavar} wird der angegebene \PName{Befehl} für jede Variable aus der durch Komma separierten \PName{Variablenliste} ausgeführt. Dabei wird der Name der jeweiligen Variablen als Argument an den \PName{Befehl} angehängt. Die Anweisung \Macro{foreachnonemptykomavar} führt im Unterschied dazu \PName{Befehl} nur aus, wenn \DescRef{\LabelBase.cmd.Ifkomavarempty} sie als nicht leer erkennt. Leere Variablen in der \PName{Variablenliste} haben dagegen keine Auswirkungen. Dagegen führt \Macro{foreachemptykomavar} den \PName{Befehl} aus, wenn die Variable im Sinne von \DescRef{\LabelBase.cmd.Ifkomavarempty} leer ist. Nicht leere Variablen in der \PName{Variablenliste} haben entsprechend keine Auswirkungen. Die Anweisung \Macro{foreachkomavarifempty} ist quasi eine Verschmelzung beider vorgenannten. Sie führt \PName{Dann-Befehl} für alle leeren Variablen aus, während \PName{Sonst-Befehl} für die nicht leeren Variablen zur Anwendung kommt. Wie bei \PName{Befehl} wird in beiden Fällen der Name der jeweiligen Variable als Argument angehängt.% \EndIndexGroup % \EndIndexGroup \section{Ergänzende Informationen zu den Seitenstilen} \seclabel{pagestyleatscrletter} \BeginIndexGroup \BeginIndex{}{Seiten>Stil} \LoadNonFree{scrlttr2-experts}{0}% \EndIndexGroup \iffalse% Wurde bereits in Kapitel 4.21 behandelt \section{Unterschiede in der Behandlung von \File{lco}-Dateien bei \Package{scrletter}} \seclabel{lcoatscrletter} \BeginIndexGroup \BeginIndex{File}{lco} \BeginIndex{}{lco-Datei=\File{lco}-Datei} In\ChangedAt{v3.15}{\Package{scrletter}} \autoref{sec:scrlttr2.lcoFile} wurde erklärt, dass man \File{lco}-Dateien direkt über \Macro{documentclass} laden kann. Für \Package{scrletter}\OnlyAt{\Package{scrlttr2}} wurde auf diese Möglichkeit verzichtet. \begin{Declaration} \Macro{LoadLetterOption}\Parameter{Name} \Macro{LoadLetterOptions}\Parameter{Liste von Namen} \end{Declaration} Während für \Class{scrlttr2} lediglich empfohlen wird, \File{lco}-Dateien über \DescRef{scrlttr2.cmd.LoadLetterOption} oder \DescRef{scrlttr2.cmd.LoadLetterOptions} zu laden, ist dies für \Package{scrletter} zwingend. Natürlich können die \File{lco}-Dateien auch erst nach \Package{scrletter} geladen werden. % \EndIndexGroup % \EndIndexGroup % \fi \section{\File{lco}-Dateien für fortgeschrittene Anwender} \seclabel{lcoFile} \BeginIndexGroup \BeginIndex{File}{lco} \BeginIndex{}{lco-Datei=\File{lco}-Datei} \BeginIndexGroup% \BeginIndex{}{Papier>Format}% Obwohl jedes von \hyperref[cha:typearea]{\Package{typearea}}% \IndexPackage{typearea} einstellbare Format verwendbar ist, kann es bei der Ausgabe der ersten Briefseite mit manchen Formaten zu unerwünschten Ergebnissen kommen. Leider gibt es keine allgemein gültigen Regeln, um die Position von Anschriftfeldern und Ähnlichem für beliebige Papierformate zu berechnen. Vielmehr werden für unterschiedliche Papierformate unterschiedliche Parameter benötigt.% %\subsection{Überwachung des Papierformats} %\seclabel{papersize} Derzeit existieren Parametersätze und \File{lco}-Dateien für A4-Papier und letter-Papier. Die Klasse \Class{scrlttr2} versteht aber theoretisch sehr viel mehr Papierformate. Daher ist es notwendig zu überwachen, ob die korrekte Papiergröße eingestellt ist. Dies gilt umso mehr, wenn \Package{scrletter} verwendet wird, da die Einstellung der Papiergröße dann in erster Linie von der verwendeten Klasse abhängt. \begin{Declaration} \Macro{LetterOptionNeedsPapersize}% \Parameter{Optionsname}\Parameter{Papiergröße} \end{Declaration} Damit man bei Verwendung einer in der \File{lco}-Datei nicht vorgesehenen \PName{Papiergröße} zumindest gewarnt wird, sind in den mit \KOMAScript{} ausgelieferten \File{lco}-Dateien \Macro{LetterOptionNeedsPapersize}-Anweisungen zu finden. Als erstes Argument wird dabei der Name der \File{lco}-Datei ohne die Endung »\File{.lco}« übergeben. Als zweites Argument wird die Papiergröße übergeben, für die diese \File{lco}-Datei gedacht ist. Werden \iffalse nacheinander \fi % Umbruchoptimierung mehrere \File{lco}-Dateien geladen, so kann jede dieser \File{lco}-Dateien eine Anweisung \Macro{LetterOptionNeedsPapersize} enthalten. Innerhalb von \DescRef{scrlttr2.cmd.opening}\IndexCmd{opening} wird jedoch nur auf die jeweils letzte angegebene \PName{Papiergröße} geprüft. Wie das nachfolgende Beispiel zeigt, ist es daher für den versierten Anwender leicht möglich, \File{lco}-Dateien mit Parametersätzen für andere Papierformate zu schreiben. % \iffalse% Umbruchoptimierung!!! Wer allerdings nicht vor hat, selbst solche \File{lco}-Dateien zu schreiben, der kann die Erklärung zu dieser Anweisung gleich wieder vergessen und auch das Beispiel überspringen.% \fi \begin{Example} \iffalse% Umbruchkorrektur Nehmen wir einmal an, dass Sie A5-Papier in normaler Ausrichtung, also hochkant oder portrait, für Ihre Briefe verwenden. Nehmen wir weiter an, dass Sie diese in normale Fensterbriefumschläge im Format C6 stecken. % \else% Angenommen, Sie schreiben Briefe auf A5-Papier und stecken diese in Fensterbriefumschläge im Format C6. % \fi% Damit wäre prinzipiell die Position des Adressfeldes die gleiche wie bei einem % \iffalse normalen Brief in A4 nach DIN\else Brief in A4\fi % Umbruchkorrektur . Der Unterschied besteht \iffalse im Wesentlichen \fi% Umbruchkorrektur darin, dass das A5-Papier nur einmal gefaltet werden muss. Sie wollen deshalb verhindern, dass die obere und die untere Faltmarke gesetzt wird. Dies erreichen Sie beispielsweise, indem Sie die Marken außerhalb des Papiers platzieren. \begin{lstcode} \ProvidesFile{a5.lco} [2002/05/02 letter class option] \LetterOptionNeedsPapersize{a5}{a5} \setplength{tfoldmarkvpos}{\paperheight} \setplength{bfoldmarkvpos}{\paperheight} \endinput \end{lstcode} Eleganter wäre es natürlich, die Marken mit Hilfe der Option \DescRef{scrlttr2.option.foldmarks} abzuschalten. Außerdem muss auch noch die Position des Seitenfußes, also die Pseudolänge \DescRef{scrlttr2.plength.firstfootvpos}, angepasst werden. Ich überlasse es dem Leser, dafür einen geeigneten Wert zu ermitteln. Mit einer solchen \File{lco}-Datei ist es lediglich wichtig, dass andere \File{lco}-Dateioptionen wie \File{SN} vor dem Laden von »\File{a5.lco}«, angegeben werden. \end{Example} % \EndIndexGroup% \EndIndexGroup% \ExampleEndFix %\subsection{Positionen sichtbar machen} %\seclabel{visualize} %\BeginIndexGroup \begin{Declaration} \File{visualize.lco} \end{Declaration} \BeginIndex{Option}{visualize}% Wenn man selbst \File{lco}-Dateien entwickelt, % \iffalse beispielsweise \fi % Umbruchkorrektur um die Positionen von % \iffalse verschiedenen \fi % Umbruchkorrektur Feldern des Briefbogens an eigene Wünsche % \iffalse oder Notwendigkeiten \fi % Umbruchkorrektur anzupassen, ist es hilfreich, wenn % \iffalse zumindest \fi % Umbruchkorrektur einige Elemente % \iffalse direkt \fi % Umbruchkorrektur sichtbar gemacht werden können. Zu diesem Zweck existiert die \File{lco}-Datei \File{visualize.lco}\ChangedAt{v3.04}{\Class{scrlttr2}}% \iffalse , die wie jede \File{lco}-Datei geladen werden kann\fi % Umbruchkorrektur . Allerdings ist das Laden dieser % \iffalse \emph{Letter Class Option} \else \File{lco}-Datei \fi% Umbruchkorrektur auf die Dokumentpräambel beschränkt und seine Auswirkungen können nicht wieder rückgängig gemacht werden. Die \File{lco}-Datei % \iffalse bedient sich der \else benötigt die \fi % Umbruchkorrektur Pakete \Package{eso-pic}\IndexPackage{eso-pic}% \important[i]{\Package{eso-pic}, \Package{graphicx}} und \Package{graphicx}\IndexPackage{graphicx}, die nicht zu \KOMAScript{} gehören. \begin{Declaration} \Macro{showfields}\Parameter{Feldliste} \end{Declaration} Mit dieser Anweisung kann bei Verwendung von \File{visualize.lco} die Visualisierung von Feldern des Briefbogens aktiviert werden. Das Argument \PName{Feldliste} ist dabei eine durch Komma separierte Liste der Felder, die visualisiert werden sollen. Folgende Felder werden derzeit unterstützt: % \begin{labeling}[~--]{\PValue{location}} \begin{description}\setkomafont{descriptionlabel}{} \item[\PValue{test}] ist ein Testfeld der Größe 10\Unit{cm} auf 15\Unit{cm}, das jeweils 1\Unit{cm} vom oberen und linken Papierrand entfernt ist. Dieses Testfeld existiert zu Debuggingzwecken. Es dient als Vergleichsmaß für den Fall, dass im Dokumenterstellungsprozess die Maße verfälscht werden. \item[\PValue{head}] ist der Kopfbereich des Briefbogens. Es handelt sich hier um ein nach unten offenes Feld. \item[\PValue{foot}] ist der Fußbereich des Briefbogens. Es handelt sich hier um ein nach unten offenes Feld. \item[\PValue{address}] ist das Anschriftfenster. \item[\PValue{location}] ist das Feld der Absenderergänzung. \item[\PValue{refline}] ist die Geschäftszeile. Es handelt sich hier um ein nach unten offenes Feld. \end{description} %\end{labeling}% \BeginIndex{FontElement}{field}\LabelFontElement{field}% Mit den Anweisungen \DescRef{scrlttr2.cmd.setkomafont} und \DescRef{scrlttr2.cmd.addtokomafont} (siehe \autoref{sec:scrlttr2.textmarkup}, \DescPageRef{scrlttr2.cmd.setkomafont}) für das Element \FontElement{field}\important{\FontElement{field}} kann die Farbe der Visualisierung geändert werden. Voreingestellt ist \Macro{normalcolor}.% \EndIndex{FontElement}{field}% % \EndIndexGroup \iffree{\begin{Declaration}}{\begin{Declaration}[0]}% Umbruchkorrektur \Macro{setshowstyle}\Parameter{Stil} \Macro{edgesize} \end{Declaration} In der Voreinstellung werden von \File{visualize.lco} die einzelnen Felder durch Rahmen\important{\PValue{frame}} markiert. Dies entspricht dem \PName{Stil} \PValue{frame}. Nach unten offene Felder werden nicht komplett umrahmt, sondern unten offen mit kleinen Pfeilen dargestellt. Als Alternative hierzu steht auch der \PName{Stil} \PValue{rule}\important{\PValue{rule}} zur Verfügung. Dabei wird das Feld farbig hinterlegt. Hierbei kann nicht zwischen geschlossenen und nach unten offenen Feldern unterschieden werden. Stattdessen werden nach unten offene Felder mit einer Mindesthöhe dargestellt. Der dritte\important{\PValue{edges}} verfügbare \PName{Stil} ist \PValue{edges}. Dabei werden die Ecken der Felder markiert. Bei nach unten offenen Feldern entfallen die unteren Eckmarkierungen. Die Größe der Eckmarkierungen ist im Makro \Macro{edgesize} abgelegt und mit 1\Unit{ex} voreingestellt.% \EndIndexGroup \begin{Declaration} \Macro{showenvelope}\AParameter{Breite\textup{,}Höhe} \AParameter{HOffset\textup{,}VOffset} \OParameter{Zusatz} \Macro{showISOenvelope}\Parameter{Format}\OParameter{Zusatz} \Macro{showUScommercial}\Parameter{Format}\OParameter{Zusatz} \Macro{showUScheck}\OParameter{Zusatz} \Macro{unitfactor} \end{Declaration} \iffalse% Umbruchkorrektur Diese Anweisungen dienen bei Verwendung von \File{visualize.lco} dazu, eine Seite mit einer Zeichnung eines Umschlags auszugeben. Der Umschlag wird dabei immer um 90° gedreht auf einer eigenen Seite im Maßstab~1:1 ausgegeben. Das Anschriftfenster wird automatisch aus den aktuellen Daten für die Anschriftposition auf dem Briefbogen: \DescRef{scrlttr2.plength.toaddrvpos}, \DescRef{scrlttr2.plength.toaddrheight}, \DescRef{scrlttr2.plength.toaddrwidth} und \DescRef{scrlttr2.plength.toaddrhpos}, erzeugt. Hierfür ist es notwendig zu wissen, um welchen Wert der gefaltete Briefbogen auf jeder Seite kleiner als die \PName{Breite} und \PName{Höhe} des Briefbogens ist. Sind diese beiden Werte, \PName{HOffset} und \PName{VOffset}, bei \Macro{showenvelope} nicht angegeben, so wird versucht, sie aus den Faltmarken und der Papiergröße selbst zu berechnen.% \else% Diese Anweisungen von \File{visualize.lco} dienen dazu, eine Seite mit einer um 90° gedrehten Zeichnung eines Umschlags im Maßstab~1:1 auszugeben. Das Anschriftfenster wird automatisch aus den aktuellen Daten für die Anschriftposition auf dem Briefbogen: \DescRef{scrlttr2.plength.toaddrvpos}, \DescRef{scrlttr2.plength.toaddrheight}, \DescRef{scrlttr2.plength.toaddrwidth} und \DescRef{scrlttr2.plength.toaddrhpos}, erzeugt. Hierfür ist es notwendig zu wissen, um welchen Wert der gefaltete Briefbogen auf jeder Seite kleiner als die \PName{Breite} und \PName{Höhe} des Briefbogens ist. Sind diese beiden Werte, \PName{HOffset} und \PName{VOffset}, bei \Macro{showenvelope} nicht angegeben, so wird versucht, sie aus den Faltmarken und der Papiergröße zu berechnen.% \fi% Die Anweisungen \Macro{showISOenvelope}, \Macro{showUScommercial} und \Macro{showUScheck} basieren auf \Macro{showenvelope}. Mit \Macro{showISOenvelope} kann ein ISO-Umschlag im \PName{Format} C4, C5, C5/6, DL\iffree{ (auch bekannt als C5/6)}{} oder C6 erzeugt werden. Mit \Macro{showUScommercial} wird hingegen ein US-Commercial-Umschlag im \PName{Format} 9 oder 10 ausgegeben. \Macro{showUScheck} schließlich ist für Umschläge im US-Check-Format zuständig. \BeginIndex{FontElement}{letter}\LabelFontElement{letter}% Innerhalb des Umschlags wird die Lage des Briefbogens gestrichelt angedeutet. Die dabei verwendete Farbe kann mit Hilfe der Anweisungen \DescRef{scrlttr2.cmd.setkomafont} und \DescRef{scrlttr2.cmd.addtokomafont} (siehe \autoref{sec:scrlttr2.textmarkup}, \DescPageRef{scrlttr2.cmd.setkomafont}) für das Element \FontElement{letter}\important{\FontElement{letter}} verändert werden. Voreingestellt ist \Macro{normalcolor}.% \EndIndex{FontElement}{letter} \BeginIndex{FontElement}{measure}\LabelFontElement{measure}% Die Umschlagzeichnung wird automatisch bemaßt. Die Farbe der Bemaßung und die Größe von deren Beschriftung kann mit Hilfe der Anweisungen \DescRef{scrlttr2.cmd.setkomafont} und \DescRef{scrlttr2.cmd.addtokomafont} (siehe \autoref{sec:scrlttr2.textmarkup}, \DescPageRef{scrlttr2.cmd.setkomafont}) für das Element \FontElement{measure}\important{\FontElement{measure}} verändert werden. Voreingestellt ist hier \Macro{normalcolor}. Die Bemaßung erfolgt in Vielfachen von \Length{unitlength} mit einer maximalen Genauigkeit von $1/\Macro{unitfactor}$, wobei die Genauigkeit der \TeX-Arithmetik die tatsächliche Grenze darstellt. Voreingestellt ist 1. Eine Umdefinierung ist mit \Macro{renewcommand} möglich.% \EndIndex{FontElement}{measure} \begin{Example} Es wird ein Beispielbrief im Format ISO~A4 erzeugt. Die unterstützten Felder sollen zwecks Überprüfung ihrer Position mit gelben Rahmenlinien markiert werden. Des Weiteren soll die Position des Fensters in einem Umschlag der Größe~DL mit Hilfe einer Zeichnung überprüft werden. Die Maßlinien in dieser Zeichnung sollen rot und die Maßzahlen in kleinerer Schrift ausgegeben werden, wobei die Maßzahlen in cm mit einer Genauigkeit von 1\Unit{mm} ausgegeben werden sollen. Der gestrichelte Briefbogen im Umschlag soll hingegen grün eingefärbt werden. \begin{lstcode} \documentclass[visualize]{scrlttr2} \usepackage{xcolor} \setkomafont{field}{\color{yellow}} \setkomafont{measure}{\color{red}\small} \setkomafont{letter}{\color{green}} \showfields{head,address,location,refline,foot} \usepackage[ngerman]{babel} \usepackage{lipsum} \begin{document} \setkomavar{fromname}{Peter Musterfrau} \setkomavar{fromaddress}{Hinter dem Tal 2\\ 54321 Musterheim} \begin{letter}{% Petra Mustermann\\ Vor dem Berg 1\\ 12345 Musterhausen% } \opening{Hallo,} \lipsum[1] \closing{Bis dann} \end{letter} \setlength{\unitlength}{1cm} \renewcommand*{\unitfactor}{10} \showISOenvelope{DL} \end{document} \end{lstcode} Auf der ersten Seite findet sich nun der Briefbogen, auf der zweiten Seite wird die Zeichnung des Umschlags ausgegeben. \end{Example} Bezüglich der Bemaßung ist zu beachten, dass ungünstige Kombinationen von \Length{unitlength} und \Macro{unitfactor} sehr schnell einen \TeX-Fehler der Art \emph{arithmetic overflow} provozieren. Ebenso kann es geschehen, dass ausgegebene Maßzahlen geringfügig vom tatsächlichen Wert abweichen. Beides sind keine Fehler von \Option{visualize}, sondern lediglich Implementierungsgrenzen. % \EndIndexGroup % \EndIndexGroup % \EndIndexGroup \section{Unterstützung verschiedener Sprachen} \seclabel{languages}% \BeginIndexGroup% \BeginIndex{}{Sprachen}% \iffalse % Umbruchkorrektur Die Klasse \Class{scrlttr2} und das Paket \Package{scrletter} unterstützen viele Sprachen. Dazu zählen Deutsch (\PValue{german} für alte deutsche Rechtschreibung, \PValue{ngerman} für neue deutsche Rechtschreibung, \PValue{austrian} für Österreichisch mit alter deutscher Rechtschreibung und \PValue{naustrian}\ChangedAt{v3.09}{\Class{scrlttr2}} für Österreichisch mit neuer deutscher Rechtschreibung), \PValue{nswissgerman}\ChangedAt{v3.13}{\Class{scrlttr2}} für Schweizer Deutsch mit neuer Rechtschreibung und \PValue{swissgerman} für Schweizer Deutsch mit alter Rechtschreibung, Englisch (unter anderem \PValue{english} ohne Angabe, ob amerikanisches oder britisches Englisch, \PValue{american} und \PValue{USenglish} für Amerikanisch, \PValue{british} und \PValue{UKenglish} für Britisch), Französisch, Italienisch, Spanisch, Niederländisch, Kroatisch, Finnisch, Norwegisch\ChangedAt{v3.02}{\Class{scrlttr2}}, Schwedisch\ChangedAt{v3.08}{\Class{scrlttr2}}, Polnisch\ChangedAt{v3.13}{\Class{scrlttr2}}, Tschechisch\ChangedAt{v3.13}{\Class{scrlttr2}} und Slowakisch. Zwischen den Sprachen wird bei Verwendung des \Package{babel}-Pakets\IndexPackage{babel} (siehe \cite{package:babel}) mit der Anweisung \Macro{selectlanguage}\Parameter{Sprache} gewechselt. Andere Pakete wie \Package{german}\IndexPackage{german} (siehe \cite{package:german}) und \Package{ngerman}\IndexPackage{ngerman} (siehe \cite{package:ngerman}) besitzen diese Anweisung ebenfalls. In der Regel erfolgt eine Sprachumschaltung jedoch bereits aufgrund des Ladens eines solchen Pakets. \iffalse% Umbruchkorrekturtext!!! Näheres entnehmen Sie bitte der jeweiligen Anleitung.% \fi% \else% Diese neue Einleitung ist vorzuziehen! Die Klasse \Class{scrlttr2} und das Paket \Package{scrletter} sind multilingual angelegt. Sie unterstützen also die Verwendung von Paketen wie \Package{babel} oder \Package{polyglossia}. Derzeit verfügbar sind Deutsch, Englisch, Finnisch, Französisch, Italienisch, Kroatisch, Niederländisch, Norwegisch\ChangedAt{v3.02}{\Class{scrlttr2}}, Polnisch\ChangedAt{v3.13}{\Class{scrlttr2}}, Schwedisch\ChangedAt{v3.08}{\Class{scrlttr2}}, Slowakisch, Spanisch und Tschechisch\ChangedAt{v3.13}{\Class{scrlttr2}} in den Varianten, die durch die auf \DescPageRef{\LabelBase.cmd.captionsenglish} und \DescPageRef{\LabelBase.cmd.dateenglish} dokumentieren Befehle bestimmt sind.% \fi% \iffalse% Umbruchkorrektur Erlauben\textnote{Achtung!} Sie mir noch einen Hinweis zu den Sprachumschaltpaketen. Das Paket \Package{french}\IndexPackage{french}\important{\Package{french}} (siehe \cite{package:french}) nimmt neben der Umdefinierung der Begriffe aus \autoref{tab:\LabelBase.languageTerms}, \autopageref{tab:\LabelBase.languageTerms} weitere Änderungen vor. So definiert es etwa die Anweisung \DescRef{scrlttr2.cmd.opening} um. Dabei geht es einfach davon aus, dass \DescRef{scrlttr2.cmd.opening} immer wie in der Standardbriefklasse \Class{letter} definiert ist. Dies ist bei \KOMAScript{} jedoch nicht der Fall. Das Paket \Package{french} zerstört deshalb die Definition und arbeitet nicht korrekt mir \KOMAScript{} zusammen. Ich betrachte dies als Fehler des Pakets \Package{french}, der obwohl schon vor Jahrzehnten gemeldet, leider nie beseitigt wurde.% \else% Diese neue Einleitung ist vorzuziehen! Es gibt leider auch inkompatible Sprachpakete wie \Package{french}\IndexPackage{french}\important{\Package{french}} (siehe \cite{package:french}). Dieses definiert beispielsweise \DescRef{scrlttr2.cmd.opening} in einer Weise um, die nicht für \Class{scrlttr2} oder \Package{scrletter} geeignet ist. Das ist ein vor Jahrzehnten gemeldeter Fehler von \Package{french}.% \fi Wird das Paket \Package{babel}\IndexPackage{babel} für die Umschaltung auf die Sprache verwendet, können vereinzelt ebenfalls Probleme auftreten. Bei \Package{babel} lassen sich problematische Änderungen einer Sprache jedoch meist gezielt abschalten.% \iffalse% Das ist eigentlich überholt! \ Ist das Paket \Package{french} nicht installiert, ergibt sich das Problem mit \Package{babel} nicht. Ebenfalls existiert das Problem normalerweise nicht, wenn man bei \Package{babel} anstelle der Sprache \PValue{french} eine der Sprachen \PValue{acadian}, \PValue{canadien} oder \PValue{francais} verwendet. \fi \iffalse% Das ist ebenfalls überholt! Mit Babel ab Version 3.7j tritt dieses Problem jedoch nur noch auf, wenn per Option explizit angegeben wird, dass \Package{babel} das \Package{french}-Paket verwenden soll. % \iftrue % Umbruchoptimierungspassage Kann nicht sicher gestellt werden, dass nicht eine alte Version von \Package{babel} verwendet wird, so empfehle ich% \iftrue , mit \begin{lstcode} \usepackage[...,francais,...]{babel} \end{lstcode} französische Sprache auszuwählen. \iffalse % Gegebenenfalls ist dann aber trotzdem mit \Macro{selectlanguage}\PParameter{french} auf Französisch umzuschalten.% \fi% \else % \space bei \Package{babel} die Option \Option{frenchb}.% \fi \fi \fi \iffalse %\enlargethispage*{\baselineskip}% Es ist nicht auszuschließen, dass mit anderen Sprachen und Paketen ähnliche Probleme auf"|treten. % \iffalse \iftrue Für Deutsch sind solche Probleme jedoch nicht bekannt und treten weder mit den Paketen \Package{german}\IndexPackage{german} oder \Package{ngerman}\IndexPackage{ngerman} noch mit \Package{babel} auf. \else Für Deutsch treten solche Probleme mit den Paketen \Package{german}\IndexPackage{german}, \Package{ngerman}\IndexPackage{ngerman} oder \Package{babel} jedoch nicht auf. \fi % \fi \fi % Hinweis: Der folgende Block kann je nach Umbruch vor oder nach % \captions... und \date... (aber bitte nicht dazwischen) stehen. \begin{Declaration} \Macro{yourrefname} \Macro{yourmailname} \Macro{myrefname} \Macro{customername} \Macro{invoicename} \Macro{subjectname} \Macro{ccname} \Macro{enclname} \Macro{headtoname} \Macro{headfromname} \Macro{datename} \Macro{pagename} \Macro{mobilephonename} \Macro{phonename} \Macro{faxname} \Macro{emailname} \Macro{wwwname} \Macro{bankname} \end{Declaration} Die aufgeführten Anweisungen enthalten die jeweiligen sprachtypischen Begriffe. Diese\important[i]{% \DescRef{scrbase.cmd.newcaptionname}\\ \DescRef{scrbase.cmd.renewcaptionname}\\ \DescRef{scrbase.cmd.providecaptionname}} können für die Realisierung einer weiteren Sprache oder aber auch zur eigenen freien Gestaltung, wie in \autoref{sec:scrbase.languageSupport} erklärt, angepasst werden. Von \KOMAScript{} werden die Begriffe erst nach der Präambel, also bei \Macro{begin}\PParameter{document} gesetzt. Sie sind daher vorher nicht verfügbar und können vorher auch nicht geändert werden. In \autoref{tab:\LabelBase.languageTerms}, \autopageref{tab:\LabelBase.languageTerms} sind die Voreinstellungen für \Option{english} und \Option{ngerman} zu finden.% \begin{table}[p]% Umbruchkorrektur \begin{minipage}{\textwidth} % \centering \KOMAoptions{captions=topbeside}% \setcapindent{0pt}% %\caption \begin{captionbeside}[{% Voreinstellungen für die sprachabhängigen Begriffe in Briefen% }]{% \hskip 0pt plus 1ex Voreinstellung für die sprachabhängigen Begriffe bei \iffalse Verwendung der \else den \fi Sprachen \Option{english} und \Option{ngerman} soweit nicht durch die Pakete zur Sprachumschaltung bereits definiert% \label{tab:\LabelBase.languageTerms}% }[l] \begin{tabular}[t]{lll} \toprule Anweisung & \Option{english} & \Option{ngerman} \\ \midrule \Macro{bankname} & Bank account & Bankverbindung \\ \Macro{ccname}\footnotemark[1] & cc & Kopien an \\ \Macro{customername} & Customer no. & Kundennummer \\ \Macro{datename} & Date & Datum \\ \Macro{emailname} & Email & E-Mail \\ \Macro{enclname}\footnotemark[1] & encl & Anlagen \\ \Macro{faxname} & Fax & Fax \\ \Macro{headfromname} & From & Von \\ \Macro{headtoname}\footnotemark[1] & To & An \\ \Macro{invoicename} & Invoice no. & Rechnungsnummer \\ \Macro{myrefname} & Our ref. & Unser Zeichen \\ \Macro{pagename}\footnotemark[1] & Page & Seite \\ \Macro{mobilephonename} & Mobile phone & Mobiltelefon \\ \Macro{phonename} & Phone & Telefon \\ \Macro{subjectname} & Subject & Betrifft \\ \Macro{wwwname} & Url & URL \\ \Macro{yourmailname} & Your letter of & Ihr Schreiben vom\\ \Macro{yourrefname} & Your ref. & Ihr Zeichen \\ \bottomrule \end{tabular} \deffootnote{1em}{1em}{1\ }% brutal aber effektiv \footnotetext[1000]{Diese Begriffe werden normalerweise bereits von Sprachpaketen wie \Package{babel} definiert und dann von \KOMAScript{} nicht überschrieben. Abweichungen im Wortlaut sind daher möglich und der Anleitung des verwendeten Sprachpakets zu entnehmen.} \end{captionbeside} \end{minipage} \end{table}% \EndIndexGroup \begin{Declaration} \Macro{captionsacadian} \Macro{captionsamerican} \Macro{captionsaustralien} \Macro{captionsaustrian} \Macro{captionsbritish} \Macro{captionscanadian} \Macro{captionscanadien} \Macro{captionscroatian} \Macro{captionsczech} \Macro{captionsdutch} \Macro{captionsenglish} \Macro{captionsfinnish} \Macro{captionsfrancais} \Macro{captionsfrench} \Macro{captionsgerman} \Macro{captionsitalian} \Macro{captionsnaustrian} \Macro{captionsnewzealand} \Macro{captionsngerman} \Macro{captionsnorsk} \Macro{captionsnswissgerman} \Macro{captionspolish} \Macro{captionsslovak} \Macro{captionsspanish} \Macro{captionsswedish} \Macro{captionsswissgerman} \Macro{captionsUKenglish} \Macro{captionsUSenglish} \end{Declaration} Wird die Sprache eines Briefes gewechselt, so werden über diese Anweisungen die Begriffe aus \autoref{tab:\LabelBase.languageTerms}, \autopageref{tab:\LabelBase.languageTerms} umdefiniert. Sollte das verwendete Sprachumschaltpaket dies nicht unterstützen, so können die Anweisungen notfalls auch direkt verwendet werden.% % \EndIndexGroup %\iffree{}{\clearpage}% Umbruchkorrektur \begin{Declaration} \Macro{dateacadian} \Macro{dateamerican} \Macro{dateaustralien} \Macro{dateaustrian} \Macro{datebritish} \Macro{datecanadian} \Macro{datecanadien} \Macro{datecroatian} \Macro{dateczech} \Macro{datedutch} \Macro{dateenglish} \Macro{datefinnish} \Macro{datefrancais} \Macro{datefrench} \Macro{dategerman} \Macro{dateitalian} \Macro{datenaustrian} \Macro{datenewzealand} \Macro{datengerman} \Macro{datenorsk} \Macro{datenswissgerman} \Macro{datepolish} \Macro{dateslovak} \Macro{datespanish} \Macro{dateswedish} \Macro{dateswissgerman} \Macro{dateUKenglish} \Macro{dateUSenglish} \end{Declaration} Je nach verwendeter Sprache werden die Datumsangaben\Index{Datum} des numerischen Datums (siehe Option \DescRef{scrlttr2.option.numericaldate}, \autoref{sec:scrlttr2.firstpage}, \DescPageRef{scrlttr2.option.numericaldate}) in unterschiedlicher Form umgesetzt. Die genauen Angaben sind \autoref{tab:date}, \autopageref{tab:date} zu entnehmen.% \begin{table}[p]% Umbruchoptimierung % \centering \KOMAoptions{captions=topbeside}% \setcapindent{0pt}% % \caption \begin{captionbeside}{Sprachabhängige Ausgabeformate für das Datum}[l] \begin{tabular}[t]{ll} \toprule Anweisung & Ausgabebeispiel \\ \midrule \Macro{dateacadian} & 24.\,12.\,1993\\ \Macro{dateamerican} & 12/24/1993\\ \Macro{dateaustralien}& 24/12/1993\\ \Macro{dateaustrian} & 24.\,12.\,1993\\ \Macro{datebritish} & 24/12/1993\\ \Macro{datecanadian} & 1993/12/24\\ \Macro{datecanadien} & 1993/12/24\\ \Macro{datecroatian} & 24.\,12.\,1993.\\ \Macro{dateczech} & 24.\,12.\,1993\\ \Macro{datedutch} & 24.\,12.\,1993\\ \Macro{dateenglish} & 24/12/1993\\ \Macro{datefinnish } & 24.12.1993.\\ \Macro{datefrancais} & 24.\,12.\,1993\\ \Macro{datefrench} & 24.\,12.\,1993\\ \Macro{dategerman} & 24.\,12.\,1993\\ \Macro{dateitalian} & 24.\,12.\,1993\\ \Macro{datenaustrian} & 24.\,12.\,1993\\ \Macro{datenewzealand}& 24/12/1993\\ \Macro{datengerman} & 24.\,12.\,1993\\ \Macro{datenorsk} & 24.12.1993\\ \Macro{datenswissgerman} & 24.\,12.\,1993\\ \Macro{datepolish} & 24.\,12.\,1993\\ \Macro{dateslovak} & 24.\,12.\,1993\\ \Macro{datespanish} & 24.\,12.\,1993\\ \Macro{dateswedish} & 24/12 1993\\ \Macro{dateswissgerman} & 24.\,12.\,1993\\ \Macro{dateUKenglish} & 24/12/1993\\ \Macro{dateUSenglish} & 12/24/1993\\ \bottomrule \end{tabular} \end{captionbeside} \label{tab:date} \end{table}% \EndIndexGroup% % \EndIndexGroup \iffree{}{\clearpage}% Umbruchkorrektur zwecks Ausgabe der Tabellen \section{Obsolete Anweisungen} \seclabel{obsolete} \BeginIndexGroup \LoadNonFree{scrlttr2-experts}{1} \EndIndexGroup % \iffalse% Es wird Zeit das komplett rauszuwerfen! \section{Von der obsoleten \Class{scrlettr} zur aktuellen \Class{scrlttr2}} \seclabel{fromscrlettr} \BeginIndexGroup \BeginIndex{Class}{scrlettr} Die\textnote{Achtung!} alte Briefklasse \Class{scrlettr} wurde mit Einführung von \Class{scrlttr2} (siehe \autoref{cha:scrlttr2}) 2002 obsolet und ist auch nicht mehr Bestandteil von \KOMAScript{}. Wer die Klasse oder Informationen dazu dennoch benötigt, findet sie in \cite{package:koma-script-obsolete}. Um den Umstieg von der alten auf die neue Klasse zu erleichtern, existiert mit \Option{KOMAold} eine Kompatibilitätseinstellung. Grundsätzlich ist in der neuen Klasse die gesamte alte Funktionalität enthalten. Ohne \Option{KOMAold} ist jedoch die Benutzerschnittstelle eine andere und auch die Voreinstellungen stimmen nicht überein. Näheres dazu ist \autoref{sec:scrlttr2.lcoFile}, \autoref{tab:lcoFiles} zu entnehmen. \LoadNonFree{scrlttr2-experts}{2} % \EndIndexGroup \fi % \EndIndexGroup \endinput %%% Local Variables: %%% mode: latex %%% mode: flyspell %%% coding: utf-8 %%% ispell-local-dictionary: "de_DE" %%% TeX-master: "guide.tex" %%% End: % LocalWords: Pseudolänge Pseudolängen Rücksendeadresse Faltmarke Briefseite % LocalWords: Sternvariante Geschäftszeile Testfeld Kopfbereich Vergleichsmaß % LocalWords: Dokumenterstellungsprozess Fußbereich Anschriftfenster Falt % LocalWords: Absenderergänzung Kundennummer Rechnungsnummer Falzmarken % LocalWords: Sprachumschaltpaketen Standardbriefklasse Seitenstilen % LocalWords: Paginierung Paginierungen Papiergröße Anschriftfeldes % LocalWords: Versandart Anschriftfensters Anschriftfeld Briefköpfe % LocalWords: Variableninhalt Schlussgruß Briefbogenfuß