% \CheckSum{1467}
% \iffalse meta-comment
% ======================================================================
% scrkernel-letterclassoptions.dtx
% Copyright (c) Markus Kohm, 2006-2013
%
% 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.
% ----------------------------------------------------------------------
% scrkernel-letterclassoptions.dtx
% Copyright (c) Markus Kohm, 2006-2013
%
% 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.
% ======================================================================
% \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: $Id: scrkernel-letterclassoptions.dtx 1499 2013-11-05 17:22:29Z mjk $
%<*driver>
% \fi
\ProvidesFile{scrkernel-letterclassoptions.dtx}[2013/11/05 v3.12 KOMA-Script 
                                                       (letter class options)]
% \iffalse
\documentclass{scrdoc}
\usepackage[english,ngerman]{babel}
\usepackage[latin1]{inputenc}
\CodelineIndex
\RecordChanges
\GetFileInfo{scrkernel-letterclassoptions.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/22}{%
%   erste Version aus der Aufteilung von \textsf{scrclass.dtx}}
%
% \section{Optionendateien für Briefe}
%
% Bei der Briefklasse tritt eine Besonderheit ein. Hier ist es
% möglich, spezielle \texttt{lco}-Dateien zu definieren, die über
% Optionen geladen werden können. Die unterschiedlichen Brieftypen
% sind ein Fall für solche \emph{\textbf{l}etter \textbf{c}lass
% \textbf{o}ption} Dateien.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \iffalse
%<*letter>
% \fi
%
% \iffalse
%<*option>
% \fi
%
% \subsection{Optionen für Letter-Class-Options}
%
% \begin{macro}{\lco@test}
%   \changes{v2.95}{2006/03/22}{Neu}
%   \changes{v2.97c}{2007/09/12}{an neue Optionenabarbeitung angepasst}
% Letter-Class-Optionen können auch für jede per |\documentclass| angegebene
% keyval-Option oder sonstige scan-Option (das sind Optionen, die nicht per
% |\DeclareOption| definiert wurden) geladen werden. Dabei wird die
% Abarbeitung der Option nicht unterbrochen. Dazu wird dieses Makro in den
% scan-Vorgang eingebaut
%    \begin{macrocode}
\newcommand*{\lco@test}{%
  \IfFileExists{\CurrentOption.lco}{%
    \expandafter\AtEndOfClass\expandafter{%
      \expandafter\LoadLetterOption\expandafter{\CurrentOption}%
    }%
    \expandafter\def\expandafter\scr@pti@nerr@r\expandafter{%
      \expandafter\def\expandafter\scr@pti@nerr@r\expandafter{%
        \scr@pti@nerr@r
      }%
    }%
  }{}%
}
%    \end{macrocode}
% \end{macro}
%
% Als Voreinstellung wird am Ende schon einmal die Datei \texttt{DIN.lco}
% geladen.
%    \begin{macrocode}
\AtEndOfClass{\LoadLetterOption{DIN}}
%    \end{macrocode}
%
% \iffalse
%</option>
%<*body>
% \fi
%
% \subsection{Makros für Letter-Class-Options}
%
% \begin{macro}{\LoadLetterOption}
%   \changes{v2.8q}{2001/10/08}{Neu}
% Bei der neuen Briefklasse existiert eine Anweisung, mit der eine
% \emph{\textbf{l}etter-\texttt{c}lass-\texttt{o}ption}-Datei geladen
% werden kann. Das Laden wird mit entsprechender Information in der
% \texttt{log}-Datei vermerkt. Damit in der Datei interne Makros
% verwendet werden können, muss der catcode von "`@"' entsprechend
% gesetzt sein. Damit der Befehl sowohl in der Präambel als auch in
% weiteren Optionen-Dateien oder in der Klasse selbst verwendet werden
% kann, muss der catcode am Ende wieder restauriert werden. Dabei muss
% etwas trickreich gearbeitet werden, damit tatsächlich eine
% Schachtelung möglich ist. So erfolgt die Umschaltung des catcodes
% immer nur beim ersten Aufruf innerhalb einer Schachtel.
%    \begin{macrocode}
\newcommand*{\LoadLetterOption}[1]{%
  \@ifundefined{@restore@catcode@level}%
    {\let\@restore@catcode@level=\z@}{}%
  \ifnum\@restore@catcode@level =\z@
    \ifnum\catcode`\@=11
      \let\@restore@catcode\relax
    \else
      \@tempcnta=\catcode`\@
      \edef\@restore@catcode{%
        \noexpand\catcode`\noexpand\@=\the\@tempcnta}%
      \makeatletter
    \fi
  \fi
  \@tempcnta=\@restore@catcode@level\relax
  \advance\@tempcnta by \@ne\relax
  \edef\@restore@catcode@level{\the\@tempcnta}%
  \InputIfFileExists{#1.lco}{%
    \ClassInfo{%
      scrlttr2%
      }{Letter-Class-Option `#1' loaded}%
    }{%
    \ClassError{%
      scrlttr2%
      }{%
      Letter-Class-Option file `#1.lco' not found%
      }{%
      You've told me to load the Letter-Class-Option `#1'. So I have
      to load\MessageBreak
      the file `#1.lco'. But the file isn't available.}%
    }%
  \@tempcnta=\@restore@catcode@level\relax
  \advance\@tempcnta by \m@ne\relax
  \edef\@restore@catcode@level{\the\@tempcnta}%
  \ifnum\@tempcnta =\z@
    \@restore@catcode
  \fi
  }
%    \end{macrocode} 
% \end{macro}
%
% \begin{macro}{\LetterOptionNeedsPapersize}
%   \changes{v2.8q}{2001/10/17}{Neu}
% Es besteht die Möglichkeit, in \texttt{lco}-Dateien eine bestimmte
% Papiergröße zu fordern. Dazu wird der Name der \texttt{lco}-Datei
% und die geforderte Papiergröse als Parameter übergeben. Stimmt die
% Papiergröße nicht überein, so wird bei \cs{opening} eine Warnung
% ausgegeben.
% \begin{macro}{\@PapersizeWarning}
%   \changes{v2.8q}{2002/03/25}{Neu (intern)}%^^A
%   \changes{v3.12}{2013/11/05}{Abweichung von 1\,mm nach unten und oben
%     erlaubt}%^^A
% \begin{macro}{\@@PapersizeWarning}
%   \changes{v2.8q}{2002/03/25}{Neu (intern)}%^^A
% \begin{macro}{\LOPNP@size}
%   \changes{v2.8q}{2002/03/25}{Neu (intern)}%^^A
% \begin{macro}{\LOPNP@option}
%   \changes{v2.8q}{2002/03/25}{Neu (intern)}%^^A
% Zur einfacheren Realisierung wird mit vier internen Hilfsmakros
% gearbeitet.
%    \begin{macrocode}
\newcommand*{\LOPNP@option}{}
\newcommand*{\LOPNP@size}{}
\newcommand*{\@PapersizeWarning}{%
  \begingroup%
    \edef\@tempc{\noexpand\@tempswafalse
      \noexpand\ifdim\paperwidth<\the\dimexpr\paperwidth-.1mm\relax
      \relax
      \noexpand\else
        \noexpand\ifdim\paperwidth>\the\dimexpr\paperwidth+.1mm\relax
        \relax
        \noexpand\else
          \noexpand\ifdim\paperheight<\the\dimexpr\paperheight-.1mm\relax
          \relax
          \noexpand\else
            \noexpand\ifdim\paperheight>\the\dimexpr\paperheight+.1mm\relax
            \relax
            \noexpand\else
              \noexpand\@tempswatrue
            \noexpand\fi
          \noexpand\fi
        \noexpand\fi
      \noexpand\fi
      \noexpand\@@PapersizeWarning
    }%
    \def\@tempb{letter}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{11in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{legal}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{14in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{executive}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{10.5in}\setlength{\paperwidth}{7.25in}%
    \else%
      \def\ta@opt@err{%
        \ClassError{%
          scrlttr2%
          }{papersize `\LOPNP@size' undefined}{%
          You've told me to check for paper size
          `\LOPNP@size'\MessageBreak
          at letter option file `\LOPNP@option.lco',\MessageBreak
          but this paper size is not supported.\MessageBreak
          See the KOMA-Script manual for informations about known
          paper sizes.}%
        }%
      \let\@headlines\ta@opt@err%
      \expandafter\x@@paper\LOPNP@size paperpaper\x@@paper%
    \fi\fi\fi
    \@tempc
  \endgroup%
}
\newcommand*{\@@PapersizeWarning}{%
  \if@tempswa\else%
  \ClassWarningNoLine{%
    scrlttr2%
    }{%
    Letter option file `\LOPNP@option.lco'\MessageBreak
    needs paper size `\LOPNP@size'.\MessageBreak
    Current paper size is not `\LOPNP@size'!\MessageBreak
    You should add `paper=\LOPNP@size' at the\MessageBreak
    option list of \string\documentclass!\MessageBreak
    Maybe you know what you are doing,\MessageBreak
    so I do not change this myself}%
  \fi
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%    \begin{macrocode}
\newcommand*{\LetterOptionNeedsPapersize}[2]{%
  \edef\LOPNP@size{#2}\edef\LOPNP@option{#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \iffalse
%</body>
%</letter>
% \fi
%
% \subsection{Die Letter-Class-Optionen}
%
% Die Letter-Class-Optionen selbst werden wie bereits erwähnt über Dateien
% realisiert. In den vorgefertigen Dateien für unterschiedliche Arten von
% Briefen werden in erster Linie Pseudo-Längen passend gesetzt. In einigen
% Fällen werden aber auch zusätzlich Befehle umdefiniert.
%
% \iffalse
%<*lco>
% \fi
%
% \subsubsection{Der Datei Kopf}
%
% \iffalse
%<*head>
% \fi
%
% Im Kopf ist natürlich die Datei zu deklarieren:
% \changes{v3.04}{2009/04/21}{neue LCO \texttt{NF} von Jean-Marie Pacquet
%   übernommen und ergänzt}
% \changes{v3.04}{2009/06/26}{neue LCO \texttt{USletter2w} in Zusammenarbeit
%   mit Engelbert Buxbaum und Richard Ar\`es geschaffen}
% \changes{v3.04}{2009/06/29}{neue LCO \texttt{UScommercial9DW} für Papier im
%   Format letter oder legal in Umschlägen im Format commercial No.\,9 mit
%   zwei Fenstern}
% \changes{v3.04}{2009/06/30}{neue LCO \texttt{UScommercial9} für Papier im
%   Format letter oder legal in Umschlägen im Format commercial No.\,9 mit
%   einem Fenster auf Basis von \texttt{http://www.envelopesuperstore.com/}}
% \changes{v3.04}{2009/06/26}{seit langem existierende LCO \texttt{visualize}
%   zur Visualisierung einiger Pseudolängen aufgenommen}
%    \begin{macrocode}
\ProvidesFile{%
%<visualize>  visualize%
%<DIN>  DIN%
%<DINmoretext> DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
%<NF>  NF%
%<USletter2w>  USletter2w
%<UScommercial9>  UScommercial9
%<UScommercial9DW>  UScommercial9DW
  .lco}[\KOMAScriptVersion\space letter-class-option]
%    \end{macrocode}
%
% \begin{macro}{\LCOWarningNoLine}
%   \changes{v2.95}{2006/03/24}{Neu}
% \begin{macro}{\LCOWarning}
%   \changes{v2.95}{2006/03/24}{Neu}
% Außerdem wird ein Makro benötigt, das analog zu |\ClassWarningNoLine| oder
% |\PackageWarningNoLine| funktioniert.
\providecommand*\LCOWarningNoLine[2]{%
  \LCOWarning{#1}{#2\@gobble}%
}
\providecommand*\LCOWarning[2]{%
  \GenericWarning{%
    (#1)\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces
  }{%
    Letter class option  #1 Warning: #2%
  }%
}
% \end{macro}
% \end{macro}
%
% \iffalse
%</head>
%<*body>
%<*!visualize>
% \fi
%
% \subsubsection{Der Hauptteil}
%
% Die Maße für einige Optionen wurden nicht von mir selbst recherchiert:
% \begin{center}
%   \begin{tabular}{ll}
%   \texttt{lco}-Datei & Recherchiert von \\\hline\\[-1.6ex]
%   DIN                & mir \\
%   DINmtext           & mir \\
%   KOMAold            & mir \\
%   SNleft             & Roger Luethi \\
%   SN                 & Roger Luethi \\
%   NF                 & Jean-Marie Pacquet \\
%   USletter2w         & Engelbert Buxbaum \\
%   UScommercial9      & mir \\
%   UScommercial9DW    & mir \\
%   \end{tabular}{ll}
% \end{center}
%
% Zunächst wird geprüft, ob überhaupt die richtige Klasse geladen ist.
%    \begin{macrocode}
\@ifundefined{scr@fromname@var}{%
  \LCOWarningNoLine{%
%<DIN>    DIN%
%<DINmoretext>   DINmtext%
%<SN>    SN%
%<SNold>    SNold%
%<SwissLeft>    SNleft%
%<KOMAold>    KOMAold%
%<NF>    NF%
%<USletter2w>    USletter2w%
%<UScommercial9>    UScommercial9%
%<UScommercial9DW>    UScommercial9DW%
  }{%
    This letter class option file was made only\MessageBreak
    to be used with KOMA-Script letter class\MessageBreak
    `scrlttr2'. Use with other classes may result\MessageBreak
    in a lot of errors%
  }%
}{}
%    \end{macrocode}
%
% Dann wird geprüft, ob das richtige Papierformat vorhanden ist.
%    \begin{macrocode}
\LetterOptionNeedsPapersize{%
%<DIN>  DIN%
%<DINmoretext>  DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
%<NF>  NF%
%<USletter2w>  USletter2w%
%<UScommercial9>  UScommercial9%
%<UScommercial9DW>  UScommercial9DW%
%<*DIN|DINmoretext|SN|SNold|SwissLeft|KOMAold|NF>
}{a4}
%</DIN|DINmoretext|SN|SNold|SwissLeft|KOMAold|NF>
%<*USletter2w|UScommercial9|UScommercial9DW>
}{letter}
%</USletter2w|UScommercial9|UScommercial9DW>
%    \end{macrocode}
%
% Dann werden die Werte gesetzt.
% \begin{description}
% \item[ZIP-Code]
%   \changes{v3.03}{2009/03/04}{Bezeichner der Variablen \texttt{fromzipcode}
%   wird gesetzt}
%    \begin{macrocode}
%<!KOMAold>\setkomavar*{fromzipcode}{%
%<DIN|DINmoretext>  D}
%<SwissLeft|SN>  CH}
%<NF>  F}
%<USletter2w|UScommercial9|UScommercial9DW>  US}
%    \end{macrocode}
% \item[Faltmarken]
%   \changes{v2.97e}{2007/11/20}{Die neuen Faltmarken werden berücksichtigt.}
%    \begin{macrocode}
\@setplength{foldmarkhpos}{3.5mm}
\@setplength{tfoldmarkvpos}{%
%<DIN|SwissLeft|SN>  105mm}
%<DINmoretext>  87mm}
%<KOMAold>  103.5mm}
%<NF>  99mm}
%<USletter2w|UScommercial9|UScommercial9DW>  3.75in}
\@setplength{mfoldmarkvpos}{\z@}
\@setplength{bfoldmarkvpos}{%
%<DIN|SwissLeft|SN>  210mm}
%<DINmoretext>  192mm}
%<KOMAold>  202.5mm}
%<NF>  198mm}
%<USletter2w>  7.4in}
%<UScommercial9|UScommercial9DW>  7.375in}
\@setplength{lfoldmarkhpos}{\z@}
%    \end{macrocode}
% \item[Anschrift]
%    \begin{macrocode}
\@setplength{toaddrvpos}{%
%<DIN|SN>  45mm}
%<DINmoretext>  27mm}
%<SwissLeft>  35.5mm}
%<KOMAold>  49mm}
%<NF>  35mm}
%<USletter2w>  1.8in}
%<UScommercial9|UScommercial9DW>  2.1875in}
\@setplength{toaddrhpos}{%
%<DIN|DINmoretext|SwissLeft>  20mm}
%<SN>  -8mm}
%<KOMAold>  1in}
%<KOMAold>\@addtoplength{toaddrhpos}{\oddsidemargin}
%<NF>  -10mm}
%<USletter2w>  .73in}
%<UScommercial9>  0.6875in}
%<UScommercial9DW>  .5625in}
\@setplength{toaddrwidth}{%
%<DIN|DINmoretext>  85mm}
%<SN>  90mm}
%<SwissLeft|NF>  100mm}
%<KOMAold>  70mm}
%<USletter2w>  3.11in}
%<UScommercial9>  4.5in}
%<UScommercial9DW>  3.625in}
%    \end{macrocode}
% \changes{v3.03}{2009/06/25}{Anschriftfeld enthält laut Doku die
%   Rücksendeadresse, also machen wir das jetzt auch so}
%    \begin{macrocode}
\@setplength{toaddrheight}{%
%<DIN|DINmoretext|SN|SwissLeft|KOMAold|NF>  45mm}
%<USletter2w>  1.17in}
%<UScommercial9|UScommercial9DW>  1.125in}
\@setplength{toaddrindent}{%
%<DIN|DINmoretext|SN|SwissLeft|KOMAold|USletter2w|UScommercial9|UScommercial9DW>  \z@}
%<NF>  10mm}
\@setplength{backaddrheight}{%
%<DIN|DINmoretext|SN|SwissLeft|KOMAold|NF>  5mm}
%<USletter2w|UScommercial9|UScommercial9DW>  \z@}
%<USletter2w|UScommercial9|UScommercial9DW>\KOMAoptions{backaddress=false}
\@setplength{specialmailindent}{\fill}
\@setplength{specialmailrightindent}{1em}
%    \end{macrocode}
% \item[Absenderergänzung]
%    \begin{macrocode}
\@setplength{locwidth}{%
%<DIN|DINmoretext|SN|SwissLeft|KOMAold|NF|USletter2w|UScommercial9|UScommercial9DW>  \z@}
%    \end{macrocode}
% \item[Kopf]
%    \begin{macrocode}
\@setplength{firstheadvpos}{%
%<DIN|DINmoretext|SN|SwissLeft>  8mm}
%<KOMAold>  6mm}
%<NF>  15mm}
%<USletter2w>  .36in}
%<UScommercial9|UScommercial9DW>  .4375in}
\@setplength{firstheadwidth}{%
%<KOMAold>  \textwidth}
%<NF>  170mm}
%<*DIN|DINmoretext|SN|SwissLeft|UScommercial9>
  \paperwidth}
\ifdim \useplength{toaddrhpos}>\z@
  \@addtoplength[-2]{firstheadwidth}{\useplength{toaddrhpos}}
\else
  \@addtoplength[2]{firstheadwidth}{\useplength{toaddrhpos}}
\fi
%</DIN|DINmoretext|SN|SwissLeft|UScommercial9>
%<*USletter2w>
  \paperwidth}
\@addtoplength[-]{firstheadwidth}{.68in}
%</USletter2w>
%<*UScommercial9DW>
  \paperwidth}
\@addtoplength[-]{firstheadwidth}{.25in}
%</UScommercial9DW>
%    \end{macrocode}
% \item[Fuß]
% \changes{v2.9u}{2005/03/05}{Der Fuß hat optional eine feste Position 16\,mm
%   über der unteren Papierkante.}
%    \begin{macrocode}
\@setplength{firstfootwidth}{\useplength{firstheadwidth}}
%<KOMAold>\@setplength{firstfootvpos}{\paperheight}
%<KOMAold>\@addtoplength{firstfootvpos}{-2cm}
%<!KOMAold&!NF>\ifnum \scr@compatibility >\@nameuse{scr@v@2.9t}\relax
%<!KOMAold&!NF>  \@setplength{firstfootvpos}{\paperheight}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{-16mm}
%<!KOMAold&!NF>\else
%<!KOMAold&!NF>  \@setplength{firstfootvpos}{1in}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{\topmargin}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{\headheight}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{\headsep}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{\textheight}
%<!KOMAold&!NF>  \@addtoplength{firstfootvpos}{\footskip}
%<!KOMAold&!NF>\fi
%<NF>\@setplength{firstfootvpos}{266.679mm}
%    \end{macrocode}
% \item[Geschäftszeile]
%    \begin{macrocode}
\@setplength{refvpos}{%
%<DIN|SN>  98.5mm}
%<DINmoretext>  80.5mm}
%<SwissLeft>  89mm}
%<KOMAold>  89.5mm}
%<NF>  \useplength{tfoldmarkvpos}}
%<USletter2w>  3.1in}
%<UScommercial9|UScommercial9DW>  3.4375in}
\@setplength{refaftervskip}{%
%<!KOMAold>  \baselineskip}
%<KOMAold>  2\baselineskip}
%    \end{macrocode}
% Bei der Breite der Geschäftszeile brauchen wir wieder eine Sonderlösung,
% damit die Option "`wide"' auch später noch gesetzt werden kann. Also
% verwenden wir hier den Wert 0 als mit der Bedeutung "`ist bei \cs{opening}
% zu berechnen.
%    \begin{macrocode}
\@setplength{refwidth}{0pt}
%    \end{macrocode}
% \item[Signature]
%    \begin{macrocode}
\@setplength{sigindent}{0mm}
\@setplength{sigbeforevskip}{2\baselineskip}
%<DIN|DINmoretext|SN|SwissLeft>\let\raggedsignature=\centering
%<KOMAold|NF|USletter2w|UScommercial9|UScommercial9DW>\let\raggedsignature=\raggedright
%    \end{macrocode}
% \end{description}
% Es folgen ggf. noch zusätzliche Änderungen.
%    \begin{macrocode}
%<*DINmoretext>
\renewcommand*{\@firsthead}{\noindent
  \parbox[b]{\useplength{firstheadwidth}}{\centering%
    \usekomafont{fromaddress}{%
      \ifkomavarempty{fromname}{}{%
        \usekomafont{fromname}%
        {\ignorespaces\usekomavar{fromname}\\[-8pt]
          \rule{\useplength{firstheadwidth}}{.4pt}\\
          }%
        }%
      \ifkomavarempty{fromaddress}{}{%
        \def\\{,\ \@ogobble}%
        \ignorespaces\usekomavar{fromaddress}%
        }%
      }%
    }%
  }
