summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx')
-rw-r--r--macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx1719
1 files changed, 1719 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx b/macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx
new file mode 100644
index 0000000000..3eae05ad74
--- /dev/null
+++ b/macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx
@@ -0,0 +1,1719 @@
+% \iffalse meta-comment
+% ======================================================================
+% scrkernel-letterclassoptions.dtx
+% Copyright (c) Markus Kohm, 2006-2022
+%
+% 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.md.
+% ======================================================================
+%%% From File: $Id: scrkernel-letterclassoptions.dtx 3874 2022-06-05 10:38:02Z kohm $
+%<option>%%% (run: option)
+%<head>%%% (run: head)
+%<body>%%% (run: body)
+%<*dtx>
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\begingroup
+ \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
+ \filedate$Date: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $
+ \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
+ \filerevision$Revision: 3874 $
+\endgroup
+\ProvidesFile{scrkernel-letterclassoptions.dtx}
+ [\filedate\space \filerevision\space
+ KOMA-Script source (letter configuration options)]
+\documentclass[USenglish]{koma-script-source-doc}
+\usepackage{babel}
+\setcounter{StandardModuleDepth}{2}
+\begin{document}
+\DocInput{scrkernel-letterclassoptions.dtx}
+\end{document}
+%</dtx>
+% \fi
+%
+% \changes{v2.95}{2006/03/22}{new by splitting \file{scrclass.dtx}}
+% \changes{v3.36}{2022/02/26}{switch over from \cls*{scrdoc} to
+% \cls*{koma-script-source-doc}}
+% \changes{v3.36}{2022/02/26}{\cs{@setplength} replaced by \cs{setplength}}
+% \changes{v3.36}{2022/02/26}{\cs{@addtoplength} replaced by \cs{addtoplength}}
+% \changes{v3.36}{2022/02/26}{\cs{@newplength} replaced by \cs{newplength}}
+% \changes{v3.36}{2022/02/26}{whole implementation documentation in English}
+%
+%
+% \GetFileInfo{scrkernel-letterclassoptions.dtx}
+% \title{Handling and Implementation of Letter Configuration Options of
+% \href{https://komascript.de}{\KOMAScript} Letter Class and Package}
+% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
+% \date{Revision \fileversion{} of \filedate}
+% \maketitle
+% \begin{abstract}
+% The \KOMAScript{} letter class \cls*{scrlttt2} and the \KOMAScript{}
+% letter package \pkg*{scrletter} has something special: the letter
+% configuration option files formerly known as letter class option
+% files. These are used to setup either layouts or user configurations. Both
+% the implementation of these files and the handling of them can be found in
+% \file{scrkernel-letterclassoptions.dtx}.
+% \end{abstract}
+% \tableofcontents
+%
+% \section{User Manual}
+%
+% You can find the user documentation the commands and files implemented here
+% in the \KOMAScript{} manual, either the German \file{scrguide} or the
+% English \file{scrguien}.
+%
+% \MaybeStop{\PrintIndex}
+%
+% \section{Implementation of the Handling of Letter Configuration Options}
+%
+% We need this feature only with letter classes and packages.
+%
+% \begin{macrocode}
+%<*(class|package)&letter>
+% \end{macrocode}
+%
+%
+% \subsection{Options for the letter configuration option files}
+%
+% \begin{macro}{\lco@test}
+% \changes{v2.95}{2006/03/22}{added}
+% \changes{v2.97c}{2007/09/12}{modified for new option handling}
+% \changes{v3.36}{2022/02/26}{deprecated}
+% The \KOMAScript{} letter class \cls*{scrlttr2} allows to load a letter
+% configuration option file by classic class options to \cs{documentclass},
+% \cs{LoadClass} or \cs{PassOptionsToClass}. This is done inside via the
+% general \cs{DeclareOption*}, that is used for several other deprecated (and
+% some standard) options too. \cs{lco@test} simply tests, if
+% \file{\CurrentOption.lco} does exist and in this case load it a the end of
+% the class. Note: The \KOMAScript{} letter package \pkg*{scrletter} does not
+% support loading of letter configuration option files via global or package
+% option. Moreover, from \KOMAScript{} v3.36 loading via class option is also
+% deprecated for \cls*{scrlttr2}.
+% \begin{macrocode}
+%<*class&option>
+\newcommand*{\lco@test}{%
+ \IfFileExists{\CurrentOption.lco}{%
+ \ClassWarningNoLine{\KOMAClassName}{%
+ loading of LCO via class option
+ `\CurrentOption'.\MessageBreak
+ Note: Loading a LCO via class option is deprecated.\MessageBreak
+ \space\space\space\space\space\space
+ You should use
+ `\string\LoadLetterOption\string{\CurrentOption\string}'\MessageBreak
+ instead%
+ }%
+ \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
+ }%
+ }%
+ }{}%
+}
+%</class&option>
+% \end{macrocode}
+% \end{macro}
+%
+% \file{DIN.lco} is the default and therefore loaded first at the end of the
+% class or package.
+% \begin{macrocode}
+%<*option>
+%<class>\AtEndOfClass
+%<package>\AtEndOfPackage
+ {\LoadLetterOption{DIN}}
+%</option>
+% \end{macrocode}
+%
+%
+% \subsection{Makros für Letter-Class-Options}
+%
+% \begin{command}{\LoadLetterOption}
+% \changes{v2.8q}{2001/10/08}{added}
+% \changes{v3.14}{2014/10/04}{ignoring white spaced}
+% \changes{v3.26}{2018/08/29}{\cs{KV@@sp@def} replaced by \cs{scr@sp@def}}
+% Command
+% \begin{quote}
+% \cs{LoadLetterOption}\marg{letter configuration option}
+% \end{quote}
+% loads \file{\meta{letter configuration option}.lco}. The \cs{catcode} of
+% ``|@|'' is changed to letter for loading the file. But because \file{lco}
+% files can load other \file{lco} files using \cs{LoadLetterOption} this has
+% to be reset only for the outer \cs{LoadLetterOption}.
+% \begin{description}
+% \item[ToDo:] can't we do this more simply just using either some
+% \cs{expandafter} magic or an internal stack?
+% \end{description}
+% \begin{macrocode}
+%<*body>
+\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}%
+ \scr@sp@def\reserved@a{#1}%
+ \edef\reserved@a{%
+ \noexpand\edef\noexpand\scr@currentlco{\reserved@a}%
+ \noexpand\InputIfFileExists{\reserved@a.lco}{%
+%<class> \noexpand\ClassInfo{scrlttr2%
+%<package> \noexpand\PackageInfo{scrletter%
+ }{Letter-Class-Option `#1' loaded}%
+ }{%
+%<class> \noexpand\ClassError{scrlttr2%
+%<package> \noexpand\PackageError{scrletter%
+ }{%
+ Letter-Class-Option file `#1.lco' not found%
+ }{%
+ You've told me to load the Letter-Class-Option `#1'. So I have
+ to load\noexpand\MessageBreak
+ the file `#1.lco'. But the file isn't available.}%
+ }%
+ \scr@ifundefinedorrelax{scr@currentlco}{%
+ \unexpanded{\let\scr@currentlco\relax}%
+ }{%
+ \noexpand\def\noexpand\scr@currentlco{\scr@currentlco}%
+ }%
+ }%
+% \end{macrocode}
+% \changes{v3.18}{2015/06/03}{manage \cs{RequirePackage} and \cs{usepackage}
+% inside \texttt{lco}-files after \cs{begin\{document\}}}
+% \changes{v3.28}{2019/11/24}{\cs{usepackage} typo fixed}
+% \begin{description}
+% \item[ToDo:] I don't think, that the following really works. So maybe it
+% should simple be removed to get the usual error message using
+% \cs{RequirePackage} or \cs{usepackage} inside a document.
+% \end{description}
+% \begin{macrocode}
+ \if@atdocument
+ \edef\reserved@a{%
+ \unexpanded\expandafter{\reserved@a}%
+ \ifx\RequirePackage\@notprerr
+ \unexpanded{\let\RequirePackage\@notprerr}%
+ \else
+ \noexpand\def\noexpand\RequirePackage{%
+ \unexpanded\expandafter{\RequirePackage}%
+ }%
+ \fi
+ \ifx\usepackage\@notprerr
+ \unexpanded{\let\usepackage\@notprerr}%
+ \else
+ \noexpand\def\noexpand\usepackage{%
+ \unexpanded\expandafter{\usepackage}%
+ }%
+ \fi
+ }%
+ \let\RequirePackage\lco@RequirePackage
+ \let\usepackage\lco@RequirePackage
+ \expandafter\reserved@a
+ \else \expandafter\reserved@a
+ \fi
+ \@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}
+% \begin{macro}{\lco@RequirePackage}
+% \changes{v3.18}{2015/06/03}{added}
+% \changes{v3.26}{2018/08/29}{\cs{KV@@sp@def} replaced by
+% \cs{scr@trim@spaces}}
+% \begin{description}
+% \item[ToDo:] See the note above.
+% \end{description}
+% \begin{macrocode}
+\newcommand*{\lco@RequirePackage}[2][]{%
+ \begingroup
+ \@for\reserved@a:=#2\do{%
+ \scr@trim@spaces\reserved@a
+ \scr@ifundefinedorrelax{ver@\reserved@a.\scr@pkgextension}{%
+%<class> \ClassError{\KOMAClassName}{%
+%<package> \PackageError{scrletter}{%
+ lco-file `\scr@currentlco' can be used only in preamble%
+ }{%
+ The lco-file `\scr@currentlco' uses \string\RequirePackage\space or
+ \string\usepackage\space to load\MessageBreak
+ package `\reserved@a'. This means you have to either load
+ `\reserved@a'\MessageBreak
+ or lco-file `\scr@currentlco' in the document preamble.
+ }%
+ }{}%
+ }%
+ \endgroup
+ \scr@gobbleopt
+}
+% \end{macrocode}
+% \end{macro}^^A \lco@RequirePackage
+% \end{command}^^A \LoadLetterOption
+%
+% \begin{command}{\LoadLetterOptions}
+% \changes{v3.14}{2014/10/04}{added}
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}
+% \changes{v3.26}{2018/08/29}{special treatment of space entries not needed
+% any more}
+% Similar to \cs{LoadLetterOption} but with \meta{list of letter configuration
+% options} instead of a single \meta{letter configuration option}.
+% \begin{macrocode}
+\newcommand*{\LoadLetterOptions}[1]{%
+ \begingroup
+ \def\reserved@a{\endgroup}%
+ \@for\reserved@b:=#1\do{%
+ \scr@trim@spaces\reserved@b
+ \ifx\reserved@b\@empty\else
+ \edef\reserved@a{\expandafter\unexpanded\expandafter{\reserved@a
+ \LoadLetterOption}{\reserved@b}\relax}%
+ \fi
+ }%
+ \reserved@a
+}
+% \end{macrocode}
+% \end{command}^^A \LoadLetterOptions
+%
+% \begin{command}{\LetterOptionNeedsPapersize}
+% \changes{v2.8q}{2001/10/17}{added}
+% With
+% \begin{quote}
+% \cs{LetterOptionNeedsPapersize}\marg{letter configuration
+% option}\marg{paper size}
+% \end{quote}
+% inside a \meta{letter configuration option} file we can define a \meta{paper
+% size} to be used. This does not change the paper size, but adds a test to
+% \cs{opening}, that warns if another paper size is used.
+% \begin{macro}{\@PapersizeWarning}
+% \changes{v2.8q}{2002/03/25}{added}
+% \changes{v3.12}{2013/11/05}{differences of +/- 1\,mm are tolerated}
+% \changes{v3.23}{2017/02/22}{using \cs{PaperNameToSize}}
+% \begin{macro}{\@@PapersizeWarning,\LOPNP@size,\LOPNP@option}
+% \changes{v2.8q}{2002/03/25}{added}
+% \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%
+ \PaperNameToSize[letter]{\LOPNP@size}%
+ \fi
+ \fi
+ \fi
+ \@tempc
+ \endgroup%
+}
+%<class>\AfterPackage*{typearea}{%
+\ProvideUnknownPaperSizeError{letter}{%
+%<class> \ClassError{scrlttr2}{%
+%<package> \PackageError{scrletter}{%
+ 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.}%
+}
+%<class>}
+\newcommand*{\@@PapersizeWarning}{%
+ \if@tempswa\else%
+%<class> \ClassWarningNoLine{scrlttr2%
+%<package> \PackageWarningNoLine{scrletter%
+ }{%
+ Letter option file `\LOPNP@option.lco'\MessageBreak
+ needs paper size `\LOPNP@size'.\MessageBreak
+ Current paper size is not `\LOPNP@size'!\MessageBreak
+ \scr@ifundefinedorrelax{KOMAClassName}{%
+ You should load package `typearea' either\MessageBreak
+ with option `paper=\LOPNP@size,paper=portrait' or
+ additionally\MessageBreak
+ }{%
+ You should add `paper=\LOPNP@size,paper=portrait' at the\MessageBreak
+ option list of `\string\documentclass' or\MessageBreak
+ }%
+ add `\string\KOMAoptions{paper=\LOPNP@size,paper=portrait}'\MessageBreak
+ before starting this letter!\MessageBreak
+ Maybe you know what you are doing,\MessageBreak
+ so I do not change this myself}%
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand*{\LetterOptionNeedsPapersize}[2]{%
+ \edef\LOPNP@size{#2}\edef\LOPNP@option{#1}%
+}
+%</body>
+% \end{macrocode}
+% \end{command}
+%
+% \begin{macrocode}
+%</(class|package)&letter>
+% \end{macrocode}
+%
+% \section{Implementation of the Letter Configuration Option Files}
+%
+% Most of the predefined letter configuration option files define a letter
+% layout, e.g, depending on a norm. The main thing in this case is to setup
+% pseudo-lengths. Sometimes additionally macros or commands are (re-)defined.
+%
+% \begin{macrocode}
+%<*lco>
+% \end{macrocode}
+%
+% \subsection{The file header}
+%
+% The head has to identify the file:
+% \changes{v3.04}{2009/04/21}{\file{NF.lco} by Jean-Marie Pacquet added}
+% \changes{v3.04}{2009/06/26}{\file{USletter2w.lco} with contribution of
+% Engelbert Buxbaum and Richard Ar\`es}
+% \changes{v3.04}{2009/06/29}{\file{UScommercial9DW-lco} for paper formats
+% letter or legal and envelopes with format no.\,9 with two windows}
+% \changes{v3.04}{2009/06/30}{\file{UScommercial9} for paper formats
+% letter or legal and envelopes with format commercial No.\,9 with one
+% window based on \url{http://www.envelopesuperstore.com/}}
+% \changes{v3.04}{2009/06/26}{long existing \file{visualize.lco} added}
+% \changes{v3.17}{2015/02/17}{\file{DIN5008A.lco} and \file{DIN5008B.lco} added}
+% \begin{macrocode}
+%<*head>
+\ProvidesFile{%
+%<visualize> visualize%
+%<DIN> DIN%
+%<5008> 5008%
+%<A> A%
+%<B> B%
+%<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}
+%
+% Some of the \file{LCO} files need others:
+% \begin{macrocode}
+%<*5008>
+\LoadLetterOption{%
+%<A> DINmtext%
+%<B> DIN%
+}
+%</5008>
+% \end{macrocode}
+%
+% \begin{command}{\LCOWarningNoLine,\LCOWarning}
+% \changes{v2.95}{2006/03/24}{added}
+% These are similar to \cs{PackageWarningNoLine} and \cs{PackageWarning} but
+% for \file{lco} files.
+% \begin{macrocode}
+%<*!5008>
+\providecommand*\LCOWarningNoLine[2]{%
+ \LCOWarning{#1}{#2\@gobble}%
+}
+\providecommand*\LCOWarning[2]{%
+ \GenericWarning{%
+ (#1)\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces
+ }{%
+ Letter configuration option #1 Warning: #2%
+ }%
+}
+%</!5008>
+%</head>
+% \end{macrocode}
+% \end{command}
+%
+%
+% \subsection{Main part of layout option files}
+%
+% The dimensions of some of the options has been researched by others:
+% \begin{center}
+% \begin{tabular}{ll}
+% \texttt{lco} file & source \\\hline\\[-1.6ex]
+% DIN & me \\
+% DINmtext & me \\
+% DIN5008A & me \\
+% DIN5008B & me \\
+% KOMAold & me \\
+% SNleft & Roger Luethi \\
+% SN & Roger Luethi \\
+% NF & Jean-Marie Pacquet \\
+% USletter2w & Engelbert Buxbaum \\
+% UScommercial9 & me \\
+% UScommercial9DW & me \\
+% \end{tabular}
+% \end{center}
+%
+% Test for the correct class or package:
+% \begin{macrocode}
+%<*body&!visualize>
+%<*!5008>
+\@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 configuration option file was made only\MessageBreak
+ to be used with KOMA-Script letter class\MessageBreak
+ `scrlttr2' or letter package `scrletter'.\MessageBreak
+ Use with other classes and without that package\MessageBreak
+ can result in a lot of errors%
+ }%
+}{}
+% \end{macrocode}
+%
+% Make sure, the correct paper size has been used:
+% \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}
+%
+% And now the dimensions and variables:
+% \begin{variable}{fromzipcode}
+% \changes{v3.03}{2009/03/04}{change of output name added}
+% \begin{macrocode}
+%<!KOMAold>\setkomavar*{fromzipcode}{%
+%<DIN|DINmoretext> D}
+%<SwissLeft|SN> CH}
+%<NF> F}
+%<USletter2w|UScommercial9|UScommercial9DW> US}
+% \end{macrocode}
+% \end{variable}
+% \begin{pseudolength}{foldmarkhpos,tfoldmarkvpos,mfoldmarkvpos,bfoldmarkvpos,
+% lforlmarkhpos}
+% \changes{v2.97e}{2007/11/20}{several new fold marks to setup}
+% \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}
+% \end{pseudolength}
+% \begin{pseudolength}{toaddrvpos,toaddrhpos,toaddrwidth,toaddrheight,
+% backaddrheight,specialmainindent,specialmailrightindent}
+% \changes{v3.03}{2009/06/25}{the documentation says, the back-address is part
+% of the address field}
+% \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}
+\setplength{toaddrheight}{%
+%<DIN|DINmoretext|SN|SwissLeft|KOMAold|NF> 45mm}
+%<USletter2w> 1.17in}
+%<UScommercial9|UScommercial9DW> 1.125in}
+%</!5008>
+\setplength{toaddrindent}{%
+%<DIN|DINmoretext|SN|SwissLeft|KOMAold|USletter2w|UScommercial9|UScommercial9DW> \z@}
+%<5008> 5mm}
+%<NF> 10mm}
+%<*!5008>
+\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}
+%</!5008>
+%<*5008>
+\setplength{specialmailindent}{\useplength{toaddrindent}}
+\setplength{specialmailrightindent}{\z@}
+%</5008>
+% \end{macrocode}
+% \end{pseudolength}
+% \begin{pseudolength}{locvpos,locwidth,lochpos}
+% \begin{macrocode}
+%<*5008>
+\setplength{locvpos}{%
+ \dimexpr\useplength{toaddrvpos}+\useplength{backaddrheight}}
+%</5008>
+\setplength{locwidth}{%
+%<DIN|DINmoretext|SN|SwissLeft|KOMAold|NF|USletter2w|UScommercial9|UScommercial9DW> \z@}
+%<5008> 75mm}
+%<5008>\setplength{lochpos}{10mm}
+%<*!5008>
+% \end{macrocode}
+% \end{pseudolength}
+% \begin{pseudolength}{firstheadvpos,firstheadhpos,firstheadwidth}
+% \begin{macrocode}
+\setplength{firstheadvpos}{%
+%<DIN|DINmoretext|SN|SwissLeft> 8mm}
+%<KOMAold> 6mm}
+%<NF> 15mm}
+%<USletter2w> .36in}
+%<UScommercial9|UScommercial9DW> .4375in}
+%</!5008>
+%<*5008>
+\setplength{firstheadhpos}{%
+ \dimexpr \useplength{toaddrhpos}+\useplength{toaddrindent}}
+%</5008>
+\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>
+%<5008> \dimexpr 125mm-\useplength{firstheadhpos}}
+%<*USletter2w>
+ \paperwidth}
+\addtoplength[-]{firstheadwidth}{.68in}
+%</USletter2w>
+%<*UScommercial9DW>
+ \paperwidth}
+\addtoplength[-]{firstheadwidth}{.25in}
+%</UScommercial9DW>
+% \end{macrocode}
+% \end{pseudolength}
+% \begin{pseudolength}{firstfootwidth,firstfootvpos}
+% \changes{v2.9u}{2005/03/05}{optional the footer is placed 16\,mm above the
+% lower paper edge}
+% \begin{macrocode}
+%<!5008>\setplength{firstfootwidth}{\useplength{firstheadwidth}}
+%<*5008>
+\setplength{firstfoothpos}{%
+ \dimexpr\useplength{toaddrhpos}+\useplength{toaddrindent}}%
+\setplength{firstfootwidth}{%
+ \dimexpr \paperwidth-\useplength{toaddrhpos}-\useplength{firstfoothpos}}%
+%</5008>
+%<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}
+% \end{pseudolength}
+% \begin{pseudolength}{refvpos,refaftervskip,refwidth}
+% \begin{macrocode}
+%<!(5008&B)>\setplength{refvpos}{%
+%<DIN|SN> 98.5mm}
+%<DINmoretext> 80.5mm}
+%<5008&A> 79.4mm}
+%<SwissLeft> 89mm}
+%<KOMAold> 89.5mm}
+%<NF> \useplength{tfoldmarkvpos}}
+%<USletter2w> 3.1in}
+%<UScommercial9|UScommercial9DW> 3.4375in}
+\setplength{refaftervskip}{%
+%<!KOMAold&!5008> \baselineskip}
+%<KOMAold> 2\baselineskip}
+%<5008> 8.46mm}
+%<*!5008>
+% \end{macrocode}
+% The width of the reference line is somehow special, because setting of
+% option \opt{refline=wide} or \opt{refline=narrow} should be possible after
+% loading a \file{lco} file. So we use the initial special value 0 and
+% calculate it inside \cs{opening} if it is still 0.
+% \begin{macrocode}
+\setplength{refwidth}{0pt}
+% \end{macrocode}
+% \end{pseudolength}
+% \begin{pseudolength}{sigindent,sigbeforevskip}
+% \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{pseudolength}
+% \begin{macro}{\scr@default@firsthead@fromaddress@hook}
+% \changes{v3.13b}{2014/04/02}{added}
+% \changes{v3.27}{2019/04/02}{removed}
+% \end{macro}
+%
+% \begin{command}{\yourref,\yourmail,\myref,\customer,\invoice,\defaultfields,
+% \toname,\toaddress,\branch,\signature,\fromsig,\name,
+% \fromname,\location,\fromlocation,\backaddress,
+% \frombackaddress,\telephone,\telephonenum,\specialmail,
+% \title,\subject,\place,\fromplace,\ccnameseparator,
+% \enclnameseparator,\foldmarkson,\foldmarksoff,\addrfieldon,
+% \addrfieldoff,\subjecton,\subjectoff,\subjectafteron,
+% \subjectafteroff}
+% \begin{macro}{\@title,\@subject}
+% \begin{variable}{refitemi,refitemii,refitemiii,branch}
+% We have also to do the compatibility commands and variables for
+% \file{KOMAold.lco}.
+% \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}}
+% \end{macrocode}
+% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by
+% \cs{Ifkomavarempty}}
+% Note: This is dangerous if someone uses a new \KOMAScript{} but copies the
+% wrong code.
+% \begin{macrocode}
+\def\@tempa{%
+ \Ifkomavarempty{fromname}{}{%
+ \strut\ignorespaces\usekomavar{fromname}%
+ \Ifkomavarempty{fromaddress}{}{\\}}%
+ \Ifkomavarempty{fromaddress}{}{%
+ \strut\ignorespaces\usekomavar{fromaddress}}%
+}
+\ifx\@tempa\scr@backaddress@var%
+ \setkomavar{backaddress}{}
+\else
+ \def\@tempa{%
+ \ifkomavarempty{fromname}{}{%
+ \strut\ignorespaces\usekomavar{fromname}%
+ \ifkomavarempty{fromaddress}{}{\\}}%
+ \ifkomavarempty{fromaddress}{}{%
+ \strut\ignorespaces\usekomavar{fromaddress}}%
+ }
+ \ifx\@tempa\scr@backaddress@var%
+ \setkomavar{backaddress}{}
+ \fi
+\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}
+% \end{variable}
+% \end{macro}
+% \end{command}
+%
+%
+% \begin{pseudolength}{specialmailheight}
+% \begin{macro}{\@PapersizeWarning}
+% For \file{DIN5008a.lco} and \file{DIN5008b.lco} we need additional settings:
+% \changes{v3.30}{2020/02/25}{white spaces and end of warning removed}
+% \begin{macrocode}
+%</!5008>
+%<*5008>
+\newplength{specialmailheight}
+\setplength{specialmailheight}{12.7mm}
+\areaset[5mm]{165mm}{233mm}
+\KOMAoptions{%
+ fromalign=locationleft,
+ addrfield=topaligned,
+ refline=narrow,
+ parskip=full
+}
+\l@addto@macro\@PapersizeWarning{%
+ \begingroup
+ \@tempswafalse
+ \ifdim\oddsidemargin<\dimexpr 25mm-1in-1pt\relax\@tempswatrue\else
+ \ifdim\oddsidemargin>\dimexpr 25mm-1in+1pt\relax\@tempswatrue\fi\fi
+ \ifdim\textwidth<\dimexpr \paperwidth-45mm-1pt\relax\@tempswatrue\else
+ \ifdim\textwidth>\dimexpr \paperwidth-45mm+1pt\relax\@tempswatrue\fi\fi
+ \if@tempswa
+ \LCOWarning{DIN5008%
+%<A> A%
+%<B> B%
+ }{%
+ DIN5008 orders exact margins and text\MessageBreak
+ width. Without following these values,\MessageBreak
+ your document does not conform DIN5008.\MessageBreak
+ You should use, e.g.,\MessageBreak
+ \space\string\areaset[5mm]{%
+ \the\dimexpr \paperwidth-45mm\relax}{%
+ \the\dimexpr 1.414\dimexpr \paperwidth-45mm\relax\relax}\MessageBreak
+ to follow the norm%
+ }%
+ \fi
+ \ifdim \dimexpr\parskip\relax=\dimexpr\baselineskip\relax\else
+ \LCOWarning{DIN5008%
+%<A> A%
+%<B> B%
+ }{%
+ DIN5008 orders paragraph separation by\MessageBreak
+ exactly one line. Without this, your\MessageBreak
+ document does not conform DIN5008.\MessageBreak
+ You shoud use, e.g.,\MessageBreak
+ \space\string\KOMAoption{parskip}{full}\MessageBreak
+ to follow the norm%
+ }%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \end{pseudolength}
+% \begin{macro}{\backaddr@format}
+% \changes{v3.25}{2017/11/15}{using \cs{scr@endstrut} instead of
+% \cs{unskip}\cs{strut}}
+% Multi line back address without underline.
+% \begin{macrocode}
+\renewcommand{\backaddr@format}[1]{\hspace*{\useplength{toaddrindent}}%
+ \parbox[t][\useplength{backaddrheight}][t]%
+ {\dimexpr\useplength{toaddrwidth}-\useplength{toaddrindent}}%
+ {\strut\ignorespaces #1\ifhmode\scr@endstrut\fi}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\specialmail@format}
+% \changes{v3.25}{2017/11/15}{using \cs{scr@endstrut} instead of
+% \cs{unskip}\cs{strut}}
+% Multi line special sending.
+% \begin{macrocode}
+\renewcommand{\specialmail@format}[1]{%
+ \parbox[t][\useplength{specialmailheight}][t]%
+ {\dimexpr\useplength{toaddrwidth}
+ -\useplength{specialmailindent}
+ -\useplength{specialmailrightindent}}%
+ {\strut\ignorespaces #1\ifhmode\scr@endstrut\fi}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{fontelement}{specialmail,backaddress,addressee,fromname,fromaddress,refvalue}
+% Some font settings.
+% \begin{macrocode}
+\setkomafont{specialmail}{\sffamily\fontsize{10pt}{12pt}\selectfont}
+\setkomafont{backaddress}{\sffamily\fontsize{8pt}{10pt}\selectfont}
+\setkomafont{addressee}{\sffamily\fontsize{10pt}{12pt}\selectfont}
+\setkomafont{fromname}{\sffamily\fontsize{10pt}{12pt}\selectfont}
+\setkomafont{fromaddress}{\sffamily\fontsize{10pt}{12pt}\selectfont}
+\setkomafont{refvalue}{\sffamily\fontsize{10pt}{12pt}\selectfont}
+\let\raggedsignature\raggedright
+%</5008>
+%</body&!visualize>
+% \end{macrocode}
+% \end{fontelement}
+%
+%
+% \subsection{Visualizing several fields of a letter}
+%
+% These macros are using be \file{visualize.lco} only.
+%
+% It needs \pkg{eso-pic}.
+% \changes{v3.18}{2015/06/03}{loading \textsf{eso-pic} always}
+% \begin{macrocode}
+%<*visualize&body>
+\RequirePackage{eso-pic}
+% \end{macrocode}
+%
+% \begin{command}{\showfields}
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} added}
+% Command
+% \begin{quote}
+% \cs{showfields}\marg{field list}
+% \end{quote}
+% is used to visualize fields of the note paper. The \meta{field list} is a
+% comma-separated list of field names. Unknown fields do not result in errors
+% but warnings only. The visualization is done in the background using
+% \pkg{eso-pic}. A visualized field cannot be un-visualized.
+% \begin{macrocode}
+\newcommand*{\showfields}[1]{%
+ \AtBeginLetter{%
+ \begingroup
+ \@for \@tempa:=#1\do{%
+ \scr@trim@spaces\@tempa
+ \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{fontelement}{field}
+% The element is used to change the color. Changing the font doesn't make sense.
+% \begin{macrocode}
+\newkomafont{field}{\normalcolor}
+% \end{macrocode}
+% \end{fontelement}
+% \end{command}
+%
+% \begin{command}{\showfield}
+% A single field is visualized using:
+% \begin{quote}
+% \cs{showfield}\marg{field name}
+% \end{quote}
+% This uses a macro \cs{showfield@\meta{field name}}. Usually fields are
+% rectangles. Such fields can be visualized always the same way using four
+% parameters: \meta{offset from left}, \meta{offset from top}, \meta{width},
+% \meta{height}. A negative \meta{height} means a minimum of -\meta{height}
+% but maybe more.
+%
+% \begin{macro}{\showfield@by@frame}
+% To show a field by a frame
+% \begin{quote}
+% \cs{showfield@by@frame}\marg{offset from left}\marg{offset from top}%
+% \marg{width}\marg{height}
+% \end{quote}
+% is used. If \meta{height} is negative, arrows of length -\meta{height} are
+% used and the frame bottom is omitted.
+% \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}
+% To show a field by edge markers
+% \begin{quote}
+% \cs{showfield@by@edges}\marg{offset from left}\marg{offset from top}%
+% \marg{width}\marg{height}
+% \end{quote}
+% is used. If \meta{height} is negative the bottom markers are omitted.
+% \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{command}{\edgesize}
+% The size of the edges is 1\,ex by default.
+% \begin{macrocode}
+\newcommand*{\edgesize}{1ex}
+% \end{macrocode}
+% \end{command}
+% \end{macro}
+%
+% \begin{macro}{\showfield@by@rule}
+% To show a field by a filled frame (without frame border)
+% \begin{quote}
+% \cs{showfield@by@rune}\marg{offset from left}\marg{offset from top}%
+% \marg{width}\marg{height}
+% \end{quote}
+% is used. The absolute value of \meta{height} is used.
+% \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}
+%
+% \begin{command}{\showfield}
+% The default is to use a frame.
+% \begin{macrocode}
+\newcommand*{\showfield}{}
+\let\showfield\showfield@by@frame
+% \end{macrocode}
+% \end{command}
+%
+% \begin{command}{\setshowstyle}
+% But the default can changed using
+% \begin{quote}
+% \cs{setshowstyle}\marg{style}
+% \end{quote}
+% A warning (no error!) is reported if \cs{showfield@by@\meta{style}} does not
+% exist. In this case \meta{style} is \texttt{frame} again.
+% \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{command}
+% \end{command}
+%
+% Currently following fields are available:
+% \begin{macro}{\showfield@test}
+% \texttt{test} is a test field with coordinates:
+% $(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}{using \plen{firstheadhpos}}
+% \texttt{head} is the header of the note paper.
+% \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}{using \plen{firstfoothpos}}
+% \texttt{foot} is the footer of the note paper.
+% \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}{implementation adapted for change in
+% \cls*{scrlttr2} 3.03b}
+% \texttt{address} is the address field of the addressee.
+% \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}{implementation adapted for change in
+% \cls*{scrlttr2} 3.03b}
+% \texttt{location} is the field with extra information about the sender.
+% \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}
+% \texttt{refline} is the reference line.
+% \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{command}{\showenvelope}
+% \begin{macro}{\@showenvelope}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}
+% \begin{macro}{\@@showenvelope,\@@@showenvelope}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}
+% \changes{v3.18}{2015/06/03}{always loading \pkg{graphicx}}
+% We can also visualize an envelope. Here are several parameters needed.
+% \begin{quote}
+% \cs{showenvelope}\marg{width}\marg{height}\marg{hoffset}\marg{voffset}%
+% \marg{commands}
+% \end{quote}
+% The envelope is shown in portrait format at the current page. Package
+% \pkg{graphicx} is used. The \meta{hoffset} is the horizontal distance of the
+% note paper from the left and right edge of the envelope. The \meta{voffset}
+% is the same for the top and bottom edge. The \meta{commands} is extra code
+% to show the some elements.
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\newcommand*{\showenvelope}{}
+\newcommand*{\@@showenvelope}{}
+\newcommand*{\@@@showenvelope}{}
+\def\showenvelope(#1,#2){%
+ \kernel@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){%
+ \kernel@ifnextchar [%]
+ {\@@showenvelope({#1},{#2})({#3},{#4})}%
+ {\@@showenvelope({#1},{#2})({#3},{#4})[]}%
+}
+\def\@@showenvelope(#1,#2)(#3,#4)[#5]{%
+% \end{macrocode}
+% \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{fontelement}{envelope}
+% Used to change the color of the envelope frame (font changes do not make sense).
+% \begin{macrocode}
+\newkomafont{envelope}{\normalcolor}
+% \end{macrocode}
+% \end{fontelement}
+% \begin{fontelement}{letter}
+% Used to change the color of the dashed note paper inside the envelope (font
+% changes do not make sende).
+% \begin{macrocode}
+\newkomafont{letter}{\normalcolor}
+% \end{macrocode}
+% \end{fontelement}
+% \begin{command}{\unmeasuredFrame}
+% Show a frame without measuring.
+% \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{command}
+% \begin{command}{\measuredFrameLB,\measuredFrameLT,\measuredFrameRB,
+% \measuredFrameRT}
+% Show the measuring of a frame.
+% \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{command}
+% \end{macro}
+% \end{macro}
+% \end{command}
+% \begin{command}{\measureLineV}
+% Vertical measuring without text.
+% \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{command}
+% \begin{command}{\measureLineVL,\measureLineVR}
+% Vertical measuring with text left or right of the line.
+% \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{command}{\ValPerUnit,\unitfactor}
+% Shows a length in \len{unitlength} with a accuracy of 1/\cs{unitfactor}.
+% \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{command}
+% \begin{command}{\measureLineH}
+% Horizontal measuring without text.
+% \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{command}
+% \begin{command}{\measureLineHB,\measureLineHT}
+% Horizontal measuring with text below or above.
+% \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{command}
+% \begin{fontelement}{measure}
+% Used to change the color of a measuring line (font changes doe not make sense).
+% \begin{macrocode}
+\newkomafont{measure}{\normalcolor}
+% \end{macrocode}
+% \end{fontelement}
+% \end{command}
+%
+% \begin{command}{\showISOenvelope}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Show a DIN/ISO C4, C5, DL=C5/6, or C6/5 envelope, depending on the argument.
+% \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{command}
+%
+% \begin{command}{\showUScommercial}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Show a US commercial no. 9 or 10 envelope, depending on the argument.
+% \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{command}
+%
+% \begin{command}{\showUScheck}
+% Show a US check envelope.
+% \begin{macrocode}
+\newcommand*{\showUScheck}{%
+ \showenvelope(8.625in,3.625in)%
+}
+%</visualize&body>
+% \end{macrocode}
+% \end{command}
+%
+%
+% \begin{command}{\showUSletterCixDW}
+% Show a Us commercial no. 9 envelope with two windows (this is defined in
+% \file{UScommercial9DW.lco} not in \file{visualize.lco}).
+% The sender window is $3\frac{1}{2}\,\mathrm{in}\times\frac{7}{8}\,\mathrm{in}$,
+% $\frac{5}{16}\,\mathrm{in}$ from the left and $2\frac{1}{2}\,\mathrm{in}$
+% from the bottom.
+% \begin{macrocode}
+%<*!visualize&UScommercial9DW&body>
+\newcommand*{\showUSletterCixDW}{%
+ \showUScommercial9[{%
+ \thicklines
+ \usekomafont{envelope}%
+ \measuredIFrame({\dimexpr (\paperwidth-
+ \expandafter\dimexpr \useplength{firstheadwidth}\relax%
+ )/2\relax},%
+ -\expandafter\dimexpr\useplength{firstheadvpos}\relax)%
+ (3.5in,.875in)%
+ }]%
+}
+%</!visualize&UScommercial9DW&body>
+% \end{macrocode}
+% \end{command}
+%
+% \begin{macrocode}
+%</lco>
+% \end{macrocode}
+%
+% \Finale
+% \PrintChanges
+%
+\endinput
+% Local Variables:
+% mode: doctex
+% ispell-local-dictionary: "en_US"
+% eval: (flyspell-mode 1)
+% TeX-master: t
+% TeX-engine: luatex-dev
+% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx"))
+% End: