diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-letterclassoptions.dtx | 1719 |
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: |