%</DINmoretext>
%    \end{macrocode}
%
% Außerdem gibt es noch die Kompatibilitätseinstellungen, die ebenfalls von
% \texttt{KOMAold} aktiviert werden.
%    \begin{macrocode}
%<*KOMAold>
\def\yourref{\setkomavar{yourref}}
\def\yourmail{\setkomavar{yourmail}}
\def\myref{\setkomavar{myref}}
\def\customer{\setkomavar{customer}}
\def\invoice{\setkomavar{invoice}}
\@ifundefined{scr@refitemi@var}{\newkomavar{refitemi}}{}
\def\refitemi{\setkomavar{refitemi}}
\def\refitemnamei{\setkomavar*{refitemi}}
\@ifundefined{scr@refitemii@var}{\newkomavar{refitemii}}{}
\def\refitemii{\setkomavar{refitemii}}
\def\refitemnameii{\setkomavar*{refitemii}}
\@ifundefined{scr@refitemiii@var}{\newkomavar{refitemiii}}{}
\def\refitemiii{\setkomavar{refitemiii}}
\def\refitemnameiii{\setkomavar*{refitemiii}}
\l@addto@macro{\defaultreffields}{%
  \addtoreffields{refitemi}%
  \addtoreffields{refitemii}%
  \addtoreffields{refitemiii}%
  }
\addtoreffields{refitemi}%
\addtoreffields{refitemii}%
\addtoreffields{refitemiii}%
\def\toname{\usekomavar{toname}}
\def\toaddress{\usekomavar{toaddress}}
\@ifundefined{scr@branch@var}{\newkomavar{branch}}{}
\def\branch{\setkomavar{branch}}
\def\frombranch{\usekomavar{branch}}
\def\signature{\setkomavar{signature}}
\def\fromsig{\usekomavar{signature}}
\def\name{\setkomavar{fromname}}
\def\fromname{\usekomavar{fromname}}
\def\address{\setkomavar{fromaddress}}
\def\fromaddress{\usekomavar{fromaddress}}
\def\location{\setkomavar{location}}
\def\fromlocation{\usekomavar{location}}
\def\backaddress{\setkomavar{backaddress}}
\def\@tempa{%
  \ifkomavarempty{fromname}{}{%
    \strut\ignorespaces\usekomavar{fromname}%
    \ifkomavarempty{fromaddress}{}{\\}}%
  \ifkomavarempty{fromaddress}{}{%
    \strut\ignorespaces\usekomavar{fromaddress}}%
  }
\ifx\@tempa\scr@backaddress@var%
  \setkomavar{backaddress}{}
\fi
\def\frombackaddress{\usekomavar{backaddress}}
\def\telephone{\setkomavar{fromphone}}
\def\telephonenum{\usekomavar{fromphone}}
\def\specialmail{\setkomavar{specialmail}}
\def\@specialmail{\usekomavar{specialmail}}
\def\title{\setkomavar{title}}
\def\@title{\usekomavar{title}}
\def\subject{\setkomavar{subject}}
\def\@subject{\usekomavar{subject}}
\def\place{\setkomavar{place}}
\def\fromplace{\usekomavar{place}}
\let\ccnameseparator=\scr@ccseparator@var
\setkomavar{ccseparator}{\ccnameseparator}
\let\enclnameseparator=\scr@enclseparator@var
\setkomavar{enclseparator}{\enclnameseparator}
\setkomafont{fromname}{\scshape}
\def\foldmarkson{\@ObsoleteCommand{\foldmarkson}{foldmarks=on}}
\def\foldmarksoff{\@ObsoleteCommand{\foldmarksoff}{foldmarks=off}}
\def\addrfieldon{\@ObsoleteCommand{\addrfieldon}{addrfield=on}}
\def\addrfieldoff{\@ObsoleteCommand{\addrfieldoff}{addrfield=off}}
\def\subjecton{\@ObsoleteCommand{\subjecton}{subject=titled}}
\def\subjectoff{\@ObsoleteCommand{\subjectoff}{subject=untitled}}
\def\subjectafteron{%
  \@ObsoleteCommand{\subjectafteron}{subject=afteropening}}
\def\subjectafteroff{%
  \@ObsoleteCommand{\subjectafteroff}{subject=beforeopening}}
%</KOMAold>
%    \end{macrocode}
%
% \iffalse
%</!visualize>
%<*visualize>
% \fi
%
% \subsection{Makros zur Visualisierung diverser Felder in einem Brief}
%
% Diese Makros werden nur von \texttt{visualize.lco} verwendet und stellen den
% Hauptteil dieser LCO dar.
%
% Das Paket benötigt \textsf{eso-pic}. Das Paket wird nur dann explizit
% geladen, wenn dies nicht bereits geschehen ist. Damit ist es möglich das
% Paket mit Optionen vor der LCO zu laden:
%    \begin{macrocode}
\@ifpackageloaded{eso-pic}{}{\RequirePackage{eso-pic}}
%    \end{macrocode}
%
% \begin{macro}{\showfields}
% Diese Anweisung erlaubt es, eine Reihe von Felder zu visualisieren. Dazu
% gibt man die gewünschten Felder als Komma separierte Liste im ersten und
% einzigen Argument der Anweisung an. Gibt man ein unbekanntes Feld an, so
% wird nicht etwa ein Fehler, sondern nur eine Warnung ausgegeben. Die
% Visualisierung erfolgt im Hintergrund. Dies wird mit Hilfe des Pakets
% \textsf{eso-pic} erreicht. Wichtig ist noch, dass die Anweisung nicht
% zurückgenommen werden kann.
%    \begin{macrocode}
\newcommand*{\showfields}[1]{%
  \AtBeginLetter{%
    \begingroup
      \@for \@tempa:=#1\do{%
        \ifx\@tempa\@empty\else
          \@ifundefined{showfield@\@tempa}{%
            \LCOWarning{visualize}{Unknown field `\@tempa' ignored}%
          }{%
            \edef\@tempa{%
              \noexpand\AddToShipoutPicture*{%
                \noexpand\AtPageUpperLeft{%
                  \noexpand\usekomafont{field}%
                  \noexpand\@nameuse{showfield@\@tempa}%
                }%
              }%
            }\@tempa
          }%
        \fi
      }%
    \endgroup
  }%
}
%    \end{macrocode}
% \begin{KOMAfont}{field}
% Die Visualisierung erfolgt dabei in einer wählbaren Farbe, die über das
% Element \cs{field} definiert ist. Voreingestellt ist dabei
% \cs{normalcolor}.
%    \begin{macrocode}
\newkomafont{field}{\normalcolor}
%    \end{macrocode}
% \end{KOMAfont}
% \end{macro}
%
% \begin{macro}{\showfield}
% Die Visualisierung der einzelnen Felder erfolgt über eigene Anweisungen des
% Aufbaus \cs{showfield@\emph{Feldname}}. In der Regel sind die Felder
% rechteckig. Zur Visualisierung solcher Felder können daher einheitliche
% Anweisungen verwendet werden. Diese besitzen vier Argumente:
% \begin{enumerate}
% \item Abstand vom linken Rand (x-Koordinate des Rahmens)
% \item Abstand vom oberen Rand (y-Koordinate des Rahmens)
% \item Breite des Feldes
% \item Höhe des Feldes; ist dieser Wert negativ gibt es keine feste Höhe,
%       sondern nur eine Art unbestimmte Ausdehnung mit einer Mindesthöhe
% \end{enumerate}
%
% \begin{macro}{\showfield@by@frame}
% Diese Anweisung visualisiert ein rechteckiges Feld durch Rahmen. Bei einer
% negativen Höhe wird ein unten offener Rahmen gezeichnet, bei dem die
% vertikalen Linien als Pfeile nach unten ausgeführt werden.
%    \begin{macrocode}
\newcommand*{\showfield@by@frame}[4]{%
  \thinlines
  \ifdim #4<\z@
    \put(\LenToUnit{#1},-\LenToUnit{#2}){\line(1,0){\LenToUnit{#3}}}%
    \setlength{\@tempdima}{\dimexpr #1+#3\relax}%
    \setlength{\@tempdimb}{#4}
    \put(\LenToUnit{#1},-\LenToUnit{#2}){%
      \vector(0,-1){\LenToUnit{-\@tempdimb}}}%
    \put(\LenToUnit\@tempdima,-\LenToUnit{#2}){%
      \vector(0,-1){\LenToUnit{-\@tempdimb}}}%
  \else
    \put(\LenToUnit{#1},-\LenToUnit{#2}){\line(1,0){\LenToUnit{#3}}}%
    \put(\LenToUnit{#1},-\LenToUnit{#2}){\line(0,-1){\LenToUnit{#4}}}%
    \setlength{\@tempdima}{\dimexpr #1+#3\relax}%
    \setlength{\@tempdimb}{\dimexpr #2+#4\relax}%
    \put(\LenToUnit\@tempdima,\LenToUnit{-\@tempdimb}){%
      \line(-1,0){\LenToUnit{#3}}}%  
    \put(\LenToUnit\@tempdima,\LenToUnit{-\@tempdimb}){%
      \line(0,1){\LenToUnit{#4}}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\showfield@by@edges}
% Diese Anweisung visualisert ein rechteckiges Feld, indem es die Ecken des
% Feldes durch kleine Striche markiert. Bei negativer Höhe entfallen die
% unteren Eckmarkierungen.
%    \begin{macrocode}
\newcommand*{\showfield@by@edges}[4]{%
  \thinlines
  \setlength{\@tempdima}{\dimexpr #1+#3\relax}%
  \put(\LenToUnit{#1},-\LenToUnit{#2}){\line(1,0){\LenToUnit{\edgesize}}}%
  \put(\LenToUnit{#1},-\LenToUnit{#2}){\line(0,-1){\LenToUnit{\edgesize}}}%
  \put(\LenToUnit{\@tempdima},-\LenToUnit{#2}){\line(-1,0){\LenToUnit{\edgesize}}}%
  \put(\LenToUnit{\@tempdima},-\LenToUnit{#2}){\line(0,-1){\LenToUnit{\edgesize}}}%
  \ifdim #4<\z@\else
    \setlength{\@tempdimb}{\dimexpr #2+#4\relax}%
    \put(\LenToUnit{#1},-\LenToUnit{\@tempdimb}){\line(1,0){\LenToUnit{\edgesize}}}%
    \put(\LenToUnit{#1},-\LenToUnit{\@tempdimb}){\line(0,1){\LenToUnit{\edgesize}}}%
    \put(\LenToUnit{\@tempdima},-\LenToUnit{\@tempdimb}){\line(-1,0){\LenToUnit{\edgesize}}}%
    \put(\LenToUnit{\@tempdima},-\LenToUnit{\@tempdimb}){\line(0,1){\LenToUnit{\edgesize}}}%
  \fi
}
%    \end{macrocode}
% \begin{macro}{\edgesize}
% Die Länge der Ecklinien wird über dieses Makro bestimmt. Voreingestellt ist
% 1\,ex.
%    \begin{macrocode}
\newcommand*{\edgesize}{1ex}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\showfield@by@rule}
% Diese Anweisung visualisiert ein rechteckiges Feld, indem es das komplette
% Feld einfärbt. Es wird hier nicht zwischen unten offenen und geschlossenen
% Feldern unterschieden.
%    \begin{macrocode}
\newcommand*{\showfield@by@rule}[4]{%
  \ifdim #4<\z@
    \put(\LenToUnit{#1},-\LenToUnit{#2}){\rule[#4]{#3}{-#4}}%
  \else
    \put(\LenToUnit{#1},-\LenToUnit{#2}){\rule[-#4]{#3}{#4}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% Die Voreinstellung für die Visualsierung ist mit Rahmen:
%    \begin{macrocode}
\newcommand*{\showfield}{}
\let\showfield\showfield@by@frame
%    \end{macrocode}
%
% \begin{macro}{\setshowstyle}
% Dieser Stil der Visualisierung kann per Anweisung umgeschaltet
% werden. Existiert ein Stil nicht, so wird kein Fehler gemldet, sondern
% lediglich eine Warnung und der Standardstil verwendet:
%    \begin{macrocode}
\newcommand*{\setshowstyle}[1]{%
  \@ifundefined{showfield@by@#1}{%
    \LCOWarning{visualize}{Unknown show type `#1'.\MessageBreak
      You should simply set one of the supported\MessageBreak
      show types `frame', `edges', `rule'.\MessageBreak
      Style `frame' will be used instead}%
    \let\showfield\showfield@by@frame
  }{%
    \expandafter\let\expandafter\showfield\csname showfield@by@#1\endcsname
  }%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% Die folgenden Felder werden derzeit unterstützt:
% \begin{macro}{\showfield@test}
% ein Testfeld \texttt{test} mit den Koordinaten:
% $(1\,\mathrm{cm},1\,\mathrm{cm})\times(10\,\mathrm{cm},15\,\mathrm{cm})$
%    \begin{macrocode}
\newcommand*{\showfield@test}{%
  \showfield{1cm}{1cm}{10cm}{15cm}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\showfield@head}
%   \changes{v3.05}{2009/11/09}{neue Pseudo-Länge \texttt{firstheadhpos}
%     beachtet}
% das Feld \texttt{head} für den Kopfbereich des Briefbogens:
%    \begin{macrocode}
\newcommand*{\showfield@head}{%
  \ifdim\useplength{firstheadhpos}<\paperwidth
    \ifdim \useplength{firstheadhpos}>-\paperwidth
      \ifdim \useplength{firstheadhpos}<\z@
        \setlength\@tempskipa{\paperwidth}%
        \addtolengthplength{\@tempskipa}{firstheadhpos}%
        \addtolengthplength[-]{\@tempskipa}{firstheadwidth}%
      \else
        \setlength{\@tempskipa}{\useplength{firstheadhpos}}%
      \fi
    \else
      \setlength\@tempskipa{\oddsidemargin}%
      \addtolength\@tempskipa{1in}%
    \fi
  \else
    \setlength\@tempskipa{.5\paperwidth}%
    \addtolengthplength[-.5]{\@tempskipa}{firstheadwidth}%
  \fi
  \showfield{\@tempskipa}%
            {\useplength{firstheadvpos}}%
            {\useplength{firstheadwidth}}%
            {-\headheight}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\showfield@foot}
%   \changes{v3.05}{2009/11/09}{neue Pseudo-Länge \texttt{firstfoothpos}
%     beachtet}
% das Feld \texttt{foot} für den Fußbereich des Briefbogens:
%    \begin{macrocode}
\newcommand*{\showfield@foot}{%
  \ifdim\useplength{firstfoothpos}<\paperwidth
    \ifdim \useplength{firstfoothpos}>-\paperwidth
      \ifdim \useplength{firstfoothpos}<\z@
        \setlength\@tempskipa{\paperwidth}%
        \addtolengthplength{\@tempskipa}{firstfoothpos}%
        \addtolengthplength[-]{\@tempskipa}{firstfootwidth}%
      \else
        \setlength{\@tempskipa}{\useplength{firstfoothpos}}%
      \fi
    \else
      \setlength\@tempskipa{\oddsidemargin}%
      \addtolength\@tempskipa{1in}%
    \fi
  \else
    \setlength\@tempskipa{.5\paperwidth}%
    \addtolengthplength[-.5]{\@tempskipa}{firstfootwidth}%
  \fi
  \showfield{\@tempskipa}%
            {\useplength{firstfootvpos}}%
            {\useplength{firstfootwidth}}%
            {-\baselineskip}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\showfield@address}
%   \changes{v3.07a}{2011/01/10}{Implementierung der Höhe an die Änderung in
%   \textsf{scrlttr}~3.03b angepasst.}
% das Feld \texttt{address} für das Feld mit der Anschrift:
%    \begin{macrocode}
\newcommand*{\showfield@address}{%
  \setlengthtoplength{\@tempskipa}{toaddrhpos}%
  \ifdim \@tempskipa<\z@
    \addtolength{\@tempskipa}{\paperwidth}%
    \addtolengthplength[-]{\@tempskipa}{toaddrwidth}%
  \fi
  \showfield{\@tempskipa}{\useplength{toaddrvpos}}%
            {\useplength{toaddrwidth}}%
            {\dimexpr\useplength{toaddrheight}\relax}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\showfield@location}
%   \changes{v3.07a}{2011/01/10}{Implementierung der Höhe an die Änderung in
%   \textsf{scrlttr}~3.03b angepasst.}
% das Feld \texttt{location} mit der Absenderergänzung:
%    \begin{macrocode}
\newcommand*{\showfield@location}{%
  \begingroup
    \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%
    \ifdim \useplength{lochpos}=\z@%
      \@setplength{lochpos}{\useplength{toaddrhpos}}%
    \fi
    \ifdim \useplength{locvpos}=\z@%
      \@setplength{locvpos}{\useplength{toaddrvpos}}%
    \fi
    \ifdim \useplength{locheight}=\z@%
      \@setplength{locheight}{\useplength{toaddrheight}}%
    \fi
    \setlengthtoplength[-]{\@tempskipa}{lochpos}%
    \ifdim \@tempskipa<\z@
      \addtolength{\@tempskipa}{\paperwidth}%
    \else
      \addtolengthplength{\@tempskipa}{locwidth}%
    \fi
    \addtolengthplength[-]{\@tempskipa}{locwidth}%
    \showfield{\@tempskipa}{\useplength{locvpos}}%
              {\useplength{locwidth}}{\useplength{locheight}}%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\showfield@refline}
% das Feld mit der Geschäftszeile:
%    \begin{macrocode}
\newcommand*{\showfield@refline}{%
  \begingroup
    \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
          \setlength\@tempdima{\textwidth}%
          \addtolengthplength[-]{\@tempdima}{refwidth}%
          \setlength\@tempdimb{\oddsidemargin}%
          \addtolength\@tempdimb{1in}%
          \setlength{\@tempdimc}{\paperwidth}%
          \addtolength{\@tempdimc}{-\textwidth}%
          \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
    \showfield{\useplength{refhpos}}{\useplength{refvpos}}%
              {\useplength{refwidth}}{-1.5\baselineskip}%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\showenvelope}
% \begin{macro}{\@showenvelope}
% \begin{macro}{\@@showenvelope}
% \begin{macro}{\@@@showenvelope}
% Es kann auch ein Briefumschlag angezeigt werden. Dazu müssen verschiedene
% Parameter des Umschlags bekannt sein. Der Umschlag wird immer hochkant auf
% der aktuellen Seite angezeigt. Hierfür wird das Paket \textsf{graphicx}
% benötigt. Das Paket wird nur dann explizit geladen, wenn dies nicht bereits
% geschehen ist. Damit ist es möglich das Paket mit Optionen vor der LCO zu
% laden.
%    \begin{macrocode}
\@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}
\newcommand*{\showenvelope}{}
\newcommand*{\@@showenvelope}{}
\newcommand*{\@@@showenvelope}{}
\def\showenvelope(#1,#2){%
  \@ifnextchar (%)
    {\@showenvelope({#1},{#2})}%
    {\@@@showenvelope({#1},{#2})}%
}
\def\@@@showenvelope(#1,#2){%
  \begingroup
    \def\@tempa{\endgroup}%
    \ifdim \paperwidth>#1\relax
      \LCOWarning{visualize}{%
        \string\paperwidth\space > envelope width not supported}%
    \else
      \ifdim \paperheight>#2\relax
        \ifdim .5\paperheight>#2\relax
          \expandafter\ifdim \useplength{tfoldmarkvpos}>#2\relax
            \LCOWarning{visualize}{%
              tfoldmarkvpos > envelope height not supported}%
          \else
            \def\@tempa{\endgroup
              \@showenvelope({#1},{#2})%
                            ({\dimexpr (#1-\paperwidth)/2\relax},%
                             {\dimexpr (#2-\expandafter\dimexpr
                                        \useplength{tfoldmarkvpos}\relax)%
                                       /2\relax})%
            }%
          \fi
        \else
          \def\@tempa{\endgroup
            \@showenvelope({#1},{#2})%
                          ({\dimexpr (#1-\paperwidth)/2\relax},%
                           {\dimexpr (#2-.5\paperheight)/2\relax})%
          }%
        \fi
      \else
        \def\@tempa{\endgroup
          \@showenvelope({#1},{#2})%
                        ({\dimexpr (#1-\paperwidth)/2\relax},%
                         {\dimexpr (#2-\paperheight)/2\relax})%
        }%
      \fi
    \fi
  \@tempa
}
\def\@showenvelope(#1,#2)(#3,#4){%
  \@ifnextchar [%]
    {\@@showenvelope({#1},{#2})({#3},{#4})}%
    {\@@showenvelope({#1},{#2})({#3},{#4})[]}%
}
\def\@@showenvelope(#1,#2)(#3,#4)[#5]{%
%    \end{macrocode}
% Die Argumente sind:
% \begin{enumerate}
% \item Breite des Umschlags,
% \item Höhe des Umschlags,
% \item Abstand des Briefbogens vom linken und rechten Rand des Umschlags,
% \item Abstand des Briefbogens vom oberen und unteren Rand des Umschlags,
% \item optionale weitere Anweisungen, zum Setzen von Elementen.
% \end{enumerate}
%    \begin{macrocode}
  \newpage
  \vspace*{\fill}
  \rotatebox{90}{%
    \begin{picture}(0,0)
      \begin{picture}(\LenToUnit{#1},\LenToUnit{#2})(0,\LenToUnit{#2})
        \newcommand*{\PlusHOffset}[1]{%
          \dimexpr \expandafter\dimexpr ##1\relax + #3\relax
        }%
        \newcommand*{\MinusHOffset}[1]{%
          \dimexpr \expandafter\dimexpr ##1\relax - #3\relax
        }%
        \newcommand*{\PlusVOffset}[1]{%
          \dimexpr \expandafter\dimexpr ##1\relax + #4\relax
        }%
        \newcommand*{\MinusVOffset}[1]{%
          \dimexpr \expandafter\dimexpr ##1\relax - #4\relax
        }%
        \newcommand{\AtEnvelopeUpperLeft}[1]{%
          \put(\LenToUnit{\PlusHOffset\z@},\LenToUnit{\MinusVOffset{#2}}){##1}%
        }%
        \newcommand{\AtEnvelopeLowerLeft}[1]{%
          \put(\LenToUnit{\PlusHOffset\z@},\LenToUnit{\PlusVOffset\z@}){##1}%
        }%
        \newcommand{\AtEnvelopeUpperRight}[1]{%
          \put(\LenToUnit{\MinusHOffset{#1}},\LenToUnit{\MinusVOffset{#2}}){##1}%
        }%
        \newcommand{\AtEnvelopeLowerRight}[1]{%
          \put(\LenToUnit{\MinusHOffset{#1}},\LenToUnit{\PlusVOffset\z@}){##1}%
        }%
        \newcommand*{\measuredIFrame}{}%
        \def\measuredIFrame(##1,##2)(##3,##4){%
          \put(\LenToUnit{##1},\LenToUnit{##2}){%
            \measuredFrameLB({##3},{##4})%
          }%
          \put(\LenToUnit{\MinusHOffset\z@},%
               \LenToUnit{\dimexpr ##2-.5mm\relax}){%
            \measureLineHB{\PlusHOffset{##1}}%
          }%
          \put(\LenToUnit{\dimexpr ##1+##3\relax},%
              \LenToUnit{\dimexpr ##2-.5mm\relax}){%
            \measureLineHB{\dimexpr #1-%
                             \PlusHOffset{\dimexpr ##1+##3\relax}\relax}%
          }%
          \put(\LenToUnit{\dimexpr ##1-.5mm\relax},%
               \LenToUnit{\dimexpr ##2+##4\relax}){%
            \measureLineVL{\PlusVOffset{\dimexpr -##2-##4\relax}}%
          }%
          \put(\LenToUnit{\dimexpr ##1-.5mm\relax},%
               \LenToUnit{\PlusVOffset{-#2}}){%
            \measureLineVL{\dimexpr #2-%
              \PlusVOffset{\dimexpr -##2\relax}\relax}%
          }%
        }%
        \put(0,0){%
          \thicklines
          \usekomafont{envelope}%
          \measuredFrameLB({#1},{#2})%
        }%
        \AtEnvelopeLowerLeft{%
          \usekomafont{letter}%
          \dashbox{\LenToUnit{1mm}}%
                  (\LenToUnit{\MinusHOffset{\MinusHOffset{#1}}},%
                   \LenToUnit{\MinusVOffset{\MinusVOffset{#2}}}){}%
        }%
        \expandafter\ifdim \useplength{toaddrhpos}<\z@
          \AtEnvelopeUpperLeft{%
            \thicklines
            \usekomafont{envelope}%
            \measuredIFrame(\expandafter\dimexpr \useplength{toaddrhpos}+
                              \MinusHOffset{\MinusHOffset{#1}}\relax,%
                            -\dimexpr %
                              \expandafter\dimexpr\useplength{toaddrvpos}\relax
                              +
                              \expandafter
                                \dimexpr\useplength{toaddrheight}\relax
                              \relax)%
                           (\useplength{toaddrwidth},\useplength{toaddrheight})%
          }%
        \else
          \AtEnvelopeUpperLeft{%
            \thicklines
            \usekomafont{envelope}%
            \measuredIFrame(\useplength{toaddrhpos},%
                            -\dimexpr %
                              \expandafter\dimexpr\useplength{toaddrvpos}\relax
                              +
                              \expandafter
                                \dimexpr\useplength{toaddrheight}\relax
                              \relax)%
                           (\useplength{toaddrwidth},\useplength{toaddrheight})%
          }%
        \fi
        \AtEnvelopeUpperLeft{#5}%
      \end{picture}
    \end{picture}
  }%
  \newpage
}
%    \end{macrocode}
% \begin{KOMAfont}{envelope}
% Farbe des Umschlagrahmens.
%    \begin{macrocode}
\newkomafont{envelope}{\normalcolor}
%    \end{macrocode}
% \end{KOMAfont}
% \begin{KOMAfont}{letter}
% Farbe des getrichelten Briefbogens im Umschlag
\newkomafont{letter}{\normalcolor}
% \end{KOMAfont}
% \begin{macro}{\unmeasuredFrame}
% Ein Rahmen ohne Maßlinien.
%    \begin{macrocode}
\newcommand*{\unmeasuredFrame}{}
\def\unmeasuredFrame(#1,#2){%
  \put(0,0){\line(1,0){\LenToUnit{#1}}}%
  \put(\LenToUnit{#1},0){\line(0,1){\LenToUnit{#2}}}%
  \put(\LenToUnit{#1},\LenToUnit{#2}){\line(-1,0){\LenToUnit{#1}}}%
  \put(0,\LenToUnit{#2}){\line(0,-1){\LenToUnit{#2}}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\measuredFrameLB}
% \begin{macro}{\measuredFrameLT}
% \begin{macro}{\measuredFrameRB}
% \begin{macro}{\measuredFrameRT}
% Die Maßlinien für ein Rechteck.
%    \begin{macrocode}
\newcommand*{\measuredFrameLB}{}
\def\measuredFrameLB(#1,#2){%
  \unmeasuredFrame({#1},{#2})%
  \put(\LenToUnit{-.5mm},0){\measureLineVL{#2}}%
  \put(0,\LenToUnit{-.5mm}){\measureLineHB{#1}}%
}
\newcommand*{\measuredFrameLT}{}
\def\measuredFrameLT(#1,#2){%
  \unmeasuredFrame({#1},{#2})%
  \put(\LenToUnit{-.5mm},0){\measureLineVL{#2}}%
  \put(0,\LenToUnit{\expandafter\dimexpr #2+.5mm\relax}){\measureLineHT{#1}}%
}
\newcommand*{\measuredFrameRB}{}
\def\measuredFrameRB(#1,#2){%
  \unmeasuredFrame({#1},{#2})%
  \put(\LenToUnit{\expandafter\dimexpr #1+.5mm\relax},0){\measureLineVR{#2}}%
  \put(0,\LenToUnit{-.5mm}){\measureLineHB{#1}}%
}
\newcommand*{\measuredFrameRT}{}
\def\measuredFrameRT(#1,#2){%
  \unmeasuredFrame({#1},{#2})%
  \put(\LenToUnit{\expandafter\dimexpr #1+.5mm\relax},0){\measureLineVR{#2}}%
  \put(0,\LenToUnit{\expandafter\dimexpr #2+.5mm\relax}){\measureLineHT{#1}}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\measureLineV}
% Vertikale Maßlinie ohne Beschriftung:
%    \begin{macrocode}
\newcommand*{\measureLineV}[1]{%
  \begin{picture}(0,0)
    \thinlines
    \usekomafont{measure}%
    \put(0,0){\vector(0,1){\LenToUnit{#1}}}%
    \put(0,\LenToUnit{#1}){\vector(0,-1){\LenToUnit{#1}}}%
 \end{picture}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\measureLineVL}
% \begin{macro}{\measureLineVR}
% Vertikale Maßlinie mit Beschriftung links bzw. rechts.
%    \begin{macrocode}
\newcommand*{\measureLineVL}[1]{%
  \begin{picture}(0,0)
    \usekomafont{measure}%
    \put(0,0){\measureLineV{#1}}%
    \put(0,0){\makebox(0,\LenToUnit{#1})[r]{\ValPerUnit{#1}}}%
  \end{picture}
}
\newcommand*{\measureLineVR}[1]{%
  \begin{picture}(0,0)
    \usekomafont{measure}%
    \put(0,0){\measureLineV{#1}}%
    \put(0,0){\makebox(0,\LenToUnit{#1})[l]{\ValPerUnit{#1}}}%
  \end{picture}
}
%    \end{macrocode}
% \begin{macro}{\ValPerUnit}
% \begin{macro}{\unitfactor}
% Zeige die Längen in \cs{unitlength} mit einer Genauigkeit von
% 1/\cs{unitfactor} an.
%    \begin{macrocode}
\newcommand*{\ValPerUnit}[1]{%
  \begingroup
    \setlength{\@tempdima}{%
      \dimexpr #1/(\unitlength/\unitfactor)*\p@/\unitfactor\relax
    }%
    \strip@pt\@tempdima
  \endgroup
}
\newcommand*{\unitfactor}{1}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\measureLineH}
% Horizontale Maßlinie ohne Beschriftung:
%    \begin{macrocode}
\newcommand*{\measureLineH}[1]{%
  \begin{picture}(0,0)
    \usekomafont{measure}%
    \put(0,0){\vector(1,0){\LenToUnit{#1}}}%
    \put(\LenToUnit{#1},0){\vector(-1,0){\LenToUnit{#1}}}%
 \end{picture}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\measureLineHB}
% \begin{macro}{\measureLineHT}
% Horizontale Maßlinie mit Beschriftung darunter bzw. oben.
%    \begin{macrocode}
\newcommand*{\measureLineHB}[1]{%
  \begin{picture}(0,0)
    \usekomafont{measure}%
    \put(0,0){\measureLineH{#1}}%
    \put(0,\LenToUnit{\dimexpr -\ht\strutbox-.5mm\relax}){%
      \makebox(\LenToUnit{#1},\LenToUnit{\baselineskip})[c]{\ValPerUnit{#1}}}%
  \end{picture}
}
\newcommand*{\measureLineHT}[1]{%
  \begin{picture}(0,0)
    \usekomafont{measure}%
    \put(0,0){\measureLineH{#1}}%
    \put(0,0){%
      \makebox(\LenToUnit{#1},\LenToUnit{\baselineskip})[c]{\ValPerUnit{#1}}}%
  \end{picture}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{KOMAfont}{measure}
% Farbe der Maßlinien.
%    \begin{macrocode}
\newkomafont{measure}{\normalcolor}
%    \end{macrocode}
% \end{KOMAfont}
% \end{macro}
%
% \begin{macro}{\showISOenvelope}
% Zeigt einen DIN/ISO C4, C5, DL=C5/6, C6/5 Umschlag.
%    \begin{macrocode}
\newcommand*{\showISOenvelope}[1]{%
  \ifstr{#1}{C4}{%
    \showenvelope(324mm,229mm)%
  }{%
    \ifstr{#1}{C5}{%
      \showenvelope(229mm,162mm)%
    }{%
      \ifstr{#1}{C5/6}{%
        \showenvelope(220mm,110mm)%
      }{%
        \ifstr{#1}{DL}{%
          \showenvelope(220mm,110mm)%
        }{%
          \ifstr{#1}{C6/5}{%
            \showenvelope(229mm,114mm)%
          }{%
            \ifstr{#1}{C6}{%
              \showenvelope(162mm,114mm)%
            }{%
              \LCOWarning{visualize}{envelope size `ISO #1' unsupported}%
            }%
          }%
        }%
      }%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\showUScommercial}
% Zeige ein US commercial Umschlag der Nummer 9 und 10
%    \begin{macrocode}
\newcommand*{\showUScommercial}[1]{%
  \ifstr{#1}{9}{%
    \showenvelope(8.875in,3.875in)%
  }{%
    \ifstr{#1}{10}{%
      \showenvelope(9.5in,4.125in)%
    }{%
      \LCOWarning{visualize}{envelope size `US commercial #1' unsupported}%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\showUScheck}
% Zeige einen US check Umschag.
%    \begin{macrocode}
\newcommand*{\showUScheck}{%
  \showenvelope(8.625in,3.625in)%
}
%    \end{macrocode}
% \end{macro}
%
% \iffalse
%</visualize>
%<*!visualize>
% \fi
%
% \begin{macro}{\showUSletterCixDW}
% Ein Umschlag im Format commercial No. 9 mit 2 Fenstern, 
% Absenderfenster $3\frac{1}{2}\,\mathrm{in}\times\frac{7}{8}\,\mathrm{in}$,
% $\frac{5}{16}\,\mathrm{in}$ von links und $2\frac{1}{2}\,\mathrm{in}$ von
% unten.
%    \begin{macrocode}
%<*UScommercial9DW>
\newcommand*{\showUSletterCixDW}{%
  \showUScommercial9[{%
    \thicklines
    \usekomafont{envelope}%
    \measuredIFrame({\dimexpr (\paperwidth-
                         \expandafter\dimexpr \useplength{firstheadwidth}\relax%
                       )/2\relax},%
                    -\expandafter\dimexpr\useplength{firstheadvpos}\relax)%
                   (3.5in,.875in)%
  }]%
}
%</UScommercial9DW>
%    \end{macrocode}
% \end{macro}
%
% \iffalse
%</!visualize>
%</body>
%</lco>
% \fi
%
% \Finale
%
\endinput
%
% end of file `scrkernel-letterclassoptions.dtx'
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End:
