diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-notepaper.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-notepaper.dtx | 5014 |
1 files changed, 5014 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-notepaper.dtx b/macros/latex/contrib/koma-script/scrkernel-notepaper.dtx new file mode 100644 index 0000000000..e135fb5831 --- /dev/null +++ b/macros/latex/contrib/koma-script/scrkernel-notepaper.dtx @@ -0,0 +1,5014 @@ +% \iffalse meta-comment +% ====================================================================== +% scrkernel-notepaper.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-notepaper.dtx 3895 2022-06-20 10:37:02Z kohm $ +%<option>%%% (run: option) +%<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-20 12:37:02 +0200 (Mo, 20. Jun 2022) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 3895 $ + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\ProvidesFile{scrkernel-notepaper.dtx} + [\filedate\space\filerevision\space + KOMA-Script source + (note-paper)] + }% +\reserved@a +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\setcounter{StandardModuleDepth}{3} +\begin{document} +\DocInput{scrkernel-notepaper.dtx} +\end{document} +%</dtx> +% \fi +% +% \changes{v2.95}{2006/03/16}{first version after splitting \file{scrclass.dtx}} +% \changes{v3.36}{2022/02/26}{\cs{@newplength} replaced by \cs{newplength}} +% \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/03/02}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/03/02}{whole implementation documentation in English} +% +% \GetFileInfo{scrkernel-notepaper.dtx} +% \title{Specific Code for Letters and Especially the Notepaper with +% \href{https://komascript.de}{\KOMAScript}} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% The notepaper is something with high interest for letters. \KOMAScript{} +% provides a wide range of configurations for it. \file{scrkernel-notepaper} +% implements these features with options, variables and pseudo lengths +% \end{abstract} +% \tableofcontents +% +% \section{User Manual} +% +% You can find the user documentation the commands implemented here in the +% \KOMAScript{} manual, either the German \file{scrguide} or the English +% \file{scrguien}. +% +% \MaybeStop{\PrintIndex} +% +% +% \section{Implementation of the Notepaper of Letters} +% +% This code is only valid for letters with \cls*{scrlttr2} or +% \pkg*{scrletter}. +% +% \begin{macrocode} +%<*letter> +% \end{macrocode} +% +% +% \subsection{Options of the letter head} +% +% There are several options for the letter head. +% +% \begin{option}{firsthead} +% \changes{v2.97e}{2007/11/22}{added} +% \begin{macro}{\@firstheadfalse,\@firstheadtrue,\if@firsthead} +% \changes{v2.8q}{2002/01/25}{added} +% Optionally the whole letter head can be switched off (default is on). +% \begin{macrocode} +%<*option> +\KOMA@ifkey{firsthead}{@firsthead} +\KOMAExecuteOptions{firsthead=true} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromalign} +% \changes{v2.8q}{2002/01/25}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@alignfrom} +% \changes{v2.8q}{2002/01/25}{added} +% \changes{v2.97e}{2007/11/13}{new values added} +% The option provides several values for placing the sender of the letter. The +% decision is saved as numerical value of the macro. +% \begin{center} +% \begin{tabular}{lrl} +% \opt{fromalign} & \cs{@alignfrom} & placement\\\hline +% \opt{=left} & 0 & left in the head\\ +% \opt{=center} & 1 & centered in the head\\ +% \opt{=right} & 2 & right in the head\\ +% \opt{=locationleft} & 3 & left in the location field\\ +% \opt{=locationright} & 4 & right in the location field\\ +% \opt{=false} & 10000 & \emph{don't touch} \\ +% \end{tabular} +% \end{center} +% Initial setting is \emph{don't touch}, which means not to change the content +% of variable \var{firsthead} of \var{location}. +% \begin{macrocode} +\newcommand*{\@alignfrom}{0} +\KOMA@key{fromalign}{% + \KOMA@set@ncmdkey{fromalign}{@alignfrom}{% + {left}{0},% + {center}{1},{centered}{1},{middle}{1},% + {right}{2},% + {locationleft}{3},{leftlocation}{3},% + {locationright}{4},{rightlocation}{4},{location}{4},% + {no}{10000},{false}{10000},{off}{10000}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{fromalign}{#1}% + \ifcase\@alignfrom\or\or\or\@firstheadfalse\or\@firstheadfalse\fi + \fi +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{fromalign}{left} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromrule} +% \changes{v2.8q}{2002/01/25}{added} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@rulefrom} +% \changes{v2.8q}{2002/01/25}{added} +% Should there be a horizontal rule inside the sender of the automatic +% generated letter head of option \opt{fromalign}? +% \begin{center} +% \begin{tabular}{lrl} +% \opt{fromrule} & \cs{@rulefrom} & rule placement \\\hline +% \opt{=false} & 0 & nowhere \\ +% \opt{=aftername} & 1 & below the senders name \\ +% \opt{=below} & 2 & below the senders address \\ +% \end{tabular} +% \end{center} +% Initial setting is nowhere. +% \begin{macrocode} +\KOMA@ncmdkey{fromrule}[below]{@rulefrom}{% + {false}{0},{no}{0},{off}{0},{aftername}{1},% + {below}{2},{afteraddress}{2},{true}{2},{yes}{2},{on}{2}% +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{fromrule}{false} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromphone} +% \changes{v2.8q}{2002/01/25}{added} +% \begin{macro}{\@phonefalse,\@phonetrue,\if@phone} +% \changes{v2.8q}{2002/01/25}{added} +% Show the sender's telephone number in the letter head automatically +% generated by option \opt{fromalign}? +% \begin{macrocode} +\KOMA@ifkey{fromphone}{@phone} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{frommobilephone} +% \changes{v3.12}{2013/05/29}{added} +% \begin{macro}{\@mobilephonefalse,\@mobilephonetrue,\if@mobilephone} +% \changes{v3.12}{2013/05/29}{added} +% Show the sender's mobile telephone number in the letter head automatically +% generated by option \opt{fromalign}? +% \begin{macrocode} +\KOMA@ifkey{frommobilephone}{@mobilephone} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromfax} +% \changes{v2.8q}{2002/01/25}{added} +% \begin{macro}{\@faxfalse,\@faxtrue,\if@fax} +% \changes{v2.8q}{2002/01/25}{added} +% Show the sender's telefax number in the letter head automatically generated +% by option \opt{fromalign}? +% \begin{macrocode} +\KOMA@ifkey{fromfax}{@fax} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromemail} +% \changes{v2.8q}{2002/01/25}{added} +% \begin{macro}{\@emailfalse,\@emailtrue,\if@email} +% \changes{v2.8q}{2002/01/25}{added} +% Show the sender's email address in the letter head automatically generated +% by option \opt{fromalign}? +% \begin{macrocode} +\KOMA@ifkey{fromemail}{@email} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromurl} +% \changes{v2.8q}{2002/01/25}{added} +% \begin{macro}{\@wwwfalse,\@wwwtrue,\if@www} +% \changes{v2.8q}{2002/01/25}{added} +% Show a sender's url (e.g. of the homepage) in the letter head automatically +% generated by option \opt{fromalign}? +% \begin{macrocode} +\KOMA@ifkey{fromurl}{@www} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{fromlogo} +% \changes{v2.8q}{2002/01/25}{added} +% \begin{macro}{\@logofalse,\@logotrue,\if@logo} +% \changes{v2.8q}{2002/01/25}{added} +% Show a sender's logo in the letter head automatically generated by option +% \opt{fromalign} (placement also depends on \opt{fromalign})? +% \begin{macrocode} +\KOMA@ifkey{fromlogo}{@logo} +%</option> +% \end{macrocode} +% \end{macro} +% \end{option} +% +% +% \subsection{Options for the addressee and the location field} +% +% \begin{option}{addrfield} +% \changes{v2.8q}{2001/10/09}{added} +% \changes{v3.03}{2009/03/04}{new values added} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@afieldmode} +% \changes{v3.03}{2009/03/04}{added} +% There are several settings for the address field---not only to switch it on +% and off: +% \begin{center} +% \begin{tabular}{lrl} +% \opt{addrfield} & \cs{@afieldmode} & meaning \\\hline +% false & 0 & don't show the address +% field\\ +% true & 1 & show address field +% centered\\ +% PP & 2 & address field with +% pospaid\\ +% backgroundimage & 3 & address field with +% background image\\ +% image & 4 & address field by image\\ +% topaligned & 5 & show address field top +% aligned\\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +%<*option> +\newcommand*{\@afieldmode}{\@ne} +\KOMA@ncmdkey{addrfield}[true]{@afieldmode}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},% + {PP}{2},{pp}{2},% + {PPexplicite}{2},{PPExplicite}{2},% + {ppexplicite}{2},{ppExplicite}{2},% + {backgroundimage}{3},% + {PPbackgroundimage}{3},{PPBackgroundImage}{3},{PPBackGroundImage}{3},% + {ppbackgroundimage}{3},{ppBackgroundImage}{3},{ppBackGroundImage}{3},% + {image}{4},{Image}{4},% + {PPimage}{4},{PPImage}{4},% + {ppimage}{4},{ppImage}{4},% + {topaligned}{5},{alignedtop}{5}% +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{addrfield}{true} +% \end{macrocode} +% \begin{macro}{\@afieldfalse,\@afieldtrue,\if@afield} +% \changes{v3.03}{2009/03/04}{replaced by \cs{@afieldmode}} +% \changes{v3.36}{2022/03/02}{removed} +% \end{macro} +% \end{macro} +% \end{option} +% +% \begin{option}{priority} +% \changes{v3.03}{2009/03/04}{added} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \changes{v3.36}{2022/03/02}{value \opt{\quotechar=manual} fixed} +% \begin{macro}{\ltr@priority} +% \changes{v3.03}{2009/03/04}{added} +% The international postage convention allows two priorities for +% letters. Together with no (or manually given) priority we have three of +% them: +% \begin{center} +% \begin{tabular}{lrl} +% \opt{priority} & \cs{ltr@priority} & meaning \\\hline +% false & 0 & use variable \var{specialmail}\\ +% B & 1 & set \var{specialmail} to +% B-Economy\\ +% A & 2 & set \var{specialmail} to +% A-Priority\\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +\KOMA@ncmdkey{priority}[A]{ltr@priority}{% + {no}{0},{off}{0},{false}{0},{manual}{0},% + {B}{1},{b}{1},% + {economy}{1},{Economy}{1},{ECONOMY}{1},% + {B-ECONOMY}{1},{B-Economy}{1},{b-economy}{1},% + {A}{2},{a}{2},% + {priority}{2},{Priority}{2},{PRIORITY}{2},% + {A-PRIORITY}{2},{A-Priority}{2},{a-priority}{2}% +}% +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{priority}{false} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \begin{option}{backaddress} +% \changes{v2.8q}{2002/01/22}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{3015/03/16}{using internal value storage} +% \begin{macro}{\@baddrfalse,\@baddrtrue,\if@baddr} +% \begin{macro}{\backaddr@format} +% \changes{v2.96}{2006/07/31}{added} +% The address field of the addressee can also contain a small sender's address +% also known as return address. +% \begin{center} +% \begin{tabular}{llll} +% \opt{backaddress} & \cs{if@baddr} & \cs{backaddr@format} & meaning \\\hline +% \opt{=false} & \cs{iffalse} & unchanged & don't show a +% return +% address\\ +% \opt{=true} & \cs{iftrue} & unchanged & show the +% return address\\ +% \opt{=underlined} & \cs{iftrue} & \cs{underline} & show +% underlined +% return +% address\\ +% \opt{=plain} & \cs{iftrue} & \cs{@firstofone} & show the +% return +% address +% unchanged\\ +% \end{tabular} +% \end{center} +% Initial setting is to show a underlined return address. +% \begin{macrocode} +\newcommand{\backaddr@format}[1]{} +\let\backaddr@format\underline +\newif\if@baddr\@baddrtrue +\KOMA@key{backaddress}[true]{% + \begingroup + \KOMA@set@ncmdkey{backaddress}{@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},% + {underlined}{2},% + {plain}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \ifcase\@tempa + \endgroup + \@baddrfalse + \or + \endgroup + \@baddrtrue + \or + \endgroup + \@baddrtrue + \let\backaddr@format\underline + \or + \endgroup + \@baddrtrue + \let\backaddr@format\@firstofone + \else + \endgroup + \fi + \if@baddr + \ifx\backaddr@format\underline + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{backaddress}{underlined}% + \else + \ifx\backaddr@format\@firstofone + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{backaddress}{plain}% + \else + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{backaddress}{true}% + \fi + \fi + \else + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{backaddress}{false}% + \fi + \else + \endgroup + \FamilyKeyStateUnknownValue + \fi +} +% \end{macrocode} +% \end{macro}^^A \backaddr@format +% \end{macro}^^A \if@baddr +% \end{option}^^A backaddress +% +% \begin{option}{locfield} +% \changes{v2.8q}{2001/10/09}{added} +% \changes{v2.97c}{2007/03/30}{inverted meaning fixed} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@biglocfalse,\@bigloctrue,\if@bigloc} +% We allow two different automatic settings for the location field right +% beside the addressee's address field: +% \begin{center} +% \begin{tabular}{lll} +% \opt{locfield} & \cs{if@bigloc} & meaning \\\hline +% \opt{=wide} & \cs{iftrue} & set \plen{locwidth} to 2/3 of +% available space\\ +% \opt{=narrow} & \cs{iffalse} & set \plen{locwidth} to 1/2 of +% available space\\ +% \end{tabular} +% \end{center} +% Initial setting is \opt{locfield=narrow}. +% \begin{macrocode} +\newif\if@bigloc +\KOMA@key{locfield}[wide]{% + \begingroup + \KOMA@set@ncmdkey{locfield}{@tempa}{{wide}{0},{narrow}{1}}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \ifcase\@tempa + \endgroup + \@bigloctrue + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{locfield}{wide}% + \else + \endgroup + \@biglocfalse + \KOMA@kav@replacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{locfield}{narrow}% + \fi + \else + \endgroup + \FamilyKeyStateUnknownValue + \fi +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{locfield}{narrow} +% \end{macrocode} +% \begin{option}{wlocfield,slocfield} +% \changes{v3.01a}{2008/11/20}{deprecated} +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{wlocfield}{locfield=wide} +\KOMA@DeclareDeprecatedOption{slocfield}{locfield=narrow} +%</option> +% \end{macrocode} +% \end{option}^^A wlocfield,slocfield +% \end{macro}^^A \if@bigloc +% \end{option}^^A locfield +% +% +% \subsection{Options of the fold marks} +% +% \KOMAScript{} provides a large number of horizontal and vertical fold marks. + +% \begin{option}{foldmarks} +% \changes{v2.8q}{2001/09/10}{added} +% \changes{v3.00}{2008/06/06}{locally re-definition of \cs{FamilyUnkownKeyVal} +% instead of \cs{KOMA@unkown@keyval}} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@foldfalse,\@foldtrue,\if@fold} +% \begin{macro}{\@usefolds} +% \changes{v2.97e}{2007/11/08}{added} +% Fold marks can be generally switched on and off and it can be selected, +% which fold marks should be shown, if fold marks has been activated: +% \begin{center} +% \begin{tabular}{llll} +% \opt{foldmarks} & \cs{if@fold} & \cs{@usefolds} & meaning\\\hline +% \opt{=true} & \cs{iftrue} & \emph{no change} & switch on fold +% marks\\ +% \opt{=false} & \cs{iffalse} & \emph{no change} & switch off fold +% marks\\ +% \opt{=\dots T\dots} & \emph{no change} & \texttt{T} \emph{added} & top +% fold mark +% enabled\\ +% \opt{=\dots M\dots} & \emph{no change} & \texttt{M} \emph{added} & middle +% fold mark +% enabled\\ +% \opt{=\dots B\dots} & \emph{no change} & \texttt{B} \emph{added} & bottom +% fold mark +% enabled\\ +% \opt{=\dots P\dots} & \emph{no change} & \texttt{P} \emph{added} & hole +% punch fold mark +% enabled\\ +% \opt{=\dots H\dots} & \emph{no change} & \texttt{TMBP} \emph{added} & all +% horizontal fold +% marks enabled\\ +% \opt{=\dots L\dots} & \emph{no change} & \texttt{L} \emph{added} & left +% fold mark +% enabled\\ +% \opt{=\dots V\dots} & \emph{no change} & \texttt{L} \emph{added} & all +% vertical fold +% marks enabled\\ +% \opt{=\dots t\dots} & \emph{no change} & \texttt{T} \emph{removed} & top +% fold mark +% disabled\\ +% \opt{=\dots m\dots} & \emph{no change} & \texttt{M} \emph{removed} & middle +% fold mark +% disabled\\ +% \opt{=\dots b\dots} & \emph{no change} & \texttt{B} \emph{removed} & bottom +% fold mark +% disabled\\ +% \opt{=\dots p\dots} & \emph{no change} & \texttt{P} \emph{removed} & hole +% punch fold mark +% disabled\\ +% \opt{=\dots h\dots} & \emph{no change} & \texttt{TMBP} \emph{removed} & all +% horizontal fold +% marks disabled\\ +% \opt{=\dots l\dots} & \emph{no change} & \texttt{L} \emph{removed} & left +% fold mark +% disabled\\ +% \opt{=\dots v\dots} & \emph{no change} & \texttt{L} \emph{removed} & all +% vertical fold +% marks disabled\\ +% \end{tabular} +% \end{center} +% Enabling or disabling a fold mark does not enable printing of fold +% marks. the enabled fold marks are only printed, if fold marks are switched +% on. The initial state is to switch on the top, middle, bottom, punch hole +% and left fold mark (in other words: all fold marks). +% \begin{macrocode} +%<*option> +\newif\if@fold\@foldtrue +\newcommand*{\@usefolds}{TMBPL} +\KOMA@key{foldmarks}[true]{% + \begingroup + \KOMA@set@ifkey\@empty{@fold}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \if@fold\aftergroup\@foldtrue\else\aftergroup\@foldfalse\fi + \aftergroup\FamilyKeyStateProcessed + \else + \aftergroup\FamilyKeyStateProcessed + \def\sc@nf@ldch@rs##1{% + \ifx ##1\@nil\else + \if ##1T\g@addto@macro\@usefolds{##1}\else + \if ##1M\g@addto@macro\@usefolds{##1}\else + \if ##1B\g@addto@macro\@usefolds{##1}\else + \if ##1P\g@addto@macro\@usefolds{##1}\else + \if ##1L\g@addto@macro\@usefolds{##1}\else + \if ##1V\g@addto@macro\@usefolds{L}\else + \if ##1H\g@addto@macro\@usefolds{TMBP}\else + \if ##1t\scr@removechar\@usefolds{T}\else + \if ##1m\scr@removechar\@usefolds{M}\else + \if ##1b\scr@removechar\@usefolds{B}\else + \if ##1p\scr@removechar\@usefolds{P}\else + \if ##1l\scr@removechar\@usefolds{L}\else + \if ##1v% + \scr@removechar\@usefolds{L}% + \else + \if ##1h% + \scr@removechar\@usefolds{T}% + \scr@removechar\@usefolds{M}% + \scr@removechar\@usefolds{B}% + \else + \aftergroup\FamilyKeyStateUnknownValue + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \expandafter\sc@nf@ldch@rs + \fi + }% + \expandafter\sc@nf@ldch@rs#1\@nil + \fi + \endgroup + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{foldmarks}{\@usefolds}% + \KOMA@kav@xadd{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{foldmarks}{\if@fold true\else false\fi}% + \fi +} +\KOMA@kav@xadd{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{foldmarks}{\@usefolds}% +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{foldmarks}{true}% +% \end{macrocode} +% \begin{macro}{\scr@removechar} +% \changes{v2.97e}{2007/11/08}{added} +% Used to remove one char from a character list macro like \cs{@usefolds}. +% \begin{macrocode} +\newcommand*{\scr@removechar}[2]{% + \def\in@@##1#2##2##3\in@@{% + \ifx\in@##2\else + \def\in@@####1#2\in@{\gdef#1{##1####1}}% + \in@@##2##3% + \fi}% + \expandafter\in@@#1#2\in@\in@@ +} +%</option> +% \end{macrocode} +% \end{macro}^^A \scr@removechar +% \end{macro}^^A \@usefolds +% \end{macro}^^A \if@fold +% \end{option}^^A foldmarks +% +% +% \subsection{Options of the reference line} +% +% \begin{option}{refline} +% \changes{v2.8n}{2001/09/08}{added} +% \changes{v2.96a}{2006/12/07}{alternated meaning fixed} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \changes{v3.09}{2011/03/07}{values \opt{\quotechar=dateleft}, +% \opt{\quotechar=dateright}, \opt{\quotechar=nodate} added} +% \changes{v3.27}{2019/05/03}{new value \opt{\quotechar=false} added} +% \begin{macro}{\@refwidefalse,\@refwidetrue,\if@refwide} +% \changes{v2.8n}{2001/09/08}{added} +% \begin{macro}{\@datepos} +% \changes{v3.09}{2011/03/07}{added} +% \begin{macro}{\@reflinefalse,\@reflinetrue,\if@refline} +% \changes{v3.27}{2019/05/03}{added} +% The reference line support two predefined widths, switching off and +% three different positions for the date: +% \begin{center} +% \begin{tabular}{lllrl} +% \opt{refline} & \cs{if@refwide} & \cs{if@refline} & \cs{@datepos} & +% meaning\\\hline +% \opt{false} & \emph{unchanged}& \cs{iffalse} & \emph{unchanged} & +% deactivate reference line\\ +% \opt{=wide} & \cs{iftrue} & \cs{iftrue} & \emph{unchanged} & +% print wide reference line\\ +% \opt{=narrow} & \cs{iffalse} & \cs{iftrue} & \emph{unchanged} & +% print narrow reference line\\ +% \opt{=nodate}& \emph{unchanged} & \emph{unchanged} & 1 & don't print +% date in reference line\\ +% \opt{=dateright}& \emph{unchanged} & \emph{unchanged} & 1 & add date +% rightmost to reference line\\ +% \opt{=dateleft} & \emph{unchanged} & \emph{unchanged} & 2 & add date +% leftmost to reference line\\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +%<*option> +\newif\if@refwide +%<package>\newif\if@refline\@reflinetrue +\newcommand*{\@datepos}{1} +\KOMA@key{refline}[wide]{% + \begingroup + \KOMA@set@ncmdkey{refline}{@tempa}{{wide}{0},{narrow}{1},% + {dateleft}{2},{leftdate}{2},% + {dateright}{3},{rightdate}{3},% + {nodate}{4}% +%<package> ,{no}{5},{off}{5},{false}{5}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \ifcase\@tempa% wide + \endgroup + \@refwidetrue +%<*package> + \@reflinetrue + \KOMA@kav@remove{.scrletter.\scr@pkgextension}{refline}{false}% +%</package> + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{wide}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{narrow}% + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{wide}% + \or% narrow + \endgroup + \@refwidefalse +%<*package> + \@reflinetrue + \KOMA@kav@remove{.scrletter.\scr@pkgextension}{refline}{false}% +%</package> + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{wide}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{narrow}% + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{narrow}% + \or% dateleft + \endgroup + \def\@datepos{2}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateleft}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateright}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{nodate}% + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateleft}% + \or% dateright + \endgroup + \def\@datepos{1}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateleft}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateright}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{nodate}% + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateright}% + \or% nodate + \endgroup + \def\@datepos{0}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateleft}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{dateright}% + \KOMA@kav@remove{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{nodate}% + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{refline}{nodate}% +%<*package> + \or% false + \endgroup + \@reflinefalse + \KOMA@kav@remove{.scrletter.\scr@pkgextension}{refline}{wide}% + \KOMA@kav@remove{.scrletter.\scr@pkgextension}{reline}{narrow}% + \KOMA@kav@add{.scrletter.\scr@pkgextension}{refline}{false}% +%</package> + \fi + \else + \endgroup + \FamilyKeyStateUnknownValue + \fi +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{refline}{dateright}% +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{refline}{narrow}% +%</option> +% \end{macrocode} +% \end{macro}^^A \@reflinefalse,\@reflinetrue,\if@refline +% \end{macro}^^A \@datepos +% \end{macro}^^A \@refwidefalse,\@refwidetrue,\if@refwide +% \end{option}^^A refline +% +% +% \subsection{Options of the subject} +% +% \begin{option}{subject} +% \changes{v2.8q}{2001/10/09}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \begin{macro}{\@subjtrue,\@subjfalse,\if@subj} +% \begin{macro}{\@subjaftertrue,\@subjafterfalse,\if@subjafter} +% \begin{macro}{\subject@format} +% \changes{v2.97c}{2007/07/06}{added} +% \begin{command}{\raggedsubject} +% \changes{v2.97c}{2007/07/06}{added} +% The subject can be printed with or without title before or after the +% opening. Different alignments and formats are also supported: +% \begin{center} +% \begin{tabular}{lllll} +% \opt{subject} & \cs{if@subj} & \cs{if@subjafter} & \cs{subject@format} & +% \cs{raggedsubject}\\\hline +% \opt{=titled} & \cs{iftrue} & \emph{unchanged} & \emph{unchanged} & +% \emph{unchanged}\\ +% \opt{=untitled} & \cs{iffalse} & \emph{unchanged} & \emph{unchanged} & +% \emph{unchanged}\\ +% \opt{=afteropening} & \emph{unchanged} & \cs{iftrue} & \emph{unchanged} & +% \emph{unchanged}\\ +% \opt{=beforeopening} & \emph{unchanged} & \cs{iffalse} & \emph{unchanged} & +% \emph{unchanged}\\ +% \opt{=underlined} & \emph{unchanged} & \emph{unchanged} & \cs{underline} +% & \emph{unchanged}\\ +% \opt{=left} & \emph{unchanged} & \emph{unchanged} & \emph{unchanged} & +% \cs{raggedright} \\ +% \opt{=right} & \emph{unchanged} & \emph{unchanged} & \emph{unchanged} & +% \cs{raggedleft} \\ +% \opt{=centered} & \emph{unchanged} & \emph{unchanged} & \emph{unchanged} & +% \cs{centering} \\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +%<*option> +\newcommand{\subject@format}[1]{#1} +\newcommand*{\raggedsubject}{} +\newif\if@subj +\newif\if@subjafter +\KOMA@key{subject}{% + \begingroup + \KOMA@set@ncmdkey{subject}{@tempa}{% + {titled}{0},% + {untitled}{1},% + {afteropening}{2},% + {beforeopening}{3},% + {underlined}{4},% + {left}{5},% + {right}{6},% + {centered}{7}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \ifcase\@tempa + \aftergroup\@subjtrue + \or + \aftergroup\@subjfalse + \or + \aftergroup\@subjaftertrue + \or + \aftergroup\@subjafterfalse + \or + \aftergroup\let\aftergroup\subject@format\aftergroup\underline + \or + \aftergroup\let\aftergroup\raggedsubject\aftergroup\raggedright + \or + \aftergroup\let\aftergroup\raggedsubject\aftergroup\raggedleft + \or + \aftergroup\let\aftergroup\raggedsubject\aftergroup\centering + \fi + \else + \aftergroup\FamilyKeyStateUnknownValue + \fi + \endgroup + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{\if@subj titled\else untitled\fi}% + \KOMA@kav@xadd{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{\if@subjafter after\else before\fi opening}% + \ifx\subject@format\underline + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{underlined}% + \fi + \ifx\raggedsubject\raggedright + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{left}% + \else + \ifx\raggedsubject\raggedleft + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{right}% + \else + \ifx\raggedsubject\centering + \KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{subject}{centered}% + \fi + \fi + \fi + \fi +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{subject}{untitled}% +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{subject}{beforeopening}% +%</option> +% \end{macrocode} +% \end{command}^^A \raggedsubject +% \end{macro}^^A \subject@format +% \end{macro}^^A \@subjaftertrue,\@subjafterfalse,\if@subjafter +% \end{macro}^^A \@subjtrue,\@subjfalse,\if@subj +% \end{option}^^A subject +% +% +% \subsection{Options of the typing area} +% +% \begin{option}{enlargefirstpage} +% \changes{v2.8o}{2001/09/18}{added} +% \begin{macro}{\@enlargefpfalse,\@enlargefptrue,\if@enlargefp} +% \changes{v2.8o}{2001/09/18}{added} +% Usually the text at the notepaper is placed regarding the general typing +% area. But if the position of the foot of the note paper is to high, the text +% area is automatically shorten. Option \opt{firstpageenlarge} also provides +% the opposite: enlarge the text area of the first page, if the foot of the +% note paper is placed very low. +% \begin{macrocode} +%<*option> +\KOMA@ifkey{enlargefirstpage}{@enlargefp} +%</option> +% \end{macrocode} +% \end{macro}^^A \if@enlargefp +% \end{option}^^A enlargefirstpage +% +% +% \subsection{Options of the letter footer} +% +% \begin{option}{firstfoot} +% \changes{v2.97e}{2007/11/22}{added} +% \begin{macro}{\@firstfootfalse,\@firstfoottrue,\if@firstfoot} +% \changes{v2.8q}{2002/01/25}{added} +% Allow to switch of the footer of the note paper. +% \begin{macrocode} +%<*option> +\KOMA@ifkey{firstfoot}{@firstfoot}\@firstfoottrue +%</option> +% \end{macrocode} +% \end{macro} +% \end{option} +% +% +% \subsection{Options of the head of succeeding pages} +% +% \begin{option}{pagenumber} +% \changes{v2.8q}{2002/01/31}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \begin{macro}{\@pageat} +% \changes{v2.8q}{2002/01/31}{added} +% This is irrelevant for the notepaper but selects the position of the page +% number on succeeding pages using page style \pstyle{headings}, +% \pstyle{myheadings} or \pstyle{plain} resp. \pstyle{letter} or +% \pstyle{plain.letter}. +% \begin{center} +% \begin{tabular}{lrl} +% \opt{pagenumber} & \cs{@pageat} & meaning\\\hline +% \opt{=false} & -1 & no page number\\ +% \opt{=topleft} & 0 & in the left of the page head\\ +% \opt{=topmiddle} & 1 & centered in the page head\\ +% \opt{=topright} & 2 & in the right of the page head\\ +% \opt{=botleft} & 3 & in the left of the page foot\\ +% \opt{=botmiddle} & 4 & centered in the page foot\\ +% \opt{=botright} & 5 & in the right of the page foot\\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +%<*option> +\newcommand*{\@pageat}{4} +\KOMA@key{pagenumber}{% + \begingroup + \KOMA@set@ncmdkey{pagenumber}{@tempa}{% + {no}{-1},{off}{-1},{false}{-1},% + {topleft}{0},{headleft}{0},% + {topmiddle}{1},{topcenter}{1},{topcentered}{1},% + {headmiddle}{1},{headcenter}{1},{headcentered}{1},% + {topright}{2},{headright}{2},% + {botleft}{3},{footleft}{3},% + {botmiddle}{4},{botcenter}{4},{botcentered}{4},% + {footmiddle}{4},{footcenter}{4},{footcentered}{4},% + {botright}{5},{footright}{5},% + {top}{10},{head}{10},{bot}{11},{foot}{11},% + {left}{20},{middle}{21},{center}{21},{centered}{21},{right}{22}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \ifnum\@tempa<10 + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\@tempa}}% + \else + \ifnum\@tempa<20 + \@tempcnta\@pageat\relax + \ifnum\@tempcnta>2 + \advance\@tempcnta by -3 + \fi + \ifnum\@tempa=11 + \advance\@tempcnta by 3 + \fi + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}% + \else + \ifnum\@pageat>2 + \edef\@pageat{3}% + \else + \edef\@pageat{0}% + \fi + \@tempcnta\@tempa + \advance\@tempcnta by -20 + \advance\@tempcnta by\@pageat + \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}% + \fi + \fi + \else + \def\@tempa{\endgroup\FamilyKeyStateUnknownValue}% + \fi + \@tempa + \KOMA@kav@xreplacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{pagenumber}{% + \ifcase \@pageat + topleft% + \or + topmiddle% + \or + topright% + \or + botleft% + \or + botmiddle% + \or + botright% + \else + false% + \fi + }% +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{pagenumber}{botmiddle} +%</option> +% \end{macrocode} +% \end{macro} +% \end{option} +% +% +% \subsection{Commands and macros of the letter head} +% +% \begin{variable}{firsthead} +% \changes{v2.8q}{2002/01/28}{\cs{@alignfrom} set to 10000} +% \changes{v3.08}{2010/10/28}{added} +% \changes{v3.13b}{2014/10/04}{\emph{hook} for \file{DINmtext.lco} added} +% \changes{v3.27}{2019/04/02}{\emph{hook} removed} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% The head of the notepaper is not set by the page style but variable +% \var{firsthead} inside \cs{opening}. +% \begin{description} +% \item[ToDo:] Change this at least for \pkg*{scrletter} to make the letter +% head independent from \cs{opening}. With this \opt{fromalign} could +% immediately re-define \var{firsthead} and also \cs{@gen@fisthead} +% could become superfluously. +% \end{description} +% \begin{macrocode} +%<*body> +\newkomavar{firsthead} +\setkomavar{firsthead}{% + \parbox[b]{\useplength{firstheadwidth}}% + {\centering\usekomafont{fromaddress}{% + \Ifkomavarempty{fromname}{}{% + {\usekomafont{fromname}% + {\ignorespaces\usekomavar{fromname}}\\[-8pt]} + {\usekomafont{fromrule}{\rule{\useplength{firstheadwidth}}{.4pt}}}\\ + }% + \Ifkomavarempty{fromaddress}{}{% + \ignorespaces\usekomavar{fromaddress}% + }% + }% + }% +} +% \end{macrocode} +% \end{variable} +% \begin{macro}{\scr@firsthead@postsetvar} +% \changes{v3.08}{2010/10/28}{added} +% \changes{v3.17}{2015/03/16}{internal setting of {fromalign\quotechar=false}} +% After setting the variable \opt{fromalign} has to be set to manual +% alignment. But this must not be done for the initialization. +% \begin{macrocode} +\newcommand*{\scr@firsthead@postsetvar}{% + \KOMAExecuteOptions[.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + ]{fromalign=no}% +} +% \end{macrocode} +% \end{macro}^^A \scr@firsthead@postsetvar +% \begin{macro}{\@gen@firsthead} +% \changes{v2.8q}{2002/01/28}{added} +% \changes{v2.97c}{2007/05/08}{configurable thickness of the line} +% \changes{v2.97c}{2007/05/08}{configurable font/color of the line} +% \changes{v3.06a}{2010/07/29}{using font element \fnt{fromrule}} +% \changes{v3.08}{2010/10/28}{the notepaper head is a variable} +% \changes{v3.12}{2013/05/29}{using variable \var{frommobilephone}} +% \begin{macrocode} +\newcommand*{\@gen@firsthead}{% +% \end{macrocode} +% Re-defines the page head of the notepaper, if this has been activated by +% option \opt{fromalign}. +% \begin{macrocode} + \ifcase\@alignfrom +% \end{macrocode} +% This is \cs{@alignfrom}=0 context, which means a left aligned sender's +% address. This is done using a \cs{parbox} over the while text width. +% \begin{macrocode} + \setkomavar{firsthead}{% + \parbox[b]{\textwidth}{\raggedright +% \end{macrocode} +% The name with the font element \fnt{fromname}. +% \begin{macrocode} + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% +% \end{macrocode} +% If \cs{@rulefrom}=1, a horizontal rule has to follow. The length is either +% \plen{fromrulewidth} or, if \plen{fromrulewidth} is 0, it is +% automatically calculated. Here we avoid a rule into the logo. +% \begin{macrocode} + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \if@logo + \settowidth{\@tempdimb}{\usekomavar{fromlogo}}% + \addtolength{\@tempdima}{-\@tempdimb}% + \fi + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + }% + \\ + }% +% \end{macrocode} +% Next the senders' address with all optional fields, depending on the +% corresponding switches. Once again we need a group because of the font +% element \fnt{fromaddress} to be used. +% \begin{macrocode} + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% +% \end{macrocode} +% If \cs{@rulefrom}=2, the horizontal rule has to be placed here. Once again +% the length can be calculated automatically for \plen{fromrulewidth}=0. +% \begin{macrocode} + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% + }% +% \end{macrocode} +% This was the \cs{parbox}, but maybe we have to place the logo. +% \begin{macrocode} + \if@logo + \llap{\usekomavar{fromlogo}}% + \fi + }% + \renewcommand*{\@alignfrom}{0}% + \or +% \end{macrocode} +% This is \cs{@alignfrom}=1 context, which means centered sender's +% address. Here the logo needs special treatment: It is placed in the location +% field. +% \begin{macrocode} + \setkomavar{firsthead}{% + \parbox[b]{\textwidth}{\centering + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% + }% + }% + \renewcommand*{\@alignfrom}{1}% + \or +% \end{macrocode} +% This is \cs{@alignfrom}=2 context, which means right aligned sender's +% address. This is almost the same as left aligned. +% \begin{macrocode} + \setkomavar{firsthead}{% + \if@logo + \rlap{\usekomavar{fromlogo}}% + \fi + \parbox[b]{\textwidth}{\raggedleft + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \if@logo + \settowidth{\@tempdimb}{\usekomavar{fromlogo}}% + \addtolength{\@tempdima}{-\@tempdimb}% + \fi + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\textwidth}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% + }% + }% + \renewcommand*{\@alignfrom}{2}% +% \end{macrocode} +% All other values of \cs{@alignfrom} do not change anything. +% \begin{macrocode} + \fi +} +% \end{macrocode} +% \end{macro}^^A \@gen@firsthead +% +% \begin{command}{\firsthead} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macro}{\@firsthead} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macrocode} +%<*class> +\newcommand*{\@firsthead}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\@firsthead.\MessageBreak + \string\usekomavar{firsthead} should be used\MessageBreak + instead of \string\@firsthead + }% + \usekomavar{firsthead}% +} +\newcommand{\firsthead}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\firsthead.\MessageBreak + You should use \string\setkomavar{firsthead}\MessageBreak + instead of \string\firsthead + } + \setkomavar{firsthead}% +} +%</class> +%</body> +% \end{macrocode} +% \end{macro} +% \end{command} +% +% \subsection{Fonts of the notepaper} +% +% \begin{fontelement}{foldmark} +% \changes{v2.97c}{2007/05/08}{added} +% The font or indeed the color of the fold marks. +% \begin{macrocode} +%<*body> +\newkomafont{foldmark}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{fromname} +% \changes{v2.95}{2006/03/23}{using \cs{newkomafont}} +% The font of the sender's name in the letter head. +% \begin{macrocode} +\newkomafont{fromname}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{fromaddress} +% \changes{v2.95}{2006/03/23}{using \cs{newkomafont}} +% The font of the sender's address in the letter head. +% \begin{macrocode} +\newkomafont{fromaddress}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{fromrule} +% \changes{v2.97c}{2007/05/08}{added} +% The font or indeed the color of the horizontal rule above or below the +% sender's address. +% \begin{macrocode} +\newkomafont{fromrule}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{backaddress} +% \changes{v2.95}{2006/03/23}{using \cs{newkomafont}} +% \changes{v3.21}{2016/05/19}{provides option +% \opt{egregdoesnotlikesansseriftitles}} +% The font of the return address. +% \begin{macrocode} +\newkomafont{backaddress}{\@gr@gsffamily} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{specialmail} +% \changes{v2.97c}{2007/07/06}{added} +% The font of the special sending note. +% \begin{macrocode} +\newkomafont{specialmail}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{priority} +% \changes{v3.03}{2009/03/04}{added} +% The font of the priority note of priority A or B. Here we don't use any lead +% and sans-serif is a must, so \opt{egregdoesnotlikesansseriftitles} is ignored. +% \texttt{egregdoesnotlikesansseriftitles} ignorieren. +% \begin{macrocode} +\newkomafont{priority}{\fontsize{10pt}{10pt}\sffamily\bfseries} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{prioritykey} +% \changes{v3.03}{2009/03/04}{added} +% The font of the letter of priority A or B. It is used after +% \fnt{priority}. Generally this should be 9\,mm, but this would need a free +% scalable font. With 24.88\,pt we are only 0.25\,mm to low. This should not +% be a problem and does also work with Computer Modern. Once again we do not +% use any lead. +% \begin{macrocode} +\newkomafont{prioritykey}{\fontsize{24.88pt}{24.88pt}\selectfont} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{PPlogo} +% \changes{v3.03}{2009/03/04}{added} +% The font of the ``\texttt{P.P.}'' logo, with \opt{addrfield=PP}. Once again +% sans-serif is a must, so \opt{egregdoesnotlikesansseriftitles} is ignored. +% \begin{macrocode} +\newkomafont{PPlogo}{\sffamily\bfseries} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{PPdata} +% \changes{v3.03}{2009/03/04}{added} +% The font to be used inside the PP head. Once again sans-serif is a must, so +% \opt{egregdoesnotlikesansseriftitles} is ignored. +% \begin{macrocode} +\newkomafont{PPdata}{\sffamily} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{addressee} +% \changes{v2.97c}{2007/07/06}{added} +% The font to be used for the whole addressee. +% \begin{macrocode} +\newkomafont{addressee}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{toname} +% \changes{v2.97c}{2007/07/06}{added} +% The font used only for the name of the addressee in difference to +% \fnt{addressee}. +% \begin{macrocode} +\newkomafont{toname}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{toaddress} +% \changes{v2.97c}{2007/07/06}{added} +% The font used only for the address of the addressee in difference to +% \fnt{addressee}. +% \begin{macrocode} +\newkomafont{toaddress}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{refname} +% \changes{v2.97c}{2007/05/14}{added} +% \changes{v3.21}{2016/05/19}{support of \opt{egregdoesnotlikesansseriftitles}} +% The font for the field names of the reference line. +% \begin{macrocode} +\newkomafont{refname}{\@gr@gsffamily\scriptsize} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{refvalue} +% \changes{v2.97c}{2007/05/14}{added} +% \changes{v2.97d}{2007/10/09}{initial value changed} +% The font of the field values of the reference line. +% Support for \opt{egregdoesnotlikesansseriftitles} is not needed on +% compatibility mode, because the option did not exist in version 2.97. +% \begin{macrocode} +%<*class> +\ifnum\scr@compatibility=\@nameuse{scr@v@2.97}\relax + \newkomafont{refvalue}{\sffamily\scriptsize} +\else +%</class> + \newkomafont{refvalue}{} +%<class>\fi +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{placeanddate} +% \changes{v3.12}{2013/07/31}{added} +% The font is used for place and date, if not real reference line but only +% place and date are used. +% \begin{macrocode} +\newkomafont{placeanddate}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{lettertitle} +% \changes{v3.17}{2015/02/21}{replacement of \fnt{letter}} +% \changes{v3.21}{2016/05/19}{support for \opt{egregdoesnotlikesansseriftitles}} +% The font of the title of the letter. +% \begin{macrocode} +\newkomafont{lettertitle}{\normalcolor\@gr@gsffamily\bfseries} +% \end{macrocode} +% \begin{fontelement}{title} +% \changes{v2.95}{2006/03/23}{using \cs{newkomafont}} +% \changes{v3.17}{2015/02/21}{only an alias} +% \changes{v3.17a}{2015/04/26}{alias fixed} +% \begin{macrocode} +%<package>\scr@ifundefinedorrelax{scr@fnt@title}{% + \aliaskomafont{title}{lettertitle}% +%<package>}{} +% \end{macrocode} +% \end{fontelement} +% \end{fontelement} +% +% \begin{fontelement}{lettersubject} +% \changes{v3.17}{2015/02/21}{replacement of \texttt{subject}} +% \changes{v3.17a}{2015/04/26}{alias fixed} +% The font of the subject of the letter. +% \begin{macrocode} +\newkomafont{lettersubject}{\normalfont\bfseries} +% \end{macrocode} +% \begin{fontelement}{subject} +% \changes{v2.95}{2006/03/23}{using \cs{newkomafont}} +% \changes{v3.17}{2015/02/21}{only an alias} +% \begin{macrocode} +%<package>\scr@ifundefinedorrelax{scr@fnt@subject}{% + \aliaskomafont{subject}{lettersubject}% +%<package>}{} +%</body> +% \end{macrocode} +% \end{fontelement} +% \end{fontelement} +% +% \subsection{Pseudo lengths of the notepaper} +% +% \begin{pseudolength}{foldmarkhpos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the horizontal fold marks to the left edge of the paper. +% \begin{macrocode} +%<*body> +\newplength{foldmarkhpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{foldmarkvpos} +% \changes{v2.97e}{2007/11/10}{added} +% Distance of the vertical fold marks to the top edge of the paper. +% \begin{macrocode} +\newplength{foldmarkvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{tfoldmarkvpos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the top of the horizontal fold marks to the top edge of the +% paper. +% \begin{macrocode} +\newplength{tfoldmarkvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{mfoldmarkvpos} +% \changes{v2.97e}{2007/11/08}{added} +% Distance of the middle horizontal fold mark (which is not the bunch +% hole fold mark) to the top edge of the paper. +% \begin{macrocode} +\newplength{mfoldmarkvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{bfoldmarkvpos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the lower horizontal fold mark to the top edge of the paper. +% \begin{macrocode} +\newplength{bfoldmarkvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{lfoldmarkhpos} +% \changes{v2.97e}{2007/11/10}{added} +% Distance of the left (and only) vertical fold mark to the left edge of the +% paper. +% \begin{macrocode} +\newplength{lfoldmarkhpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{pfoldmarklength,hfoldmarklength,mfoldmarklength, +% bfoldmarklength,lfoldmarklength} +% \changes{v2.97e}{2001/11/10}{added} +% The lengths of all fold marks. +% \begin{macrocode} +\newplength{pfoldmarklength} +\newplength{tfoldmarklength} +\newplength{mfoldmarklength} +\newplength{bfoldmarklength} +\newplength{lfoldmarklength} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{foldmarkthickness} +% \changes{v2.97c}{2007/05/08}{added} +% One length for the thickness/weight of all fold marks. +% \begin{macrocode} +\newplength{foldmarkthickness} +\setplength{foldmarkthickness}{.2pt} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{toaddrvpos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the address field of the addressee from the top edge of the +% paper. +% \begin{macrocode} +\newplength{toaddrvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{backaddrheight} +% \changes{v2.8q}{2001/10/06}{added} +% Height reserved for the return address inside the address field of the +% addressee. +% \begin{macrocode} +\newplength{backaddrheight} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{toaddrhpos} +% \changes{v2.8q}{2001/10/06}{added} +% If positive the distance of the left of the address field of the addressee +% to the left edge of the paper. Otherwise the (negative) distance of the +% addressee from the right of the address field of the addressee to the right +% edge of the paper. +% \begin{macrocode} +\newplength{toaddrhpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{specialmailindent} +% \changes{v2.8q}{2002/03/25}{added} +% Distance of the special sending note from the left edge of the address field +% of the addressee. +% \begin{macrocode} +\newplength{specialmailindent} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{specialmailrightindent} +% \changes{v2.8q}{2002/03/25}{added} +% Distance of the special sending not from the right edge of the address field +% of the addressee. +% \begin{macrocode} +\newplength{specialmailrightindent} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{toaddrindent} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the name and address of the addressee from the left edge of the +% address field of the addressee. With \opt{addrfield=PP} 0 is interpreted as +% 8\,mm, because of the international norm. Additionally the value is also +% used for the distance on the right side. In all other modes 0 is really 0. +% \begin{macrocode} +\newplength{toaddrindent} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{PPheadheight} +% \changes{v3.03}{2009/03/04}{added} +% The height of the PP head with \opt{addrfield=PP}, +% \opt{addrfield=backgroundimage} or \opt{addrfield=image}. 0 means 20.74\,pt +% here. +% \begin{macrocode} +\newplength{PPheadheight} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{PPheadwidth} +% \changes{v3.03}{2009/03/04}{added} +% The width of the PP head with \opt{addrfield=PP}. 0 means 42\,mm here. +% \begin{macrocode} +\newplength{PPheadwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{PPdatamatrixvskip} +% \changes{v3.03}{2009/03/04}{added} +% Distance between the PP head and the data matrix with \opt{addrfield=PP}. 0 +% means 9\,mm. +% \begin{macrocode} +\newplength{PPdatamatrixvskip} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{toaddrwidth} +% \changes{v2.8q}{2001/10/06}{added} +% Width of the address field of the addressee. +% \begin{macrocode} +\newplength{toaddrwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{toaddrheight} +% \changes{v2.8q}{2001/10/06}{added} +% \changes{v3.03b}{2009/06/25}{implemented like documented} +% Height of the address field inclusive return address. +% \begin{macrocode} +\newplength{toaddrheight} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{locvpos} +% \changes{v2.97e}{2007/11/07}{added} +% Distance of the location field from the top edge of the paper. +% \begin{macrocode} +\newplength{locvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{locwidth} +% \changes{v2.8q}{2001/10/06}{added} +% Width of the location field. +% \begin{macrocode} +\newplength{locwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{lochpos} +% \changes{v2.97e}{2007/11/07}{added} +% For positive values, the distance of the left of the location field to the +% left edge of the paper. For negative values the (negative) distance of the +% right of the location field to the right edge of the paper. +% \begin{macrocode} +\newplength{lochpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{locheight} +% \changes{v2.97e}{2007/11/07}{added} +% The height of the location field. +% \begin{macrocode} +\newplength{locheight} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{refvpos} +% \changes{v2.8q}{2001/10/06}{added} +% The distance of the reference line from the top edge of the paper. +% \begin{macrocode} +\newplength{refvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{refheight} +% \changes{v3.27}{2019/05/03}{new} +% The height of the reference line, if it is used. +% \begin{macrocode} +%<*package&willbe> +\newplength{refheight} +%</package&willbe> +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{refwidth} +% \changes{v2.8q}{2001/10/06}{added} +% The width of the reference line. +% \begin{macrocode} +\newplength{refwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{refhpos} +% \changes{v2.9l}{2003/01/28}{added} +% The horizontal position of the reference line. +% \begin{macrocode} +\newplength{refhpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{refaftervskip} +% \changes{v2.8q}{2001/10/09}{added} +% The vertical distance below the reference line. +% \begin{macrocode} +\newplength{refaftervskip} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{sigbeforevskip} +% \changes{v2.8q}{2001/10/09}{added} +% The vertical distance between the closing text and the signature text, to be +% used for the hand-written signature. +% \begin{macrocode} +\newplength{sigbeforevskip} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{sigindent} +% \changes{v2.8q}{2001/10/06}{added} +% Horizontal indent of the closing text and the signature. +% \begin{macrocode} +\newplength{sigindent} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstfootvpos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the letter footer (on the notepaper only) to the top edge of the +% paper. +% \begin{macrocode} +\newplength{firstfootvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstfootwidth} +% \changes{v2.8q}{2001/10/06}{added} +% Width of the letter footer (on the notepaper only). +% \begin{macrocode} +\newplength{firstfootwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstfoothpos} +% \changes{v3.05}{2009/11/09}{added} +% Distance of the letter footer (on the notepaper only) to the left edge of +% the paper. Note: See the \cs{opening} code for information about special +% value \cs{maxdimen}. +% \begin{macrocode} +\newplength{firstfoothpos} +\setplength{firstfoothpos}{\maxdimen} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstheadvspos} +% \changes{v2.8q}{2001/10/06}{added} +% Distance of the letter head (on the notepaper only) to the top edge of the +% paper. +% \begin{macrocode} +\newplength{firstheadvpos} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstheadwidth} +% \changes{v2.8q}{2001/10/06}{added} +% Width of the letter head (on the notepaper only). +% \begin{macrocode} +\newplength{firstheadwidth} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{firstheadhpos} +% \changes{v3.05}{2009/11/09}{added} +% Distance of the letter head (on the notepaper only) to the left edge of +% the paper. Note: See the \cs{opening} code for information about special +% value \cs{maxdimen}. +% \begin{macrocode} +\newplength{firstheadhpos} +\setplength{firstheadhpos}{\maxdimen} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{fromrulewidth} +% \changes{v2.8q}{2002/01/28}{added} +% The length of the optional horizontal rule above or below the address of the +% sender. Value 0 means automatically calculated length. +% \begin{macrocode} +\newplength{fromrulewidth} +\setplength{fromrulewidth}{0pt} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{fromrulethickness} +% \changes{v2.97c}{2007/05/08}{added} +% The thickness/weight of the optional horizontal rule above or below the +% address of the sender. +% \begin{macrocode} +\newplength{fromrulethickness} +\setplength{fromrulethickness}{.4pt} +%</body> +% \end{macrocode} +% \end{pseudolength} +% +% +% \subsection{The footer of the notepaper} +% +% \begin{variable}{firstfoot} +% \changes{v3.08}{2010/10/28}{added} +% Initially the value of the letter footer of the notepaper is empty. The user +% manual shows, how to use it. +% \begin{macrocode} +%<*body> +\newkomavar{firstfoot} +% \end{macrocode} +% \begin{command}{\firstfoot} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macro}{\@firstfoot} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macrocode} +%<*class> +\newcommand*{\@firstfoot}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\@firstfoot.\MessageBreak + \string\usekomavar{firstfoot} should be used\MessageBreak + instead of \string\@firstfoot + }% + \usekomavar{firstfoot}% +} +\newcommand{\firstfoot}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\firstfoot.\MessageBreak + You should use \string\setkomavar{firstfoot}\MessageBreak + instead of \string\firstfoot + } + \setkomavar{firstfoot}% +} +%</class> +%</body> +% \end{macrocode} +% \end{macro}^^A \@firstfoot +% \end{command}^^A \firstfoot +% \end{variable}^^A firstfoot +% +% +% \subsection{Output of the notepaper} +% +% \begin{description} +% \item[Note:] There have been plans to move output of the notepaper to the +% page style with \pkg*{scrletter}. You can find some experimental code for +% this already here with tag \texttt{willbe}. But the plans have been +% dropped, because there was not enough man power to design and implement it +% all and to keep \KOMAScript{} compatible with \LaTeX{} at the same time. +% \end{description} +% +% \begin{macro}{\scr@notepaper@printallelements} +% \changes{v3.27}{2019/04/16}{added} +% This is used by page style \pstyle{notepaper} (see +% \file{scrkernel-pagestyle.dtx}) to print all elements. +% \begin{macro}{\scr@notepaper@printelementsoflist} +% \changes{v3.27}{2019/04/16}{added} +% And this is used to print a given list of elements. +% \begin{macro}{\scr@notepaper@printelement} +% \changes{v3.27}{2019/04/16}{added} +% Last but not least this prints one given element. +% \begin{macrocode} +%<*package&body&willbe> +\newcommand*{\scr@notepaper@printallelements}{% + \scr@notepaper@printelementsoflist\scr@notepaper@elements +} +\newcommand*{\scr@notepaper@printelementsoflist}[1]{% + \expandafter\scr@ForEachTrimmedListElement\expandafter{#1}{% + \scr@notepaper@printelement + }% +} +\newcommand*{\scr@notepaper@printelement}[1]{% + \@ifundefined{scr@notepaper@element@#1}{% + \PackageWarning{scrletter}{% + Unknown note paper element `#1'\MessageBreak + will be ignored% + }% + }{% + \@nameuse{scr@notepaper@element@#1}% + }% +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@printelement +% \end{macro}^^A \scr@notepaper@printelementsoflist +% \end{macro}^^A \scr@notepaper@printallelements +% +% \begin{macro}{\scr@foldmarks@printallelements} +% \changes{v3.27}{2019/04/16}{new (internal)} +% This is used by the page style \pstyle{notepaper} to print all fold marks. +% \begin{macrocode} +\newcommand*{\scr@foldmarks@printallelements}{% + \if@fold + \ifdim \useplength{pfoldmarklength}=\z@ + \setplength{pfoldmarklength}{4mm}% + \fi + \ifdim \useplength{tfoldmarklength}=\z@ + \setplength{tfoldmarklength}{2mm}% + \fi + \ifdim \useplength{mfoldmarklength}=\z@ + \setplength{mfoldmarklength}{2mm}% + \fi + \ifdim \useplength{bfoldmarklength}=\z@ + \setplength{bfoldmarklength}{2mm}% + \fi + \ifdim \useplength{lfoldmarklength}=\z@ + \setplength{lfoldmarklength}{4mm}% + \fi + \@hfoldmark{P}% + \@hfoldmark{T}% + \@hfoldmark{M}% + \@hfoldmark{B}% + \@vfoldmark{L}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\scr@notepaper@elements} +% \changes{v3.27}{2019/03/22}{added} +% This is a comma-separated list of elements (aka blocks) to be printed on the +% notepaper. It is used by the page style layer \texttt{notepaper} to set all +% elements (see \file{scrkernel-pagestyle.dtx}). There are exactly four +% defaults (but you can add more): +% \begin{macrocode} +\newcommand*{\scr@notepaper@elements}{% + firsthead,addressee,location,firstfoot,refline% +} +% \end{macrocode} +% \begin{macro}{\scr@notepaper@element@firsthead} +% \changes{v3.27}{2019/03/22}{added} +% How to print the notepaper element \texttt{firsthead}: +% \begin{macrocode} +\newcommand*{\scr@notepaper@element@firsthead}{% + \if@firsthead +% \end{macrocode} +% The calculation of the real horizontal position could be done as part of the +% layer contents or while selection of the layer or while initialization of +% the layer. The in-contents code is used, so the layer can be used with +% different page styles. The position depends on \plen{firstheadhpos} this +% way: +% \begin{itemize} +% \item If \plen{firstheadhpos} is positive but less than the paper width, +% \plen{firstheadhpos} is the distance if the head from the left edge. +% \item If \plen{firstheadhpos} is negative but the absolute value is less +% then the paper width, the absolute value of \plen{firstheadhpos} is the +% distance from the right edge. +% \item If \plen{firstheadhpos} is greater than the paper width, the head +% will be centered. +% \item If \plen{firstheadhpos} is less than the negative paper width, the +% head will be left aligned to the text area. +% \end{itemize} +% \begin{macrocode} + \ifdim\useplength{firstheadhpos}<\paperwidth + \ifdim \useplength{firstheadhpos}>-\paperwidth + \ifdim \useplength{firstheadhpos}<\z@ + \setlength{\@tempdima}{\dimexpr + \paperwidth + \useplength{firstheadhpos} + - \useplength{firstheadwidth} + \relax}% + \else + \setlength{\@tempdima}{\useplength{firstheadhpos}}% + \fi + \else + \setlength{\@tempdima}{\dimexpr\oddsidemargin + 1in\relax}% + \fi + \else + \setlength{\@tempdima}{\dimexpr + (\paperwidth-\useplength{firstheadwidth})/2 + \relax}% + \fi + \put@notepaper@element + (\@tempdima,\useplength{firstheadvpos})% + (\useplength{firstheadwidth},% + \useplength{toaddrvpos}-\useplength{firstheadvpos})% + {Element `firsthead'}{\usekomavar{firsthead}}\relax + \fi +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@element@firsthead +% \begin{macro}{\scr@notepaper@element@firstfoot} +% \changes{v3.27}{2019/03/22}{added} +% Element \texttt{firstfoot} is very similar to \texttt{firsthead}. The +% differences are using of pseudo lengths for the foot instead the head and +% the calculation of the available height. +% \begin{macrocode} +\newcommand*{\scr@notepaper@element@firstfoot}{% + \if@firstfoot + \ifdim\useplength{firstfoothpos}<\paperwidth + \ifdim \useplength{firstfoothpos}>-\paperwidth + \ifdim \useplength{firstfoothpos}<\z@ + \setlength{\@tempdima}{\dimexpr + \paperwidth + \useplength{firstfoothpos} + - \useplength{firstfootwidth}% + \relax}% + \else + \setlength{\@tempdima}{\useplength{firstfoothpos}}% + \fi + \else + \setlength{\@tempdima}{\dimexpr\oddsidemargin + 1in\relax}% + \fi + \else + \setlength{\@tempdima}{\dimexpr + (\paperwidth-\useplength{firstfootwidth})/2 + \relax}% + \fi + \put@notepaper@element + (\@tempdima,\useplength{firstfootvpos})% + (\useplength{firstfootwidth}, + \paperheight-\useplength{firstfootvpos})% + {Element `firstfoot'}{\usekomavar{firstfoot}}\relax + \fi +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@element@firstfoot +% \begin{macro}{\scr@notepaper@element@addressee} +% \changes{v3.27}{2019/03/22}{added} +% Element \texttt{addressee} is very complex and therefore split into several +% different sub-elements. +% \begin{macrocode} +\newcommand*{\scr@notepaper@element@addressee}{% + \setlengthtoplength{\@tempdima}{toaddrhpos}% + \ifdim \@tempdima<\z@ + \addtolength{\@tempdima}{% + \dimexpr \paperwidth-\useplength{toaddrwidth}\relax + }% + \fi + \put@notepaper@element(\@tempdima,\useplength{toaddrvpos})% + (\useplength{toaddrwidth},\useplength{toaddrheight})% + {address field}{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \ifcase \@afieldmode\relax + \or + \scr@notepaper@subelement@addressee@default + \or + \scr@notepaper@subelement@addressee@PP + \or + \scr@notepaper@subelement@addressee@PPbackgroundimage + \or + \scr@notepaper@subelement@addressee@image + \else + \scr@notepaper@subelement@addressee@default + \fi + }\relax +} +% \end{macrocode} +% \begin{macro}{\scr@notepaper@subelement@addressee@default} +% \changes{v3.27}{2019/03/22}{added} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by \cs{Ifkomavarempty}} +% \changes{v3.30}{2020/03/27}{re-definition of line break moved} +% The field with the recipience address. This should be used only on the first +% page of a letter. +% \begin{macrocode} +\newcommand*{\scr@notepaper@subelement@addressee@default}{% + \setbox\@tempboxa\vbox {% + \hsize=\useplength{toaddrwidth}\linewidth=\hsize + \color@begingroup + \if@baddr + \Ifkomavarempty{backaddress}{}{% + \backaddr@format{\scriptsize + {% + \def\\{\usekomavar{backaddressseparator}\@ogobble}% + \usekomafont{backaddress}% + {\usekomavar{backaddress}}% + }% + }% + }% + \fi + \color@endgroup + }% + \ifdim \dimexpr\ht\@tempboxa+\dp\@tempboxa>\useplength{backaddrheight}\relax + \PackageWarning{scrletter}{Element `backaddress' to high.\MessageBreak + The content of `backaddress' could exceed\MessageBreak + the address field% + }% + \fi + \vbox to \useplength{backaddrheight}{\vss\usebox\@tempboxa}% + \ifcase \ltr@priority + \or + \setkomavar{specialmail}{% + {\usekomafont{priority}{% + {\usekomafont{prioritykey}{B}}% + -ECONOMY}}% + }% + \or + \setkomavar{specialmail}{% + {\usekomafont{priority}{% + {\usekomafont{prioritykey}{A}}% + -PRIORITY}}% + }% + \fi + \Ifkomavarempty{specialmail}{% + \@tempdima=\z@ + }{% + \setbox\@tempboxa\vbox{\hsize\useplength{toaddrwidth}% + \color@begingroup + \noindent\hspace*{\useplength{specialmailindent}}% + \specialmail@format{% + \usekomafont{specialmail}\usekomavar{specialmail}}% + \hspace*{\useplength{specialmailrightindent}}% + \color@endgroup + }% + \copy\@tempboxa + \@tempdima=\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax + }% + \setbox\@tempboxa\vbox{% + \hsize\dimexpr \useplength{toaddrwidth}-2\useplength{toaddrindent}\relax + \color@begingroup + \raggedright + \usekomafont{addressee}{% +%<*package> + \usekomavar{addressee}\par% +%</package> +%<class> {\usekomafont{toname}{\usekomavar{toname}\\}}% +%<class> {\usekomafont{toaddress}{\usekomavar{toaddress}\par}}% + }% + \color@endgroup + }% + \ifnum\@afieldmode=\@ne +% \end{macrocode} +% In opposite to the class, the package rounds the distance to lines. +% \begin{macrocode} + \vskip \dimexpr ((\useplength{toaddrheight}-\useplength{backaddrheight} + -\@tempdima -\ht\@tempboxa -\dp\@tempboxa + -\ht\strutbox)/(2*\baselineskip)) + *\baselineskip\relax + \fi + \hskip\useplength{toaddrindent}% + \usebox\@tempboxa +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@subelement@addressee@default +% \begin{macro}{\scr@notepaper@subelement@addressee@PP} +% \changes{v3.27}{2019/03/22}{added} +% \begin{macrocode} +\newcommand*{\scr@notepaper@subelement@addressee@PP}{% + \ifdim \useplength{toaddrindent}=\z@ + \setplength{toaddrindent}{8mm}% + \fi + \ifdim \useplength{PPheadheight}=\z@ + \setplength{PPheadheight}{20.74pt}% + \fi + \ifdim \useplength{PPheadwidth}=\z@ + \setplength{PPheadwidth}{42mm}% + \fi + \ifdim \useplength{PPdatamatrixvskip}=\z@ + \setplength{PPdatamatrixvskip}{3mm}% + \fi + \vskip 2pt\relax + \hskip \useplength{toaddrindent}\relax + \fbox{% + \vbox to \dimexpr \useplength{PPheadheight}-2\fboxsep\relax{% + \setlength{\parindent}{0pt}% + \hsize \dimexpr \useplength{PPheadwidth}-2\fboxsep\relax + \sbox\@tempboxa{% + {\fontsize{20.74pt}{20.74pt}\selectfont + \usekomafont{PPlogo}{P.P.}}\hskip 2mm% + }% + \dp\@tempboxa\z@ + \setlength{\@tempdima}{\hsize}% + \addtolength{\@tempdima}{-\wd\@tempboxa}% + \hbox{\box\@tempboxa + \vbox to \dimexpr + \useplength{PPheadheight}-2\fboxsep\relax{% + \vss\hsize\@tempdima + \raggedright + \fontsize{8pt}{9pt}\selectfont\usekomafont{PPdata}% + \usekomavar*{fromzipcode}\usekomavar{zipcodeseparator}% + \usekomavar{fromzipcode}\scr@endstrut\\ + \usekomavar{place}\scr@endstrut + \hfill + }% + }% + \vss + }% + }% + \hskip 1mm + \mbox{% + \vbox to \useplength{PPheadheight}{% + \addtolengthplength[-]{\hsize}{PPheadwidth}% + \addtolength{\hsize}{-1mm}% + \addtolengthplength[-2]{\hsize}{toaddrindent}% + \setlength{\parindent}{0pt}% + \fontsize{8pt}{9pt}\selectfont\usekomafont{PPdata}% + \hfill\usekomavar{PPcode} + \vss + \ifcase \ltr@priority + \or + \usekomafont{priority}{% + {\usekomafont{prioritykey}{B}}% + -ECONOMY\hss\vskip-\dp\strutbox + }% + \or + \usekomafont{priority}{% + {\usekomafont{prioritykey}{A}}% + -PRIORITY\hss\vskip-\dp\strutbox + }% + \fi + \vss + }% + }% + \vskip 1mm + \vskip-\ht\strutbox + \noindent\hskip\useplength{toaddrindent}% + \hrulefill% + \hskip\useplength{toaddrindent}% + \vbox to\z@{\hsize\z@ + \vskip \useplength{PPdatamatrixvskip}\relax + \llap{\usekomavar{PPdatamatrix}\hskip\useplength{toaddrindent}}% + \vss + }% + \vskip 3mm + \noindent\hskip\useplength{toaddrindent}% + \setlength{\@tempdima}{\useplength{toaddrwidth}}% + \addtolengthplength[-2]{\@tempdima}{toaddrindent}% + \vbox{\hsize\@tempdima + \Ifkomavarempty{PPdatamatrix}{}{% + \addtolength{\hsize}{-2mm}% + \settowidth\@tempdima{\usekomavar{PPdatamatrix}}% + \addtolength{\hsize}{-\@tempdima}% + }% + \raggedright + \usekomafont{addressee}{% +%<*package> + \usekomavar{addressee}\par% +%</package> +%<class> {\usekomafont{toname}{\usekomavar{toname}\\}}% +%<class> {\usekomafont{toaddress}{\usekomavar{toaddress}\par}}% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@subelement@addressee@PP +% \begin{macro}{\scr@notepaper@subelement@addressee@PPimage} +% \changes{v3.27}{2019/03/22}{added} +% The PP image. +% \begin{description} +% \item[ToDo:] Needs to be tested! +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@notepaper@subelement@addressee@PPimage}{% + \ifdim \useplength{toaddrindent}=\z@ + \setplength{toaddrindent}{8mm}% + \fi + \vskip 1mm + \noindent\expandafter\hskip\useplength{toaddrindent}% + \vbox to \useplength{PPheadheight}{% + \addtolengthplength[-2]{\hsize}{toaddrindent}% + \setlength{\parindent}{0pt}% + \usekomavar{addresseeimage}% + \vss + }% +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@subelement@addressee@PPimage +% \begin{macro}{\scr@notepaper@subelement@addressee@backgroundimage} +% \changes{v3.27}{2019/03/22}{added} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% \begin{description} +% \item[ToDo:] Needs to be tested! +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@notepaper@subelement@addressee@backgroundimage}{% + \vskip 1mm + \noindent\expandafter\hskip\useplength{toaddrindent}% + \vbox to \useplength{PPheadheight}{% + \addtolengthplength[-2]{\hsize}{toaddrindent}% + \setlength{\parindent}{0pt}% + \usekomavar{addresseeimage}% + \vss + }% + \vskip 1mm + \vskip\dp\strutbox + \vfil% + \noindent\hskip\useplength{toaddrindent}% + \setlength{\@tempdima}{\useplength{toaddrwidth}}% + \addtolengthplength[-2]{\@tempdima}{toaddrindent}% + \vbox{\hsize\@tempdima + \Ifkomavarempty{PPdatamatrix}{}{% + \addtolength{\hsize}{-2mm}% + \settowidth\@tempdima{\usekomavar{PPdatamatrix}}% + \addtolength{\hsize}{-\@tempdima}% + }% + \raggedright + \usekomafont{addressee}{% +%<*package> + \usekomavar{addressee}\par% +%</package> +%<class> {\usekomafont{toname}{\usekomavar{toname}\\}}% +%<class> {\usekomafont{toaddress}{\usekomavar{toaddress}\par}}% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@subelement@addressee@backgroundimage +% \end{macro}^^A \scr@notepaper@element@addressee +% \begin{macro}{\scr@notepaper@element@location} +% \changes{v3.27}{2019/03/22}{added} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% The \texttt{location} element depends on several options. +% \begin{macrocode} +\newcommand*{\scr@notepaper@element@location}{% +% \end{macrocode} +% Depending on the alignment of the sender's address, the location field must +% not be empty. +% \begin{macrocode} + \ifcase\@alignfrom + \or + \if@logo + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \fi + \or + \or + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \or + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \fi +% \end{macrocode} +% Everything else only, if the field is not empty. +% \begin{macrocode} + \Ifkomavarempty{location}{}{% +% \end{macrocode} +% Calculation of height and vertical position. +% \begin{macrocode} + \ifdim \useplength{locheight}=\z@% + \setplength{locheight}{\useplength{toaddrheight}}% + \fi + \ifdim \useplength{locvpos}=\z@% + \setplength{locvpos}{\useplength{toaddrvpos}}% + \fi +% \end{macrocode} +% Calculation of width and horizontal position. +% \begin{macrocode} + \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{lochpos}<\z@ + \setlength{\@tempdima}{-\useplength{lochpos}}% + \else + \setlength{\@tempdima}{\dimexpr + \paperwidth-\useplength{lochpos}-\useplength{locwidth} + \relax}% + \fi + \put@notepaper@element(\@tempdima,\useplength{locvpos})% + (\useplength{locwidth},\useplength{locheight})% + {Element `location'}% + {% +% \end{macrocode} +% Depending on the alignment of the sender's address, output of the logo and +% maybe also the address. +% \begin{macrocode} + \ifcase\@alignfrom + \or + \if@logo + \Ifkomavarempty{fromlogo}{\null}{% + {\raggedleft\noindent\usekomavar{fromlogo}\\ + \vskip\parskip}\noindent}% + \fi + \or + \or + \if@logo + \Ifkomavarempty{fromlogo}{}{% + \raggedleft\usekomavar{fromlogo}\par}% + \fi + \raggedright + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}% + }% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% + \or + \raggedleft + \if@logo + \Ifkomavarempty{fromlogo}{}{\usekomavar{fromlogo}\par}% + \fi + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}% + }% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone% + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% +% \end{macrocode} +% Last but not least the location information. +% \begin{macrocode} + \fi + \usekomavar{location}% + }\relax + }% +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@element@location +% \begin{macro}{\scr@notepaper@element@refline} +% \changes{v3.27}{2019/05/03}{added} +% This notepaper element replaces the \cs{@datefield} of +% \cls*{scrlttr2}. In opposite to \cls*{scrlttr2} this element has a +% dedicated height \texttt{reflineheight}. +% \begin{description} +% \item[ToDo:] Needs to be tested. +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@notepaper@element@refline}{% +% \end{macrocode} +% First of all test, whether or not their has to be set anything. +% \begin{macrocode} + \@tempswafalse + \if@refline + \let\do@set@reffield\@test@reffield +%<trace> \let\@tempa\@empty + \@set@reffields +% \end{macrocode} +% Maybe we have to add the date: +% \begin{macrocode} + \ifcase \@datepos + \or + \if@tempswa\addtoreffields{date}\fi + \expandafter\let\csname if@refline\expandafter\endcsname + \csname if@tempswa\endcsname + \@test@reffield{date}% + \or + \if@tempswa + \edef\expandafter\@set@reffields{% + \unexpanded{\do@set@reffield{date}}% + \unexpanded\expandafter{\@set@reffields}% + }% + \fi + \expandafter\let\csname if@refline\expandafter\endcsname + \csname if@tempswa\endcsname + \@test@reffield{date}% + \fi + \fi + \if@tempswa +% \end{macrocode} +% We have to print something, so let's calculate the position and height. +% \begin{macrocode} + \ifdim\useplength{refwidth}=\z@ +%<trace> \typeout{TRACE: refwidth by option}% + \if@refwide +%<trace> \typeout{TRACE: refline=wide}% + \ifdim \useplength{toaddrhpos}>\z@ + \setplength{refhpos}{\useplength{toaddrhpos}}% + \else + \setplength[-]{refhpos}{\useplength{toaddrhpos}}% + \fi + \setplength{refwidth}{\paperwidth -2\useplength{refhpos}}% + \else +%<trace> \typeout{TRACE: refline=narrow}% + \setplength{refwidth}{\textwidth}% + \setplength{refhpos}{\oddsidemargin+1in}% + \fi + \else +%<trace> \typeout{TRACE: refwidth by pseudo-length}% + \ifdim\useplength{refhpos}=\z@ + \setlength{\@tempdima}{\dimexpr + \textwidth-\useplength{refwidth} + \relax}% + \setlength{\@tempdimb}{\dimexpr \oddsidemarin+1in\relax}% + \setlength{\@tempdimc}{\dimexpr \paperwidth-\textwidth\relax}% + \divide\@tempdimb by 32768\relax + \divide\@tempdimc by 32768\relax + \ifdim\@tempdimc=\z@\else + \multiply\@tempdima by\@tempdimb + \divide\@tempdima by\@tempdimc + \fi + \setplength{refhpos}{\@tempdima}% + \fi + \fi +%<*trace> + \typeout{TRACE: Reference line with \@tempa^^J + \space\space\space\space\space\space + at refhpos=\the\useplength{refhpos},^^J + \space\space\space\space\space\space\space\space\space + refvpos=\the\useplength{refvpos},^^J + \space\space\space\space\space\space\space\space\space + refwidth=\the\useplength{refwidth},^^J + \space\space\space\space\space\space\space\space\space + refheight=\the\useplength{refheight}}% +%</trace> + \put@notepaper@element + (\useplength{refhpos},\useplength{refvpos})% + (\useplength{refwidth},\useplength{refheight})% + {Element `refline'}% + {% +% \end{macrocode} +% Last but not least print it. +% \begin{macrocode} + \if@refline +% \end{macrocode} +% Print a reference line. +% \begin{macrocode} + \let\do@set@reffield\@set@reffield\@tempswafalse\@set@reffields + \else +% \end{macrocode} +% Print only place and date. +% \begin{macrocode} + \ifnum \@datepos=1 \hspace*{\fill}\fi + {% + \usekomafont{placeanddate}{% + \Ifkomavarempty{place}{}{% + \usekomavar{place}\usekomavar{placeseparator}% + }% + \usekomavar{date}% + }% + }% + \fi + }% + \fi +} +% \end{macrocode} +% \end{macro}^^A \scr@notepaper@element@refline +% \end{macro}^^A \scr@notepaper@elements +% \begin{macro}{\put@notepager@element} +% \changes{v3.27}{2019/03/22}{added} +% \begin{macro}{\put@@notepager@@element} +% \changes{v3.27}{2019/05/03}{added} +% A helper macro to output one element at a specific +% position. \texttt{(\#1,\#2)} is the position, \texttt{(\#3,\#4)} the allowed +% width and height, \texttt{\#5} is the name of the element (used for warning +% messages only), \texttt{\#6} is the element content. The content is first +% put into a temporary box of type \texttt{vtop}. Optional code can be +% executed immediately before testing the total height of this box +% \cs{@tempboxa} and before using it. +% \begin{macrocode} +\newcommand{\put@notepaper@element}{} +\long\def\put@notepaper@element(#1,#2)(#3,#4)#5#6{% + \kernel@ifnextchar [%] + {\put@@notepaper@@element({#1},{#2})({#3},{#4}){#5}{#6}}% + {\put@@notepaper@@element({#1},{#2})({#3},{#4}){#5}{#6}[]}% +} +\newcommand{\put@@notepaper@@element}{} +\long\def\put@@notepaper@@element(#1,#2)(#3,#4)#5#6[#7]{% + \put(\LenToUnit{\dimexpr #1\relax},\LenToUnit{-\dimexpr #2\relax}){% + \setbox\@tempboxa \vtop{% + \color@begingroup + \vskip \z@ + \hsize=\dimexpr #3\relax + \linewidth=\hsize + \columnwidth=\linewidth + \textwidth=\columnwidth + \parfillskip=\z@ \@plus 1fil\relax + #6 + \color@endgroup + }% + #7% + \ifdim \dimexpr\ht\@tempboxa+\dp\@tempboxa\relax > \dimexpr #4\relax + \PackageWarning{scrletter}{#5 + \the\dimexpr \ht\@tempboxa+\dp\@tempboxa-(#4)\relax\space + to high.\MessageBreak + The content could collide with other page contents\MessageBreak + or break the page edges. You should reduce the\MessageBreak + size before usage% + }% + \fi + \usebox\@tempboxa + }% +} +%</package&body&willbe> +% \end{macrocode} +% \end{macro}^^A \put@@notepaper@@element +% \end{macro}^^A \put@notepaper@element +% +% \begin{macro}{\move@topt} +% \changes{v2.8n}{2001/09/07}{added} +% We will need a helper to place an element relative to the top paper +% edge. So we have to move from the start of the text area to the start of an +% absolute position on the paper. This does only work, if the current position +% is the start of the text area! +% \begin{macrocode} +%<*body> +\newcommand*{\move@topt}{% + \null\vskip -1in\vskip -\topmargin% + \vskip -\headheight\vskip -\headsep% + \vskip -\topskip% + \ignorespaces% +} +% \end{macrocode} +% \begin{macro}{\move@frompt} +% \changes{v2.8n}{2001/09/07}{added} +% And also we need to move back from the absolute paper position to the start +% of the text area. This does only work, if the absolute paper position is +% unchanged. +% \begin{macrocode} +\newcommand*{\move@frompt}{% + \vskip 1in\vskip \topmargin% + \vskip \headheight\vskip \headsep% + \vskip \topskip% + \vskip -\baselineskip% + \ignorespaces% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\move@topl,\move@frompl} +% \changes{v2.8n}{2001/09/07}{added} +% We need the same for the horizontal position. +% \begin{macrocode} +\newcommand*{\move@topl}{% + \null\hskip -1in% + \ifodd\value{page}\hskip -\oddsidemargin\else\hskip -\evensidemargin\fi + \ignorespaces% +} +\newcommand*{\move@frompl}{% + \hskip 1in% + \ifodd\value{page}\hskip \oddsidemargin\else\hskip \evensidemargin\fi% + \ignorespaces% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\vb@t@z} +% \changes{v2.8n}{2001/09/07}{added} +% \changes{v2.95}{2006/03/23}{using \cs{setparsizes}} +% \changes{v2.97e}{2007/11/20}{\cs{long}} +% This is similar to \cs{smash}. +% \begin{description} +% \item[ToDo:] Should we use \cs{smash} inside the definition? +% \end{description} +% \begin{macrocode} +\newcommand{\vb@t@z}[1]{{% + \setbox\z@\vbox to\z@{\color@begingroup #1\color@endgroup\vss}% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \setlength{\baselineskip}{\z@}% + \setlength{\@tempdima}{\ht0}\addtolength{\@tempdima}{\dp0}% + \box\z@\vskip-\@tempdima% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@foldmarks} +% \changes{v2.97e}{2007/11/08}{using \plen{mfoldmarkvpos}} +% \begin{macro}{\@hfoldmark} +% \changes{v2.97e}{2007/11/08}{added} +% \begin{macro}{\@foldmark} +% \changes{v2.8n}{2001/09/07}{added} +% \changes{v2.95}{2006/06/06}{\cs{vskip} moved into \cs{vb@t@z}} +% \changes{v2.97c}{2007/05/08}{using \plen{foldmarkthickness}} +% \changes{v2.97c}{2007/05/08}{using \fnt{foldmark}} +% \changes{v3.27}{2019/03/29}{different versions for package and class} +% Used to place all activated fold marks, either a horizontal one or a +% vertical one. +% \begin{description} +% \item[ToDo:] The plans explained in the into of this section would have +% consequences here too. +% \end{description} +% For the still used version the parameters oft a horizontal fold mark are the +% vertical distance from the top edge an the length. The parameters of a +% vertical fold mark are the horizontal distance from the left edge and the +% length. +% \begin{macrocode} +%<*class|!willbe> +\newcommand*{\@foldmark}[2]{% + \vb@t@z{\setlength{\@tempdima}{#1}% + \addtolengthplength[-.5]{\@tempdima}{foldmarkthickness}% + \vskip \@tempdima + \rlap{\move@topl\hskip\useplength{foldmarkhpos}% + \usekomafont{foldmark}{% + \rule{#2}{\useplength{foldmarkthickness}}}}}% + \ignorespaces +} +%</class|!willbe> +% \end{macrocode} +% The planned package version uses \cs{put} to set the marks. It has a +% position, a direction and a length, so it can handle the horizontal and the +% vertical foldmarks. +% \begin{macrocode} +%<*package&willbe> +\newcommand*{\@foldmark}{} +\def\@foldmark(#1,#2)(#3,#4)#5{% + \put(\LenToUnit{#1},-\LenToUnit{#2}){% + \linethickness{\useplength{foldmarkthickness}}% + \line(#3,-#4){\LenToUnit{#5}}% + }% +} +%</package&willbe> +\newcommand*{\@hfoldmark}[1]{% + \begingroup + \@expandtwoargs\in@{#1}{\@usefolds}% + \ifin@ + \lowercase{% + \edef\@tempa{% +%<*class|!willbe> + \noexpand\ifdim \noexpand\useplength{#1foldmarkvpos}=\noexpand\z@ + \noexpand\else + \noexpand\@foldmark{% + \noexpand\useplength{#1foldmarkvpos}% + }{% + \noexpand\useplength{#1foldmarklength}% + }% + \noexpand\fi +%</class|!willbe> +% \end{macrocode} +% \changes{v3.27}{2019/03/29}{different handling of the package version} +% The planned package version of \cs{@foldmark} has a new direction argument, +% because it handles horizontal and vertical foldmarks. And if there is not a +% pseudo-length for the vertical possition of the horizontal fold-mark the +% possition is half of the paper height. This is for the ``P''-mark. +% \begin{macrocode} +%<*package&willbe> + \Ifplength{#1foldmarkvpos}{% + \ifdim \useplength{#1foldmarkvpos}=\z@\else + \noexpand\@foldmark(\noexpand\useplength{foldmarkhpos},% + \noexpand\useplength{#1foldmarkvpos})% + (1,0)% + {% + \noexpand\useplength{#1foldmarklength}% + }% + \fi + }{% + \noexpand\@foldmark(\noexpand\useplength{foldmarkhpos},% + .5\noexpand\paperheight)% + (1,0)% + {% + \noexpand\useplength{#1foldmarklength}% + }% + }% +%</package&willbe> + }% + }% + \@tempa + \fi + \endgroup +} +% \end{macrocode} +% \begin{macro}{\@vfoldmark} +% \changes{v2.97e}{2007/11/10}{added} +% The rule is printed completely above the baseline, so the length has to +% be added to the vertical movement. +% \begin{macrocode} +\newcommand*{\@vfoldmark}[1]{% + \begingroup + \ifdim \useplength{lfoldmarkhpos}=\z@\else + \@expandtwoargs\in@{#1}{\@usefolds}% + \ifin@ +% \end{macrocode} +% \changes{v3.27}{2019/03/29}{package version uses \cs{@foldmark}} +% The currently used version does still work using \cs{rule}. +% \begin{macrocode} +%<*class|willbe> + \vb@t@z{% + \ifdim \useplength{foldmarkvpos}<\z@ + \nobreak\vskip \paperheight\nobreak + \fi + \vskip \useplength{foldmarkvpos}% + \vskip \useplength{foldmarkthickness}% + \rlap{\move@topl + \setlength{\@tempdima}{\useplength{lfoldmarkhpos}}% + \addtolengthplength[-.5]{\@tempdima}{foldmarkthickness}% + \hskip\@tempdima + \usekomafont{foldmark}{% + \rule{\useplength{foldmarkthickness}}% + {\useplength{lfoldmarklength}}% + }% + }% + }% + \ignorespaces +%</class|willbe> +% \end{macrocode} +% But the planned package version uses \cs{@foldmark}. +% \begin{macrocode} +%<*package&willbe> + \@foldmark(\useplength{lfoldmarkhpos},\useplength{foldmarkvpos})% + (0,1)% + {\useplength{lfoldmarklength}}% +%</package&willbe> + \fi + \fi + \endgroup +} +% \end{macrocode} +% The main foldmark command is only needed by the current version. +% \begin{macrocode} +%<*class|!willbe> +\newcommand*{\@foldmarks}{% + \if@fold% + \typeout{Foldmarks: yes}% + \move@topt + \ifdim \useplength{pfoldmarklength}=\z@ + \setplength{pfoldmarklength}{4mm}% + \fi + \ifdim \useplength{tfoldmarklength}=\z@ + \setplength{tfoldmarklength}{2mm}% + \fi + \ifdim \useplength{mfoldmarklength}=\z@ + \setplength{mfoldmarklength}{2mm}% + \fi + \ifdim \useplength{bfoldmarklength}=\z@ + \setplength{bfoldmarklength}{2mm}% + \fi + \ifdim \useplength{lfoldmarklength}=\z@ + \setplength{lfoldmarklength}{4mm}% + \fi + \begingroup + \@expandtwoargs\in@{P}{\@usefolds}% + \ifin@ + \@foldmark{.5\paperheight}{\useplength{pfoldmarklength}}% + \fi + \endgroup + \@hfoldmark{T}% + \@hfoldmark{M}% + \@hfoldmark{B}% + \@vfoldmark{L}% + \move@frompt + \else + \typeout{Foldmarks: no}% + \fi% +} +%</class|!willbe> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@savevbox} +% \changes{v2.8n}{2001/09/07}{added} +% \changes{v2.8q}{2001/10/30}{optional argument added} +% \begin{macro}{\@savevbox@warningfalse,\@savevbox@warningtrue,\if@savevbox@warning} +% \changes{v2.8q}{2001/10/30}{added} +% A vertically overfull box while \cs{opening} is hard to find. So we use +% \begin{quote} +% \cs{@savevbox}\oarg{print code}\marg{nominal height}\marg{content}% +% \marg{element name}\marg{height name}\marg{change code} +% \end{quote} +% to measure each of these boxes and report a warning with more information. +% \begin{description} +% \item[Note:] The \meta{print code} is not used to measure the box, but to +% print it. +% \item[Note:] The \meta{content} is used twice: first to measure the box and +% second to print it. Currently no special treatment is implemented to avoid +% problems using commands like \cs{label}, \cs{stepcounter} etc. inside +% \meta{content}. +% \end{description} +% \begin{macrocode} +\newif\if@savevbox@warning\@savevbox@warningtrue +\newcommand{\@savevbox}[6][]{% + \begingroup% + \vbox to #2{#1#3}% + \if@savevbox@warning\@savevbox@warningfalse% + \setbox\z@\vbox{\color@begingroup #3\color@endgroup}% + \setlength{\@tempdima}{#2}% + \setlength{\@tempdimb}{\ht0}\addtolength{\@tempdimb}{\dp0}% + \ifdim \@tempdimb>\@tempdima% + \addtolength{\@tempdimb}{-\@tempdima}% +%<class> \ClassWarning{scrlttr2}{% +%<package> \PackageWarning{scrletter}{% + #4 is \the\@tempdimb\space too high.\MessageBreak + You have to change `\string#5'\MessageBreak + or you have to define a smaller\MessageBreak + #4 using \string#6.\MessageBreak + Because of this too high #4\MessageBreak + you've got an overfull \string\vbox\space message% + }% + \fi% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@firstheadfootfield} +% \changes{v2.8n}{2001/09/08}{added} +% \changes{v2.8q}{2001/10/30}{\cs{parfillskip} locally set to 0} +% \changes{v2.8q}{2001/10/30}{use a box for the foot} +% \changes{v2.9l}{2003/01/23}{improved positioning} +% \changes{v2.97e}{2007/11/22}{support for options \opt{firsthead} and +% \opt{firstfoot}} +% \changes{v3.05}{2009/11/09}{using pseudo length \plen{firstheadhpos}} +% \changes{v3.05}{2009/11/09}{using pseudo length \plen{firstfoothpos}} +% The letter head of the notepaper. +% \begin{description} +% \item[ToDo:] \changes{v3.27}{2019/03/22}{planned code enlarges page} The +% planned code of \pkg*{scrlayer} does not print the page head or foot +% here. It only enlarges or shrinks the first page. +% \end{description} +% \begin{macrocode} +\newcommand*{\@firstheadfootfield}{% +%<*class|!willbe> + \if@firsthead + \typeout{Head of first page}% + \move@topt\vskip\useplength{firstheadvpos}% + \vb@t@z{% + \rlap{\move@topl +% \end{macrocode} +% \begin{itemize} +% \item If \plen{firstheadhpos} is positiv and less than the paper width, it +% is the distance of the left paper edge to the left edge of the letter +% head. +% \item If \plen{firstheadhpos} is negative and the absolute value is less +% than the paper width, the absolute value is the distance of the right +% paper edge to the right edge of the letter head. +% \item If \plen{firstheadhpos} is larger than the paper width, the letter +% head will be centered. +% \item If \plen{firstheadhpos} is negative an the absolute value is larger +% than the paper width, the letter head will be left aligned to the text area. +% \end{itemize} +% \begin{macrocode} + \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 + \hskip\@tempskipa + \vbox{\hsize\useplength{firstheadwidth}% + \setlength{\@tempskipa}{\useplength{toaddrvpos}}% + \addtolengthplength[-1]{\@tempskipa}{firstheadvpos}% + \addtolength{\@tempskipa}{-\baselineskip}% +% \end{macrocode} +% Locally set \len{textwidth} to the width of the letter head (similar to +% using a \env{minipage}. Also reset \len{parfillskip} to avoid overfull +% \cs{hbox} messages because of filled text width. +% \begin{macrocode} + \setlength{\textwidth}{\useplength{firstheadwidth}}% + \setlength{\parfillskip}{\z@ \@plus 1fil}% + \@savevbox{\@tempskipa}{\noindent\usekomavar{firsthead}% + \vskip \z@ \@plus .00001fil}% + {head of first page}{firstheadvpos}{\setkomavar}% + }% + }% + }% + \vskip-\useplength{firstheadvpos}\move@frompt + \else + \typeout{No head at first page}% + \fi + \move@topt + \if@firstfoot + \typeout{Foot of first page}% + \vb@t@z{% + \rlap{\move@topl +% \end{macrocode} +% \begin{itemize} +% \item If \plen{firstfoothpos} is positiv and less than the paper width, it +% is the distance of the left paper edge to the left edge of the letter +% footer. +% \item If \plen{firstfoothpos} is negative and the absolute value is less +% than the paper width, the absolute value is the distance of the right +% paper edge to the right edge of the letter footer. +% \item If \plen{firstfoothpos} is larger than the paper width, the letter +% footer will be centered. +% \item If \plen{firstfoothpos} is negative an the absolute value is larger +% than the paper width, the letter footer will be left aligned to the text +% area. +% \end{itemize} +% \begin{macrocode} + \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 + \hskip\@tempskipa + \vbox{\hsize\useplength{firstfootwidth}% + \vskip\useplength{firstfootvpos}% + \setlength{\textwidth}{\useplength{firstfootwidth}}% + \setlength{\parfillskip}{\z@ \@plus 1fil}% + \vbox{\hsize\useplength{firstfootwidth}\noindent + \usekomavar{firstfoot}}% + }% + }% + }% + \else + \typeout{No foot at first page}% + \fi + \move@frompt% +%</class|!willbe> + {% + \setlength{\@tempdima}{1in}\addtolength{\@tempdima}{\topmargin}% + \addtolength{\@tempdima}{\headheight}% + \addtolength{\@tempdima}{\headsep}% + \addtolength{\@tempdima}{\textheight}% + \addtolength{\@tempdima}{\footskip}% + \if@firstfoot + \addtolengthplength[-1]{\@tempdima}{firstfootvpos}% + \else + \addtolength{\@tempdima}{-\paperheight}% + \fi + \ifdim\@tempdima>\z@\enlargethispage{-\@tempdima}% + \else\if@enlargefp\enlargethispage{-\@tempdima}\fi\fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addrfield} +% \changes{v2.8q}{2002/04/01}{\cs{parfillskip} locally changed} +% \changes{v2.8q}{2002/06/03}{special treatment of addressee right aligend} +% \changes{v2.9o}{2003/02/20}{\cs{noindent} added to \var{specialmail}} +% \changes{v2.96}{2006/07/31}{using \cs{backaddr@format}} +% \changes{v3.03}{2009/03/04}{support for priority} +% \changes{v3.03}{2009/03/04}{new \opt{addrfield} values \opt{\quotechar=PP}, +% \opt{\quotechar=backgroundimage}, \opt{\quotechar=addresseeimage}} +% \changes{v3.03b}{2009/06/30}{typo fix of ``addressee''} +% \changes{v3.06a}{2010/07/29}{setting paragraph parameters} +% \changes{v3.17}{2015/04/17}{\cs{setbox} replaced by \cs{sbox}} +% \changes{v3.22}{2016/12/21}{braces fixed} +% \changes{v3.22}{2016/12/21}{\cs{endgraf} added} +% \changes{v3.25}{2017/11/15}{using \cs{scr@endstrut} instead of +% \cs{unskip}\cs{strut}} +% \changes{v3.27}{2019/03/27}{potentially only for \cls*{scrlttr2}} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% \changes{v3.30}{2020/03/27}{re-definition of line break moved} +% The address field of the addressee inclusive return address and special mail +% text. +% \begin{description} +% \item[ToDo:] The plans explained in the into of this section would have +% consequences here too. +% \end{description} +% \begin{macrocode} +%<*class|!willbe> +\newcommand*{\@addrfield}{% + \ifcase \ifnum\@afieldmode=5 \@ne\else\@afieldmode\fi\relax + \typeout{Address: No}% + \or + \begingroup% + \if@baddr + \Ifkomavarempty{backaddress}{% + \let\@tempa\@empty\let\@tempb\@empty + }{% + \def\@tempa{backaddress}\def\@tempb{,\space}% + }% + \else + \let\@tempa\@empty\let\@tempb\@empty + \fi + \ifcase \ltr@priority + \Ifkomavarempty{specialmail}{}{% + \edef\@tempa{\@tempa\@tempb specialmail}\def\@tempb{,\space}% + }% + \or + \edef\@tempa{\@tempa\@tempb B-Economy}\def\@tempb{,\space}% + \or + \edef\@tempa{\@tempa\@tempb A-Priority}\def\@tempb{,\space}% + \fi + \typeout{Address (\@tempa\@tempb addressee)}% + \endgroup% + \move@topt\vskip\useplength{toaddrvpos}% + \vb@t@z{{\setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \rlap{\move@topl + \setlengthtoplength{\@tempskipa}{toaddrhpos}% + \ifdim \@tempskipa<\z@ + \addtolength{\@tempskipa}{\paperwidth}% + \addtolengthplength[-]{\@tempskipa}{toaddrwidth}% + \fi + \hskip\@tempskipa + \@savevbox{\useplength{toaddrheight}}{\hsize\useplength{toaddrwidth}% + \@savevbox[\vss]{\useplength{backaddrheight}}{% + \hsize\useplength{toaddrwidth}% + \if@baddr + \Ifkomavarempty{backaddress}{}{{% + \noindent% + \backaddr@format{\scriptsize + {% + \def\\{\usekomavar{backaddressseparator}\@ogobble}% + \usekomafont{backaddress}% + {\usekomavar{backaddress}}% + }}}}% + \fi + }{backaddress}{backaddrheight}{\setkomavar}% + \ifcase \ltr@priority + \or + \setkomavar{specialmail}{% + {\usekomafont{priority}{% + {\usekomafont{prioritykey}{B}}% + -ECONOMY}}% + }% + \or + \setkomavar{specialmail}{% + {\usekomafont{priority}{% + {\usekomafont{prioritykey}{A}}% + -PRIORITY}}% + }% + \fi + \Ifkomavarempty{specialmail}{}{% + \vbox{\hsize\useplength{toaddrwidth}% + \noindent\hspace*{\useplength{specialmailindent}}% + \specialmail@format{% + \usekomafont{specialmail}\usekomavar{specialmail}}% + \hspace*{\useplength{specialmailrightindent}}}% + }% + \ifnum\@afieldmode=\@ne\vfil\fi% + \noindent\hskip\useplength{toaddrindent}% + \setlength{\@tempdima}{\useplength{toaddrwidth}}% + \addtolengthplength[-2]{\@tempdima}{toaddrindent}% + \vbox{\hsize\@tempdima\raggedright + \usekomafont{addressee}{% + {\usekomafont{toname}{\usekomavar{toname}\\}}% + {\usekomafont{toaddress}{\usekomavar{toaddress}\endgraf}}}}% + \vfil\null\vskip-\baselineskip}% + {address field}{toaddrheight}% + {\begin{letter} or you\MessageBreak + have to define a smaller special purpose using\MessageBreak + \string\specialmail}% + }}}% + \vskip-\useplength{toaddrvpos}\move@frompt + \else + \begingroup% +% \end{macrocode} +% With \opt{addrfield=PP}, \opt{addrfield=backgroundimage} or +% \opt{addrfield=image} there are neither a return address nor a special mail +% text, but a priority. +% \begin{macrocode} + \if@baddr + \let\@tempa\@empty\let\@tempb\@empty + \ifcase \@afieldmode\relax\or\or + \def\@tempa{PP-mode}\def\@tempb{,\space}% + \or + \def\@tempa{backgroundimage-mode}\def\@tempb{,\space}% + \or + \def\@tempa{image-mode}\def\@tempb{,\space}% + \fi + \Ifkomavarempty{backaddress}{}{% + \edef\@tempa{\@tempa\@tempb backaddress ignored}\def\@tempb{,\space}% + }% + \else + \let\@tempa\@empty\let\@tempb\@empty + \fi + \ifcase \ltr@priority + \Ifkomavarempty{specialmail}{}{% + \edef\@tempa{\@tempa\@tempb specialmail ignored}\def\@tempb{,\space}% + }% + \or + \edef\@tempa{\@tempa\@tempb B-Economy}\def\@tempb{,\space}% + \or + \edef\@tempa{\@tempa\@tempb A-Priority}\def\@tempb{,\space}% + \fi + \typeout{Address (\@tempa\@tempb addressee)}% + \endgroup% + \move@topt\vskip\useplength{toaddrvpos}% + \vb@t@z{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \ifdim \useplength{toaddrindent}=\z@ + \setplength{toaddrindent}{8mm}% + \fi + \ifdim \useplength{PPheadheight}=\z@ + \setplength{PPheadheight}{20.74pt}% + \fi + \ifdim \useplength{PPheadwidth}=\z@ + \setplength{PPheadwidth}{42mm}% + \fi + \ifdim \useplength{PPdatamatrixvskip}=\z@ + \setplength{PPdatamatrixvskip}{9mm}% + \fi + \rlap{\move@topl + \setlengthtoplength{\@tempskipa}{toaddrhpos}% + \ifdim \@tempskipa<\z@ + \addtolength{\@tempskipa}{\paperwidth}% + \addtolengthplength[-]{\@tempskipa}{toaddrwidth}% + \fi + \hskip\@tempskipa + \@savevbox{\useplength{toaddrheight}}{\hsize\useplength{toaddrwidth}% + \ifnum\@afieldmode=\tw@ +% \end{macrocode} +% \opt{addrfield=PP}: +% \begin{macrocode} + \vskip 2pt\relax + \hskip \useplength{toaddrindent}\relax + \fbox{% + \vbox to \dimexpr \useplength{PPheadheight}-2\fboxsep\relax{% + \setlength{\parindent}{0pt}% + \hsize \dimexpr \useplength{PPheadwidth}-2\fboxsep\relax + \sbox\@tempboxa{% + {\fontsize{20.74pt}{20.74pt}\selectfont + \usekomafont{PPlogo}{P.P.}}\hskip 2mm% + }% + \dp\@tempboxa\z@ + \setlength{\@tempdima}{\hsize}% + \addtolength{\@tempdima}{-\wd\@tempboxa}% + \hbox{\box\@tempboxa + \vbox to \dimexpr + \useplength{PPheadheight}-2\fboxsep\relax{% + \vss\hsize\@tempdima + \raggedright + \fontsize{8pt}{9pt}\selectfont\usekomafont{PPdata}% + \usekomavar*{fromzipcode}\usekomavar{zipcodeseparator}% + \usekomavar{fromzipcode}\scr@endstrut\\ + \usekomavar{place}\scr@endstrut + \hfill + }% + }% + \vss + }% + }% + \hskip 1mm + \mbox{% + \vbox to \useplength{PPheadheight}{% + \addtolengthplength[-]{\hsize}{PPheadwidth}% + \addtolength{\hsize}{-1mm}% + \addtolengthplength[-2]{\hsize}{toaddrindent}% + \setlength{\parindent}{0pt}% + \fontsize{8pt}{9pt}\selectfont\usekomafont{PPdata}% + \hfill\usekomavar{PPcode} + \vss + \ifcase \ltr@priority + \or + \usekomafont{priority}{% + {\usekomafont{prioritykey}{B}}% + -ECONOMY\hss\vskip-\dp\strutbox + }% + \or + \usekomafont{priority}{% + {\usekomafont{prioritykey}{A}}% + -PRIORITY\hss\vskip-\dp\strutbox + }% + \fi + \vss + }% + }% + \vskip 1mm + \vskip-\ht\strutbox + \noindent\hskip\useplength{toaddrindent}% + \hrulefill% + \hskip\useplength{toaddrindent}% + \vbox to\z@{\hsize\z@ + \vskip \useplength{PPdatamatrixvskip}\relax + \llap{\usekomavar{PPdatamatrix}\hskip\useplength{toaddrindent}}% + \vss + }% + \else +% \end{macrocode} +% \opt{addrfield=backgroundimage} or \opt{addrfield=image}: +% \begin{macrocode} + \vskip 1mm + \noindent\expandafter\hskip\useplength{toaddrindent}% + \vbox to \useplength{PPheadheight}{% + \addtolengthplength[-2]{\hsize}{toaddrindent}% + \setlength{\parindent}{0pt}% + \usekomavar{addresseeimage}% + \vss + }% + \vskip 1mm + \vskip\dp\strutbox + \fi + \ifnum \@afieldmode=4 \else + \vfil% + \noindent\hskip\useplength{toaddrindent}% + \setlength{\@tempdima}{\useplength{toaddrwidth}}% + \addtolengthplength[-2]{\@tempdima}{toaddrindent}% + \vbox{\hsize\@tempdima + \Ifkomavarempty{PPdatamatrix}{}{% + \addtolength{\hsize}{-2mm}% + \settowidth\@tempdima{\usekomavar{PPdatamatrix}}% + \addtolength{\hsize}{-\@tempdima}% + }% + \raggedright + \usekomafont{addressee}{% + {\usekomafont{toname}{\usekomavar{toname}\\}}% + {\usekomafont{toaddress}{\usekomavar{toaddress}\endgraf}}}}% + \fi + \vss\null}% + {address field}{toaddrheight}% + {\string\begin{letter}}% + }}}% + \vskip-\useplength{toaddrvpos}\move@frompt + \fi +} +%</class|!willbe> +% \end{macrocode} +% \begin{macro}{\specialmail@format} +% \changes{v2.97c}{2007/07/06}{added} +% Formatting the special mail note. +% \begin{macrocode} +\newcommand*{\specialmail@format}[1]{} +\let\specialmail@format\underline +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ogobble} +% \changes{v2.8q}{2002/01/22}{added} +% Something like \cs{gobble} but to gobble an optional argument. +% \begin{macrocode} +\newcommand*{\@ogobble}[1][]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@locfield} +% \changes{v2.8o}{2001/09/17}{\cs{noindent} added} +% \changes{v2.8q}{2002/02/07}{\cs{noindent} after the logo} +% \changes{v2.8q}{2002/07/23}{width calculation moved to this} +% \changes{v2.8q}{2002/06/03}{special treatment of right aligned addressee} +% \changes{v3.12}{2013/05/29}{using variable \var{frommobilephone}} +% \changes{v3.27}{2019/03/27}{potentially only at \cls*{scrlttr2}} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% The location field to be placed independent of having an address field. +% \begin{description} +% \item[ToDo:] The plans explained in the into of this section would have +% consequences here too. +% \end{description} +% \begin{macrocode} +%<*class|!willbe> +\newcommand*{\@locfield}{% + \ifdim \useplength{locwidth}=\z@% + \setplength{locwidth}{\paperwidth}% + \ifdim \useplength{toaddrhpos}>\z@ + \addtoplength[-2]{locwidth}{\useplength{toaddrhpos}}% + \else + \addtoplength[2]{locwidth}{\useplength{toaddrhpos}}% + \fi + \addtoplength[-1]{locwidth}{\useplength{toaddrwidth}}% + \if@bigloc% + \setplength[.66667]{locwidth}{\useplength{locwidth}}% + \else% + \setplength[.5]{locwidth}{\useplength{locwidth}}% + \fi% + \fi% +% \end{macrocode} +% \changes{v2.97e}{2007/11/13}{support for sender in location} +% \changes{v2.98b}{2008/01/30}{always print location if used} +% Depending of \opt{fromalign} we have to take care to print the location by +% adding a dummy content. +% \begin{macrocode} + \ifcase\@alignfrom + \or + \if@logo + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \fi + \or + \or + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \or + \Ifkomavarempty{location}{\setkomavar{location}{\null}}{}% + \fi +% \end{macrocode} +% Report if the location is empty or calculate the position and width. +% \begin{macrocode} + \Ifkomavarempty{location}{% + \typeout{Location field: empty}% + }{% + \typeout{Location field: yes}% + \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 + \move@topt\vskip\useplength{locvpos}% + \vb@t@z{\noindent\makebox[0pt][l]{% + \move@topl + \setlengthtoplength[-]{\@tempskipa}{lochpos}% + \ifdim \@tempskipa<\z@ + \addtolength{\@tempskipa}{\paperwidth}% + \else + \addtolengthplength{\@tempskipa}{locwidth}% + \fi + \hskip\@tempskipa + \makebox[0pt][r]{% + \@savevbox{\useplength{locheight}}{% + \noindent\hsize\useplength{locwidth}% +% \end{macrocode} +% For some values of \opt{fromalign} we also have to place the sender's +% address or logo. +% \begin{macrocode} + \ifcase\@alignfrom + \or + \if@logo + \Ifkomavarempty{fromlogo}{\null}{% + {\raggedleft\noindent\usekomavar{fromlogo}\\ + \vskip\parskip}\noindent}% + \fi + \or + \or + \if@logo + \Ifkomavarempty{fromlogo}{}{% + \raggedleft\usekomavar{fromlogo}\par}% + \fi + \raggedright + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}% + }% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% + \or + \raggedleft + \if@logo + \Ifkomavarempty{fromlogo}{}{\usekomavar{fromlogo}\par}% + \fi + {\usekomafont{fromname}\strut\ignorespaces + \usekomavar{fromname}% + {% + \ifnum\@rulefrom=1\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}% + }% + \fi + }% + \\ + }% + {\usekomafont{fromaddress}\strut\ignorespaces + \usekomavar{fromaddress}% + \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi% + \if@mobilephone% + \\\usekomavar*{frommobilephone}\usekomavar{frommobilephone}% + \fi% + \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi% + \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi% + \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi% + \ifnum\@rulefrom=2\\[-.5\baselineskip]% + \usekomafont{fromrule}{% + \setlength{\@tempdima}{\useplength{fromrulewidth}}% + \ifdim\@tempdima=\z@ + \setlength{\@tempdima}{\useplength{locwidth}}% + \fi + \expandafter\rule\expandafter{\the\@tempdima}{% + \useplength{fromrulethickness}}}% + \fi + \\ + }% +% \end{macrocode} +% Last but not least the content of the location. +% \begin{macrocode} + \fi + \usekomavar{location}% + \vskip \z@ \@plus .00001fil}% + {location field}{locheight}{\setkomavar}% + }}% + }% + \vskip-\useplength{locvpos}\move@frompt + }% +} +%</class|!willbe> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@datefield} +% \changes{v2.8q}{2002/01/14}{setting \cs{if@tempwa}} +% \changes{v2.97c}{2007/05/14}{using font elements \fnt{refname} and +% \fnt{refvalue}} +% Print either a reference line or place and date only. +% \begin{macro}{\do@set@reffield} +% \changes{v3.09}{2011/03/06}{added} +% The macro will be defined later depending on testing of usage or +% printing. So we just allocate/reserve it here. +% \begin{macrocode} +\newcommand*{\do@set@reffield}{} +% \end{macrocode} +% \begin{macro}{\@set@reffield} +% \changes{v3.17}{2015/04/17}{\cs{setbox} replaced by \cs{sbox}} +% Used to print a single field in the reference line. The argument is the name +% of field. +% \begin{macrocode} +\newcommand*{\@set@reffield}[1]{% + \Ifkomavarempty{#1}{}{% + \settowidth{\@tempdima}{\strut\usekomafont{refvalue}\usekomavar{#1}}% + \sbox\z@{\strut\usekomafont{refname}\usekomavar*{#1}}% + \ifdim \@tempdima<\wd0\setlength{\@tempdima}{\wd0}\fi + \if@tempswa\enskip\hfill\fi + \parbox[t]{\@tempdima}{\noindent\raggedright + \strut\box\z@\\\usekomafont{refvalue}\strut\usekomavar{#1}}% + \@tempswatrue + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@test@reffield} +% \changes{v3.09}{2011/03/06}{added} +% Used to test, if a field is not empty and sets \cs{if@tempswa} corresponding +% to the result. All not empty fields are added to a comma+space separated +% list in \cs{@tempa}. +% \begin{macrocode} +\newcommand*{\@test@reffield}[1]{% + \Ifkomavarempty{#1}{}{% +%<trace> \if@tempswa\l@addto@macro\@tempa{, }\fi +%<trace> \l@addto@macro\@tempa{#1}% + \@tempswatrue + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@set@reffields} +% \changes{v2.8q}{2002/01/14}{added} +% The internal storage of all \cs{do@set@reffield} calls to be used for the +% reference line. +% \begin{macrocode} +\newcommand*{\@set@reffields}{}% +% \end{macrocode} +% \end{macro} +% \begin{command}{\addtoreffields} +% \changes{v3.09}{2011/03/06}{using \cs{do@set@reffield}} +% Adds a new \cs{do@set@reffield} to \cs{@set@reffields} for the field given +% by the argument. +% \begin{macrocode} +\newcommand*{\addtoreffields}[1]{% + \l@addto@macro{\@set@reffields}{\do@set@reffield{#1}}% +} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\removereffields} +% \changes{v2.8q}{2002/01/14}{added} +% Remove all fields from \cs{@set@reffields}. +% \begin{macrocode} +\newcommand*{\removereffields}{% + \renewcommand*{\@set@reffields}{}% +} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\defaultreffields} +% \changes{v2.8q}{2002/01/14}{added} +% (Re)Set the default of \cs{@set@reffields}. +% \begin{macrocode} +\newcommand*{\defaultreffields}{% + \removereffields + \addtoreffields{yourref}% + \addtoreffields{yourmail}% + \addtoreffields{myref}% + \addtoreffields{customer}% + \addtoreffields{invoice}% +} +% \end{macrocode} +% This is used for initial state: +% \begin{macrocode} +\defaultreffields +% \end{macrocode} +% \end{command} +% +% \changes{v2.3e}{1996/05/31}{distance between place and date added} +% \changes{v2.8o}{2001/09/18}{added an additional verticale distance for +% \file{KOMAold.lco} only} +% \changes{v2.8q}{2001/11/13}{\cs{rlap} added} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/01/14}{empty test moved to \cs{@set@reffield}} +% \changes{v2.9l}{2003/01/28}{calculation of \plen{refwidth} fixed} +% \changes{v2.9l}{2003/01/28}{calculation of \plen{refhpos} added} +% \changes{v2.95}{2006/03/23}{using \cs{setparsizes}} +% \changes{v2.97c}{2007/05/14}{using several new font elements} +% \changes{v3.09}{2011/03/06}{initialization of \cs{do@set@reffield}} +% \changes{v3.12}{2013/07/31}{using font element \fnt{placeanddate}} +% \changes{v3.17}{2015/04/17}{\cs{setbox} replaced by \cs{sbox}} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% \begin{macrocode} +\newcommand*{\@datefield}{% + {% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \ifdim\useplength{refwidth}=\z@ + \if@refwide + \setplength{refwidth}{\paperwidth}% + \ifdim \useplength{toaddrhpos}>\z@ + \setplength{refhpos}{\useplength{toaddrhpos}}% + \else + \setplength[-]{refhpos}{\useplength{toaddrhpos}}% + \fi + \addtoplength[-2]{refwidth}{\useplength{refhpos}}% + \else + \setplength{refwidth}{\textwidth}% + \setplength{refhpos}{\oddsidemargin}% + \addtoplength{refhpos}{1in}% + \fi + \else + \ifdim\useplength{refhpos}=\z@ + \begingroup +% \end{macrocode} +% How much smaller is the reference line than the text width. +% \begin{macrocode} + \setlength\@tempdima{\textwidth}% + \addtolengthplength[-]{\@tempdima}{refwidth}% +% \end{macrocode} +% Now we calculate the left margin. +% \begin{macrocode} + \setlength\@tempdimb{\oddsidemargin}% + \addtolength\@tempdimb{1in}% +% \end{macrocode} +% And the left and right margin together. +% \begin{macrocode} + \setlength{\@tempdimc}{\paperwidth}% + \addtolength{\@tempdimc}{-\textwidth}% +% \end{macrocode} +% Now we can calculate the left margin of the reference line without changing +% the relation of the margins (with some tolerance). +% \begin{macrocode} + \divide\@tempdimb by 32768\relax + \divide\@tempdimc by 32768\relax + \ifdim\@tempdimc=\z@\else + \multiply\@tempdima by\@tempdimb + \divide\@tempdima by\@tempdimc + \fi + \edef\@tempa{\noexpand\endgroup + \noexpand\setplength{refhpos}{\the\@tempdima}}% + \@tempa + \fi\fi + \@tempswafalse + \move@topt\vskip\useplength{refvpos}% +% \end{macrocode} +% Have we to print something? +% \begin{macrocode} + \@tempswafalse + \let\do@set@reffield\@test@reffield +%<trace> \let\@tempa\@empty + \@set@reffields + \ifcase \@datepos\else\@test@reffield{date}\fi + \if@tempswa +%<trace> \typeout{Reference line(s) with: \@tempa}% + \@tempswafalse +% \end{macrocode} +% If so, do so. +% \begin{macrocode} + \rlap{\noindent\move@topl\hskip\useplength{refhpos}% + \vbox{\hsize\useplength{refwidth}% + \noindent + \ifnum \@datepos=2 + \@set@reffields + \if@tempswa + \@tempswafalse + \@set@reffield{date}% + \fi + \fi + \let\do@set@reffield\@set@reffield + \@set@reffields% + \if@tempswa + \ifnum \@datepos=1 \@set@reffield{date}\fi% +% \end{macrocode} +% From version~2.97c also test, of the font of the reference line is too big. +% \begin{macrocode} + \sbox\z@{\usekomafont{refname}\strutbox}% + \ifdim\ht\z@>\ht\strutbox +%<class> \ClassWarningNoLine{scrlttr2}{% +%<package> \PackageWarningNoLine{scrletter}{% + Font element `refname' should not be larger than + \string\normalsize!}% + \fi + \sbox\z@{\usekomafont{refvalue}\strutbox}% + \ifdim\ht\z@>\ht\strutbox +%<class> \ClassWarningNoLine{scrlttr2}{% +%<package> \PackageWarningNoLine{scrletter}{% + Font element `refvalue' should not be larger than + \string\normalsize!}% + \fi + \else +% \end{macrocode} +% If we do not have to print any field, we are printing the place and date. +% \begin{macrocode} + \ifcase \@datepos\else + \ifnum \@datepos=1 \enskip\hfill\fi + {\usekomafont{placeanddate}{\Ifkomavarempty{place}{}{% + \usekomavar{place}\usekomavar{placeseparator}}% + \usekomavar{date}}}% + \fi + \fi + }% + }% +%<trace> \else\typeout{No reference line.}% + \fi + \vskip\useplength{refaftervskip}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@maketitle,\@makelettertitle} +% \changes{v2.3b}{1996/01/14}{using \cs{sectfont}} +% \changes{v2.8p}{2001/09/22}{using \cs{titlefont} instead of \cs{sectfont}} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.9t}{2004/09/16}{\cs{par} with size and font of the title} +% \changes{v2.95}{2006/03/22}{using \cs{usekomafont}} +% \changes{v3.13}{2014/06/26}{\cs{@maketitle} renamed to \cs{@makelettertitle}} +% \changes{v3.15}{2015/02/21}{\fnt{title} replaced by \fnt{lettertitle}} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% \changes{v3.36}{2022/03/04}{use of variable \var{title} removed} +% \changes{v3.37}{2022/06/20}{wrongly removed \var{title} added again} +% \KOMAScript{} provides a letter title. This is different from a document +% title. +% \begin{macrocode} +\newcommand*{\@makelettertitle}{% + \Ifkomavarempty{title}{% + \typeout{Title: no}% + }{% + \typeout{Title: yes}% + {\setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \centering\LARGE\usekomafont{lettertitle}\usekomavar{title}\par}% + \vskip\baselineskip% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@subjfield} +% \changes{v2.8q}{2001/10/19}{\cs{centerline} replaced by \cs{centering}} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/01/31}{hanging} +% \changes{v2.95}{2006/03/23}{using cs{setparsizes}} +% \changes{v3.01}{2008/11/03}{using \plen{subjectbeforevskip} and +% \plen{subjectaftervskip}} +% \changes{v3.15}{2015/02/21}{\fnt{subject} replaced by \fnt{lettersubject}} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% The subject of the letter. +% \begin{macrocode} +\newcommand*{\@subjfield}{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative + \Ifkomavarempty{subject}{% + \typeout{Subject: no}% + }{% + \ifx\raggedsubject\@empty + \ifdim\useplength{subjectvpos}=\z@ + \if@subjafter% + \typeout{Subject: after opening}% + \let\raggedsubject\centering% + \else + \typeout{Subject: before opening}% + \def\raggedsubject{\noindent\@hangfrom}% + \fi + \else + \typeout{Subject: at absolute vertical position}% + \def\raggedsubject{\noindent\@hangfrom}% + \fi + \fi + \ifdim\useplength{subjectvpos}=\z@ + \vskip\useplength{subjectbeforevskip}% + \begingroup + \else + \move@topt\vskip\useplength{subjectvpos}% + \expandafter\vb@t@z\expandafter{% + \fi + \usekomafont{lettersubject}% + \raggedsubject{\if@subj \subject@format{\strut\ignorespaces + \usekomavar*{subject}}\fi}% + \subject@format{\strut\ignorespaces\usekomavar{subject}}\par + \ifdim\useplength{subjectvpos}=\z@ + \endgroup + \vskip\useplength{subjectaftervskip}% + \else + }% + \vskip-\useplength{subjectvpos}\move@frompt + \fi + }% + }% +} +% \end{macrocode} +% \begin{pseudolength}{subjectvpos} +% \changes{v3.01}{2008/11/03}{added} +% If \plen{subjectpos} is not 0 it is the absolute vertical position of the +% subject. With 0 it is placed relative to the title, the reference line or +% the opening. This is the initial value. +% \begin{macrocode} +\newplength{subjectvpos} +\setplength{subjectvpos}{0pt} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{subjectaftervskip} +% \changes{v3.01}{2008/11/03}{added} +% The vertical distance after the subject is initialized with +% 2\len{baselineskip}. +% \begin{macrocode} +\newplength{subjectaftervskip} +\setplength{subjectaftervskip}{2\baselineskip} +% \end{macrocode} +% \end{pseudolength} +% \begin{pseudolength}{subjectbeforevskip} +% \changes{v3.01}{2008/11/03}{added} +% The vertical distance before the subject, if not an absolute position is +% used. Initial value is \len{baselineskip}. +% \begin{macrocode} +\newplength{subjectbeforevskip} +\setplength{subjectbeforevskip}{0pt} +%</body> +% \end{macrocode} +% \end{pseudolength} +% \end{macro}^^A \@subjfield +% +% +% \subsection{Head of the succeeding pages} +% +% The succeeding pages use another kind of note paper without all these large +% elements for the sender, addressee etc. And there isn't an element like +% \cs{opening}. So the page style is used. +% +% \begin{variable}{nexthead} +% \changes{v3.08}{2010/10/28}{added} +% This is the variable used for the page head of the page style. +% The initial content depends mostly on \cs{@pageat} but also uses +% \cs{leftmark} and \cs{rightmark} set by \cs{opening}. +% \begin{macrocode} +%<*body> +\newkomavar{nexthead} +\setkomavar{nexthead}{% + \rlap{\parbox[c]{\textwidth}{\raggedright\strut + \ifnum\@pageat=0\pagemark\else\leftmark\fi\strut}}% + \parbox[c]{\textwidth}{% + \centering\strut + \ifcase\@pageat + \rightmark + \or + \pagemark + \or + \rightmark + \fi\strut}% + \llap{\parbox[c]{\textwidth}{\raggedleft\strut + \ifcase\@pageat + \leftmark + \or + \rightmark + \or + \pagemark + \else + \rightmark + \fi\strut}}% +}% +% \end{macrocode} +% \end{variable} +% \begin{command}{\nexthead} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macro}{\@nexthead} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macrocode} +%<*class> +\newcommand{\nexthead}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\nexthead.\MessageBreak + You should use \string\setkomavar{nexthead}\MessageBreak + instead of \string\nexthead + } + \setkomavar{nexthead}% +} +\newcommand*{\@nexthead}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\@nexthead.\MessageBreak + \string\usekomavar{nexthead} should be used\MessageBreak + instead of \string\@nexthead + }% + \usekomavar{nexthead}% +} +%</class> +%</body> +% \end{macrocode} +% \end{macro}^^A \@nexthead +% \end{command}^^A \nexthead +% +% +% \subsection{Footer of the succeeding pages} +% +% \begin{variable}{nextfoot} +% \changes{v3.08}{2010/10/28}{added} +% This is the variable used for the page footer of the page style. +% The initial content depends mostly on \cs{@pageat} +% \begin{macrocode} +%<*body> +\newkomavar{nextfoot} +\setkomavar{nextfoot}{% + \ifnum\@pageat>2 + \parbox[c]{\textwidth}{% + \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi + \strut\pagemark% + }% + \fi +} +% \end{macrocode} +% \end{variable} +% \begin{command}{\nextfoot} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macro}{\@nextfoot} +% \changes{v3.08}{2010/10/28}{deprecated} +% \begin{macrocode} +%<*class> +\newcommand{\nextfoot}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\nextfoot.\MessageBreak + You should use \string\setkomavar{nextfoot}\MessageBreak + instead of \string\nextfoot + } + \setkomavar{nextfoot}% +} +\newcommand*{\@nextfoot}{% + \ClassWarning{scrlttr2}{% + Deprecated usage of \string\@nextfoot.\MessageBreak + \string\usekomavar{nextfoot} should be used\MessageBreak + instead of \string\@nextfoot + }% + \usekomavar{nextfoot}% +} +%</class> +%</body> +% \end{macrocode} +% \end{macro}^^A \@nextfoot +% \end{command}^^A \nextfoot +% +% +% \subsection{The \env{letter} environment} +% +% \begin{environment}{letter} +% \changes{v2.8q}{2002/01/16}{optional argument added} +% \changes{v2.8q}{2002/01/16}{reset counter \cnt{footnote}} +% \changes{v2.9d}{2002/08/12}{fixed reset of counter \cnt{footnote}} +% \changes{v3.17}{2015/03/20}{replacement for \cs{pagemark}} +% \changes{v3.19}{2015/07/15}{using \cs{letterpagestyle}} +% \changes{v3.19}{2015/07/15}{referenceable numbering of letters} +% \changes{v3.27}{2019/03/05}{no support for two-columned letters} +% The is the environment used to define one or even several letters in one +% document. It has an optional argument to set additional \KOMAScript{} +% options and a mandatory argument with the addressee. +% \begin{macrocode} +%<*body> +\newenvironment{letter}[2][]{% +% \end{macrocode} +% If we are in two column mode, we have to switch back to one column for the +% letter. \cs{ifletter@restonecol} as indicator, it at the end we have to +% switch back to two column mode. +% \begin{macrocode} + \if@twocolumn +%<class> \ClassWarning{\KOMAClassName}{% +%<package> \PackageWarning{scrletter}{% + twocolumn mode not supported.\MessageBreak + If you really want a twocolumned letter, you should\MessageBreak + use package `multicol' and add a `multicols'\MessageBreak + environment inside your letter.\MessageBreak + Switching back to oneside% + }% + \letter@restonecoltrue + \expandafter\onecolumn + \else + \letter@restonecolfalse + \fi +% \end{macrocode} +% Then we start a new odd page and change the page style. Afterwards all +% relevant counters (currently \cnt{page} and \cnt{footnote}) are reset and +% the \cnt{letter} counter is increased referenceable. +% \changes{v3.19}{2015/07/15}{using \cs{cleardoubleoddemptypage}} +% \changes{v3.27}{2019/03/05}{using \cs{raggedbottom}} +% \begin{macrocode} + \cleardoubleoddemptypage + \raggedbottom + \scr@ifundefinedorrelax{letterpagestyle}{}{% + \ifx\letterpagestyle\@empty\else + \pagestyle{\letterpagestyle}% + \fi + }% +%<package> \let\pagemark\letterpagemark + \refstepcounter{letter}% + \let\thisletter\@currentlabel + \setcounter{page}{\@ne}% + \setcounter{footnote}{0}% + \interlinepenalty=200\@processto{#2}% +% \end{macrocode} +% Then it's time for the options. +% \begin{macrocode} + \KOMAoptions{#1}% +% \end{macrocode} +% \changes{v3.27}{2019/03/31}{first-page head generation moved} +% There are plans to generate the page head already here instead of waiting +% till \cs{opening}. But currently this is not used. +% \begin{macrocode} +%<package&willbe> \@gen@firsthead +% \end{macrocode} +% \changes{v3.27}{2019/03/22}{plans to set the page style} +% There are plans to use page style \pstyle{notepaper} for the first page +% before executing the begin hook. +% \begin{macrocode} +%<package&willbe> \thispagestyle{notepaper}% +% \end{macrocode} +% There are also plans to calculate the height of the reference line here. +% \begin{macrocode} +%<*package&willbe> + \ifdim\useplength{refheight}>\z@ + \else + \begingroup + \newkomavar[\strut]{@internal@testvar@}% + \setkomavar{@internal@testvar@}{\strut}% + \setplengthtototalheight{refheight}{\@set@reffield{@internal@testvar@}}% + \edef\reserved@a{\noexpand\endgroup + \noexpand\setplength{refheight}{\useplength{refheight}}% + }% + \reserved@a + \fi +%</package&willbe> +% \end{macrocode} +% Before executing the hook. The hook can be used, e.g., to reset additional +% counters. +% \begin{macrocode} + \@beginletterhook +%<package&willbe>\initial@letter@vskip +}{% +% \end{macrocode} +% At the end, stop the letter. +% \begin{macrocode} + \stopletter +% \end{macrocode} +% \changes{v3.19}{2015/07/15}{label at the end added} +% Set a label for the current letter to provide referencing the last +% page. Then do the final page beak and reset the column mode. +% \begin{macrocode} + \let\@currentlabel\thisletter + \label{\thisletter.lastpage}% + \@@par\pagebreak\@@par% + \ifletter@restonecol\twocolumn\fi +% \end{macrocode} +% \changes{v3.27}{2019/03/31}{cleanup running head} +% Plan: The package also cleans up the running head after the end of the +% letter. +% \begin{macrocode} +%<package&willbe> \@mkdouble\@empty +} +% \end{macrocode} +% \begin{macro}{\initial@letter@vskip} +% \changes{v3.27}{2019/05/03}{added} +% Go to the start position of the letter. Usually to jump below the reference +% line inside the \texttt{letter} environment. +% \begin{macrocode} +%<*package&willbe> +\newcommand*{\initial@letter@vskip}{% + \move@topt + \vskip \dimexpr \useplength{refvpos} + \if@refline +\useplength{refheight}\fi + +\useplength{refaftervskip}\relax +} +%</package&willbe> +% \end{macrocode} +% \end{macro}^^A \inital@letter@vskip +% \begin{macro}{\letter@restonecolfalse,\letter@restonecoltrue, +% \ifletter@restonecol} +% \changes{v3.27}{2019/03/05}{added} +% Used above to save and restore the column mode. +% \begin{macrocode} +\newif\ifletter@restonecol +% \end{macrocode} +% \end{macro} +% \begin{command}{\thisletter} +% \changes{v3.19}{2015/07/15}{added} +% The base value of the current letter label. This can be used to, e.g., +% reference the \texttt{\cs{thisletter}.lastpage} label. It is initialized to +% a unknown value, as long as we are outside any \env{letter} environment. +% \begin{macrocode} +\newcommand*{\thisletter}{outside.letter.undefined} +% \end{macrocode} +% \end{command}^^A \thisletter +% \begin{command}{\letterlastpage} +% \changes{v3.19}{2015/07/15}{add} +% Reference to the page of the \texttt{\cs{thisletter}.lastpage} label. +% \begin{macrocode} +\newcommand*{\letterlastpage}{\pageref{\thisletter.lastpage}} +% \end{macrocode}^^A \letterlastpage +% \end{command} +% \begin{command}{\stopletter} +% This is a kind of end of letter hook. But \cs{AtEndLetter} should be used to +% add code. +% \begin{macrocode} +\newcommand*{\stopletter}{} +% \end{macrocode} +% \end{command}^^A \stopletter +% \begin{macro}{\@processto} +% \changes{v2.9r}{2004/06/16}{supports empty addressee} +% \changes{v3.27}{2019/03/24}{extended setting of variables} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% The addressee argument of \env{letter} has to be split into the name and the +% address. +% \begin{description} +% \item[Note:] The specification clearly says, that optional arguments to |\\| +% are not supported. So we do not adapt that change of \LaTeX{} 2021/10/01. +% \item[Note:] Here we also have plans to change things. +% \end{description} +% \begin{macrocode} +\newcommand{\@processto}[1]{% +% \end{macrocode} +% If \cs{@processto} argument (\texttt{letter} mandatory argument) is empty: +% \begin{macrocode} + \IfArgIsEmpty{#1}{% +% \end{macrocode} +% try to build it from \texttt{toname} and \texttt{toaddress}. +% \begin{macrocode} +%<*package&willbe> + \Ifkomavarempty{toname}{% + \Ifkomavarempty{tofamilyname}{}{% + \Ifkomavarempty{togivenname}{% + \usekomavar[\setkomavar{toname}]{tofamilyname}% + }{% + % Fixme: The \cs{protected@edef}s are critical! + \usekomavar[\protected@edef\reserved@a]{togivenname}% + \usekomavar[\protected@edef\reserved@b]{tofamilyname}% + \edef\reserved@a{% + \noexpand\setkomavar{toname}{% + \unexpanded\expandafter{\reserved@a}\ % + \unexpanded\expandafter{\reserved@b}}% + }\reserved@a + }% + }% + }{}% + \Ifkomavarempty{toaddress}{% + % Fixme: The \cs{protected@edef}s are critical! + \usekomavar[\protected@edef\reserved@a]{toname}% + \protected@edef\reserved@a{% + \noexpand\usekomafont{toname}{\reserved@a}% + }\reserved@a + }{% + \Ifkomavarempty{toname}{% + % Fixme: The \cs{protected@edef}s are critical! + \usekomavar[\protected@edef\reserved@a]{toaddress}% + \protected@edef\reserved@a{% + \noexpand\usekomafont{toaddress}{\reserved@a}% + }\reserved@a + }{% + % Fixme: The \cs{protected@edef}s are critical! + \usekomavar[\protected@edef\scr@local@toname]{toname}% + \usekomavar[\protected@edef\reserved@b]{toaddress}% + \protected@edef\reserved@a{% + \noexpand\setkomavar{addressee}{% + {\noexpand\usekomafont{toname}{\scr@local@toname}}\\ + \noexpand\usekomafont{toaddress}{\reserved@b}% + }% + }\reserved@a + }% + }% +%</package&willbe> + }{% +% \end{macrocode} +% Split into part before first \cmd\\ and it: +% \begin{macrocode} + \expandafter\@xproc#1\\\@nil + \ifx\reserved@b\@empty\else\expandafter\@xproc#1\@nil\fi +% \end{macrocode} +% Plan: Set variable \var{addressee}: +% \begin{macrocode} +%<*package&willbe> + % Fixme: The \cs{protected@edef}s are critical! + \protected@edef\reserved@c{% + \noexpand\setkomavar{addressee}{% + {\noexpand\usekomafont{toname}{\reserved@a}}% + \ifx\reserved@b\@empty\else + \\\noexpand\usekomafont{toaddress}{\reserved@b}% + \fi + }% + }% +% \end{macrocode} +% If \var{toname} is empty, set it: +% \begin{macrocode} + \Ifkomavarempty{toname}{% + % Fixme: The \cs{protected@edef}s are critical! + \protected@edef\reserved@a{% + \noexpand\reserved@c{\noexpand\setkomavar{toname}{\reserved@a}}}% + }{\let\reserved@a\reserved@c}% +% \end{macrocode} +% If \var{toaddress} is empty, set it: +% \begin{macrocode} + \Ifkomavarempty{toaddress}{% + % Fixme: The \cs{protected@edef}s are critical! + \protected@edef\reserved@b{\noexpand\reserved@a + \noexpand\setkomavar{toaddress}{\reserved@b}}% + \reserved@b + }{\reserved@a}% +%</package&willbe> +% \end{macrocode} +% For now simply set \var{toname} and \var{toaddress}: +% \changes{v3.27}{2019/10/28}{don't expand the contents of \cs{reserved@a} and +% \cs{reserved@b}} +% \begin{macrocode} +%<*class|!willbe> + \edef\reserved@a{% + \noexpand\setkomavar{toname}{\unexpanded\expandafter{\reserved@a}}% + \noexpand\setkomavar{toaddress}{\unexpanded\expandafter{\reserved@b}}% + }\reserved@a +%</class|!willbe> + }% +} +% \end{macrocode} +% \begin{macro}{\@xproc} +% Macro to split two elements with |\\| separator. +% \begin{macrocode} +\newcommand*{\@xproc}{} +\long\def\@xproc#1\\#2\@nil{% +% \end{macrocode} +% \changes{v3.27}{2019/03/24}{do not directly set variables but +% \cs{reserved@a} and \cs{reserved@b}} +% \begin{macrocode} + \def\reserved@a{#1}\def\reserved@b{#2}% +} +% \end{macrocode} +% \end{macro}^^A \@xproc +% \end{macro}^^A \@processto +% \begin{command}{\flushbottom} +% \changes{v2.97c}{2007/05/17}{added} +% The \cs{stopletter} hook is used to make the last page similar to using +% \cs{raggedbottom}. +% \begin{description} +% \item[Note:] It is correct to have this change globally, because it can be +% used outside a letter, but should be valid for letters in this case too. +% \end{description} +% \begin{macrocode} +\g@addto@macro\flushbottom{% + \AtEndLetter{\vskip \z@\@plus.0001fil\relax}% +} +% \end{macrocode} +% \end{command}^^A \flushbottom +% \begin{counter}{letter} +% \changes{v3.19}{2015/07/15}{added} +% The counter used to number the letters and make them reference-able. +% \begin{macrocode} +\newcounter{letter} +% \end{macrocode} +% \end{counter} +% \end{environment}^^A letter +% +% +% \begin{command}{\letterpagestyle} +% \changes{v3.19}{2015/07/15}{added} +% Similar to \cs{tilepagestyle}, \cs{indexpagestyle} etc. we have a +% \cs{letterpagestyle} for the page style of the letter environment. The +% initial value of the class and the package are different. For the class we +% use an empty value, which means not change, because it already uses an +% adapted page style. But the package does not change the usual page styles of +% the classes, and therefore has a new default \pstyle{plain.letter} for +% letters. +% \begin{macrocode} +\newcommand*{\letterpagestyle}{% +%<package> plain.letter% +} +% \end{macrocode} +% \end{command} +% +% +% \begin{command}{\AtBeginLetter} +% \changes{v2.8n}{2001/09/08}{added} +% \begin{macro}{\@beginletterhook} +% \changes{v2.8n}{2001/09/08}{added} +% This is the hook at the beginning of a letter. Initially it is empty. +% \begin{macrocode} +\newcommand{\AtBeginLetter}{\g@addto@macro\@beginletterhook} +\newcommand{\@beginletterhook}{} +% \end{macrocode} +% \end{macro} +% \end{command} +% +% \begin{command}{\AtEndLetter} +% \changes{v2.95}{2006/03/22}{added} +% At the end currently a user command \cs{stopletter} is used to represent the +% hook. An internal macro would be better but incompatible. +% \begin{macrocode} +\newcommand{\AtEndLetter}{\g@addto@macro\stopletter} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\stopbreaks} +% \begin{command}{\startbreaks} +% \changes{v3.33}{2021/03/05}{\cs{relax} added} +% \begin{macro}{\@nobreakvspace} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \changes{v3.33}{2021/03/05}{robust definition} +% \begin{macro}{\@nobreakvspacex} +% \begin{macro}{\@nobreakcr} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \changes{v3.33}{2021/03/05}{simplified} +% Inside letters we have a slightly different page break. This should improve +% placement of letter texts (but I doubt, that it really does). +% \begin{macrocode} +\newcommand*{\stopbreaks}{\interlinepenalty \@M + \def\par{\@@par\nobreak}\let\\=\@nobreakcr + \let\vspace\@nobreakvspace} +\DeclareRobustCommand*{\@nobreakvspace}{% + \kernel@ifstar{\@nobreakvspacex}{\@nobreakvspacex}} +\newcommand*{\@nobreakvspacex}[1]{\ifvmode\nobreak\vskip #1\relax\else + \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi} +\newcommand*{\@nobreakcr}{\kernel@ifstar{\@normalcr*}{\@normalcr*}} +\newcommand*{\startbreaks}{\let\\=\@normalcr + \interlinepenalty 200\def\par{\@@par\penalty 200\relax}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{command} +% \end{command} +% +% \begin{command}{\opening} +% \changes{v2.8n}{2001/09/08}{re-implemented} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/03/25}{\cs{@PapersizeWarning}} +% \changes{v2.95}{2003/03/23}{using \cs{setparsizes}} +% \changes{v3.27}{2019/03/27}{only \cls*{scrlttr2} uses \cs{@addrfield}, +% \cs{@locfield} and \cs{@foldmarks}} +% \changes{v3.27}{2019/03/27}{only \cls*{scrlttr2} sets pagestyle} +% \changes{v3.27}{2019/03/31}{only \cls*{scrlttr2} generates the first-page +% head here} +% \begin{description} +% \item[ToDO:] There are plans to not generate the notepaper head, foot and +% several other elements here but in \env{letter}. +% \end{description} +% \begin{macrocode} +\newcommand{\opening}[1]{% + \@PapersizeWarning +%<class|!willbe> \@gen@firsthead + \@mkboth{\scr@fromname@var}{\scr@subject@var}% +%<class|!willbe> \thispagestyle{empty}% + \noindent +%<class|!willbe> \@foldmarks\@firstheadfootfield +%<class|!willbe> \@addrfield\@locfield + \ifdim\useplength{subjectvpos}=\z@\else\@subjfield\fi +%<class|!willbe> \@datefield + \@makelettertitle + \ifdim\useplength{subjectvpos}=\z@\if@subjafter\else\@subjfield\fi\fi + {\setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative#1\par}% + {\setlength{\@tempdima}{\baselineskip}% + \addtolength{\@tempdima}{-\parskip}% + \ifdim \@tempdima>\z@\vskip\@tempdima\fi}% + \ifdim\useplength{subjectvpos}=\z@\if@subjafter\@subjfield\fi\fi + \@afterindentfalse\@afterheading +} +% \end{macrocode} +% \end{command} +% +% +% \begin{command}{\closing} +% \changes{v2.2b}{1995/02/16}{\cs{fromsig} used directly} +% \changes{v2.3b}{1996/01/14}{distance between closing text and signature +% increased} +% \changes{v2.5d}{2000/06/10}{distance between closing text and signature +% variable} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.8q}{2002/02/05}{not \cs{long}} +% \changes{v2.8q}{2002/02/05}{supports \texttt{\cmd{\\}[\dots]}} +% \changes{v2.9r}{2004/01/28}{length limited to \cs{hsize}} +% \changes{v2.9r}{2004/01/28}{support for empty closing text} +% \changes{v2.95}{2003/03/23}{using \cs{setparsizes}} +% \changes{v3.17}{2015/02/19}{re-implemented to be more mistake tolerant} +% \changes{v3.17}{2015/02/20}{\cs{}\cs{} replaced by \cs{tabularnewline}} +% \changes{v3.17}{2015/02/20}{several \cs{strut} added} +% \changes{v3.20}{2015/10/08}{line break after the closing text only in +% horizontal mode} +% \changes{v3.25}{2017/11/15}{\cs{unskip}\cs{strut} replaced by +% \cs{scr@endstrut}} +% \changes{v3.37}{2022/06/09}{spurious space removed} +% Sets not only the closing text, that is given as argument, but also the +% signature. +% \begin{macro}{\presig@skip} +% \changes{v2.5d}{2000/06/10}{added} +% \changes{v2.8q}{2001/10/09}{replaced by \plen{sigbeforevskip}} +% \end{macro} +% \begin{command}{\setpresigskip} +% \changes{v2.5d}{2000/06/10}{added} +% \changes{v2.8q}{2001/10/09}{using \plen{asigbeforesvskip}} +% \changes{v2.8q}{2001/10/09}{only for \file{KOMAold.lco}} +% \begin{description} +% \item[ToDo:] This has to be moved to +% \file{scrkernel-letterclassoptions.dtx}! +% \end{description} +% \begin{macrocode} +%</body> +%</letter> +%<lco&KOMAold&body>\def\setpresigskip{\setplength{sigbeforevskip}} +%<*letter> +%<*body> +% \end{macrocode} +% \end{command}^^A \setpresigskip +% \begin{macro}{\@@xtrimtempa,\@xtrimtempa,\@tempdimaismaxwidthof} +% \changes{v2.8q}{2002/02/05}{added} +% \changes{v3.17}{2014/02/19}{removed} +% \end{macro}^^A \@@xtrimtempa,\@xtrimtempa,\@tempdimaismaxwidthof +% \begin{macrocode} +\newcommand*{\closing}[1]{{% + \setparsizes{\z@}{\z@}{\z@ plus 1fil}\par@updaterelative\nobreak\par + \nobreak\vskip\baselineskip + \stopbreaks\noindent + \settowidth{\@tempdima}{% + \begin{tabular}{@{}l@{}} + #1\tabularnewline + \usekomavar{signature}\tabularnewline + \end{tabular}% + }% + \setlength{\@tempdimb}{\hsize}% + \addtolength{\@tempdimb}{-\useplength{sigindent}}% + \ifdim\@tempdima>\@tempdimb\setlength{\@tempdima}{\@tempdimb}\fi + \hspace{\useplength{sigindent}}% + \parbox{\@tempdima}{\raggedsignature\strut\ignorespaces + #1\ifhmode\scr@endstrut\\[\useplength{sigbeforevskip}] + \else\vskip \useplength{sigbeforevskip}\fi + \strut\ignorespaces + \usekomavar{signature}\ifhmode\scr@endstrut\fi}}\par + \nobreak\vskip\baselineskip +} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\ps} +% \changes{v2.8n}{2001/09/08}{re-implemented} +% Switch to printing of \emph{postscriptum}. +% \begin{macrocode} +\newcommand\ps{\par% + \ifdim\parskip=\z@ + \vskip\baselineskip + \fi\startbreaks\noindent\ignorespaces +} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\cc} +% \changes{v2.6}{2001/01/03}{\cs{def} replaced by \cs{newcommand*}} +% \changes{v2.8n}{2001/09/08}{re-implemented} +% \changes{v2.9o}{2003/04/22}{\len{parfillskip} changed} +% \changes{v2.9q}{2004/04/26}{\len{parfillskip} changed to \texttt{1em plus +% 1fil}} +% \changes{v2.9r}{2004/05/25}{\len{parfillskip} changed to \texttt{\cs{z@} plus +% 1fil}} +% \changes{v3.22}{2016/12/15}{missing star at \cs{ifkomavaremptry*} added} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} replaced by +% \cs{Ifkomavarempty}} +% Switch to the printing of the \emph{copy circulated}. +% \begin{macrocode} +\newcommand*{\cc}[1]{\par% + \ifdim\parskip=\z@% + \vskip\baselineskip% + \fi\noindent% + \begingroup + \parbox[t]{\textwidth}{% + \Ifkomavarempty*{ccseparator}{}{% + \@hangfrom{% + \strut\usekomavar*{ccseparator}\usekomavar{ccseparator}}% + }% + \ignorespaces #1\strut}% + \setlength{\parfillskip}{\z@ \@plus 1fil}\par + \endgroup +} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\encl} +% \changes{v2.4a}{1997/06/06}{don't print a colon for empty enclosure} +% \changes{v2.6}{2001/01/03}{\cs{def} replaced by \cs{newcommand*}} +% \changes{v2.8n}{2001/09/08}{re-implemented} +% \changes{v2.8q}{2002/01/31}{missing \% added} +% \changes{v2.9o}{2003/04/22}{\cs{parfillskip} changed} +% \changes{v2.9q}{2004/04/26}{\cs{parfillskip} changed to \texttt{1em plus +% 1fil}} +% \changes{v2.9r}{2004/05/25}{\cs{parfillskip} changed to \texttt{\cs{z@} plus +% 1fil}} +% The enclosures are given as argument of \cs{encl}. They are printed hanging, +% if the output name of \var{enclseparator} is not empty. +% \begin{macrocode} +\newcommand*{\encl}[1]{\par% + \ifdim\parskip=\z@% + \vskip\baselineskip% + \fi\noindent% + \begingroup + \parbox[t]{\textwidth}{% + \Ifkomavarempty*{enclseparator}{}{% + \@hangfrom{% + \strut\usekomavar*{enclseparator}\usekomavar{enclseparator}}% + }% + \ignorespaces #1\strut}% + \setlength{\parfillskip}{\z@ \@plus 1fil}\par + \endgroup +} +%</body> +% \end{macrocode} +% \end{command} +% +% +% \subsection{Letter specific variables} +% +% \begin{variable}{place,location,specialmail,title,fromlogo} +% \changes{v2.8q}{2002/01/28}{added} +% \begin{variable}{fromzipcode,PPcode,PPdatamatrix} +% \changes{v3.03}{2009/03/04}{added} +% \begin{variable}{addresseeimage} +% \changes{v3.03}{2009/03/04}{added} +% \changes{v3.03b}{2009/06/30}{typofix} +% \begin{variable}{signature} +% \changes{v2.8q}{2002/01/16}{added} +% \begin{variable}{backaddress} +% \changes{v2.8q}{2002/01/16}{added} +% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} durch \cs{Ifkomavarempty} +% ersetzt} +% There are several variables without output name. For most of them the user +% has to define a value, if it should be used in the notepaper. Only +% \var{backaddress} and \var{signature} have a default, that depends on the +% values of other variables. Unfortunately these defaults are not expandable, +% because of the not expandable \cs{usekomavar}. +% \begin{description} +% \item[ToDo:] We should define a expandable \cs{usekomavar} alternative +% without optional star and optional argument. +% \end{description} +% \begin{macrocode} +%<*body> +\newkomavar{place} +\newkomavar{location} +\newkomavar{specialmail} +\newkomavar{title} +\newkomavar{fromlogo} +\newkomavar{fromzipcode} +\newkomavar{PPcode} +\newkomavar{PPdatamatrix} +\newkomavar{addresseeimage} +\newkomavar{signature} +\setkomavar{signature}{\usekomavar{fromname}} +\newkomavar{backaddress} +\setkomavar{backaddress}{% + \Ifkomavarempty{fromname}{}{% + \strut\ignorespaces\usekomavar{fromname}% + \Ifkomavarempty{fromaddress}{}{\\}}% + \Ifkomavarempty{fromaddress}{}{% + \strut\ignorespaces\usekomavar{fromaddress}}% + } +%</body> +% \end{macrocode} +% \end{variable}^^A backaddress +% \end{variable}^^A signature +% \end{variable}^^A addresseeimage +% \end{variable}^^A fromzipcode,PPcode,PPdatamatrix +% \end{variable}^^A place,location,specialmail,title,fromlogo +% +% \begin{option}{symbolicnames} +% \changes{v3.12}{2013/05/13}{added} +% \changes{v3.17}{2015/03/16}{using internal value storage} +% \changes{v3.27}{2019/03/21}{new values \opt{\quotechar=fontawesome} and +% \opt{\quotechar=marvosym} added} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% \begin{macro}{\@scrsymbolsfalse,\@scrsymbolstrue,\if@scrsymbols} +% For some of the variable the print name can be a symbol instead of a name. +% \begin{macrocode} +%<*option> +\newif\if@scrsymbols +\KOMA@key{symbolicnames}[true]{% + \KOMA@set@ifkey{symbolicnames}{@scrsymbols}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \def\scr@symbols@font{marvosym}% + \else + \KOMA@set@ncmdkey{symbolicnames}{reserved@a}{% + {marvosym}{0},% + {fontawesome}{1},{awesome}{1},% + }{#1}% + \ifx \FamilyKeyState\FamilyKeyStateProcessed + \@scrsymbolstrue + \ifcase \number\reserved@a + \def\scr@symbols@font{marvosym}% + \else + \def\scr@symbols@font{fontawesome}% + \fi + \fi + \fi + \ifx \FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension + }{symbolicnames}{#1}% + \if@scrsymbols + \Ifstr{\scr@symbols@font}{marvosym}{% + \def\scr@symbol@phone{\Telefon}% + \def\scr@symbol@fax{\FAX}% + \def\scr@symbol@email{\Email}% + \def\scr@symbol@mobilephone{\Mobilefone}% + \def\scr@symbol@www{\@empty}% + }{% + \def\scr@symbol@phone{\faPhone}% + \def\scr@symbol@fax{\faFax}% + \def\scr@symbol@email{\faEnvelopeO}% + \def\scr@symbol@mobilephone{\faMobilePhone}% + \def\scr@symbol@www{\faGlobe}% + }% + \if@atdocument + \begingroup + \@tempswafalse + \expandafter\ifdefined\scr@symbol@phone\else\@tempswatrue\fi + \expandafter\ifdefined\scr@symbol@fax\else\@tempswatrue\fi + \expandafter\ifdefined\scr@symbol@email\else\@tempswatrue\fi + \expandafter\ifdefined\scr@symbol@mobilephone\else\@tempswatrue\fi + \expandafter\ifdefined\scr@symbol@www\else\@tempswatrue\fi + \if@tempswa + \aftergroup\@scrsymbolsfalse +%<class> \ClassWarning{\KOMAClassName}{% +%<package> \PackageWarning{scrletter}{% + Option `symbolicnames=#1' + ignorred.\MessageBreak + You've tried to set option `symbolicnames'\MessageBreak + after \string\begin{document}, but without\MessageBreak + loading package `\scr@symbols@font' before.\MessageBreak + You should either switch on option\MessageBreak + `symbolicnames' before \string\begin{document}\MessageBreak + or load package `\scr@letter@symbols@font' in the + document\MessageBreak + preamble to avoid this warning% + }% + \fi + \endgroup + \else +% \end{macrocode} +% \changes{v3.20}{2016/04/01}{need only extension for kind of loading delay} +% \changes{v3.20}{2016/04/01}{loading delay only if needed and available} +% In the document preamble we can load \pkg{macrosym} or \pkg{fontawesome}, +% but not while the options not has been processed. So in this case we have to +% delay it using \cs{AtEndOfClass} resp. \cs{AtEndOfPackage}. With an unknown +% extension we use \cs{AtBeginDocument}. +% \begin{macrocode} + \ifx\@fileswith@pti@ns\@badrequireerror + \Ifstr{\@currext}{\@clsextension}{% + \expandafter\AtEndOfClass + }{% + \Ifstr{\@currext}{\@pkgextension}{% + \expandafter\AtEndOfPackage + }{% + \expandafter\AtBeginDocument + }% + }% + \else + \expandafter\@firstofone + \fi + {\RequirePackage{\scr@symbols@font}}% + \fi + \fi + \fi +} +\KOMA@kav@add{.% +%<class> \KOMAClassFileName +%<package> scrletter.\scr@pkgextension +}{symbolicnames}{false}% +% \end{macrocode} +% \begin{macro}{\scr@symbols@font} +% \changes{v3.27}{2019/03/21}{added} +% The name of the font packages used for the symbols if symbols instead of +% names are activated. +% \begin{macro}{\scr@symbol@phone} +% \changes{v3.27}{2019/03/21}{added} +% The phone symbole. +% \begin{macro}{\scr@symbol@fax} +% \changes{v3.27}{2019/03/21}{added} +% The fax symbole. +% \begin{macro}{\scr@symbol@email} +% \changes{v3.27}{2019/03/21}{added} +% The e-mail symbol. +% \begin{macro}{\scr@symbol@mobilephone} +% \changes{v3.27}{2019/03/21}{added} +% The mobile-phone symbol. +% \begin{macro}{\scr@symbol@www} +% \changes{v3.27}{2019/03/21}{added} +% The world-wide-web symbol. +% \begin{macrocode} +\newcommand*{\scr@symbols@font}{} +\newcommand*{\scr@symbol@phone}{\undefined} +\newcommand*{\scr@symbol@fax}{\undefined} +\newcommand*{\scr@symbol@email}{\undefined} +\newcommand*{\scr@symbol@mobilephone}{\undefined} +\newcommand*{\scr@symbol@www}{\undefined} +%</option> +% \end{macrocode} +% \end{macro}^^A \scr@symbol@www +% \end{macro}^^A \scr@symbol@mobilephone +% \end{macro}^^A \scr@symbol@email +% \end{macro}^^A \scr@symbol@fax +% \end{macro}^^A \scr@symbol@phone +% \end{macro}^^A \scr@symbols@font +% \end{macro}^^A \if@scrsymbols +% \end{option}^^A symbolicnames +% +% \begin{variable}{placeseparator,subjectseparator,ccseparator,enclseparator, +% backaddressseparator} +% \changes{v2.8q}{2002/01/22}{added} +% \begin{variable}{phoneseparator,faxseparator,emailseparator,urlseparator, +% mobilephoneseparator} +% \changes{v2.8q}{2002/03/25}{added} +% \changes{v3.12}{2013/05/29}{support for option \opt{symbolicnames}} +% \changes{v3.27}{2019/03/21}{indirect saving of symbols} +% \begin{variable}{zipcodeseparator} +% \changes{v3.03}{2009/03/04}{added} +% We also have variables with (predefined) output names and predefined +% values. These are the separator variables. +% \begin{macrocode} +%<*body> +\newkomavar[\usekomavar{place}]{placeseparator} +\setkomavar{placeseparator}{,\nobreakspace} +\newkomavar[\subjectname]{subjectseparator} +\setkomavar{subjectseparator}{: } +\newkomavar[\ccname]{ccseparator} +\setkomavar{ccseparator}{: } +\newkomavar[\enclname]{enclseparator} +\setkomavar{enclseparator}{: } +\newkomavar{backaddressseparator} +\setkomavar{backaddressseparator}{,\nobreakspace} +\newkomavar[\if@scrsymbols\scr@symbol@phone\else\phonename\fi]{phoneseparator} +\setkomavar{phoneseparator}{\if@scrsymbols\else:\fi\nobreakspace} +\newkomavar[% + \if@scrsymbols\scr@symbol@mobilephone\else\mobilephonename\fi +]{mobilephoneseparator} +\setkomavar{mobilephoneseparator}{\usekomavar{phoneseparator}} +\newkomavar[\if@scrsymbols\scr@symbol@fax\else\faxname\fi]{faxseparator} +\setkomavar{faxseparator}{\if@scrsymbols\else:\fi\nobreakspace} +\newkomavar[\if@scrsymbols\scr@symbol@email\else\emailname\fi]{emailseparator} +\setkomavar{emailseparator}{\if@scrsymbols\else:\fi\nobreakspace} +\newkomavar[\if@scrsymbols\scr@symbol@www\else\wwwname\fi]{urlseparator} +\setkomavar{urlseparator}{\if@scrsymbols\else:\nobreakspace\fi} +\newkomavar{zipcodeseparator} +\setkomavar{zipcodeseparator}{\,--\,} +% \end{macrocode} +% \end{variable}^^A zipcodeseparator +% \end{variable}^^A phoneseparator … mobilephoneseparator +% \end{variable}^^A placeseparator … backaddressseparator +% +% \begin{variable}{addressee} +% \changes{v3.27}{2019/03/24}{new variable} +% The package needs a variable for the addressee (used for the address field). +% \begin{variable}{togivenname} +% \changes{v3.27}{2019/03/24}{new variable} +% \begin{variable}{tofamilyname} +% \changes{v3.27}{2019/03/24}{new variable} +% The package allows to build \texttt{toname} by \texttt{togivenname} and +% \texttt{tofamilyname}. +% \begin{macrocode} +%<*package&willbe> +\newkomavar{addressee} +\newkomavar{togivenname} +\newkomavar{tofamilyname} +%</package&willbe> +% \end{macrocode} +% \end{variable}^^A tofamilyname +% \end{variable}^^A togivenname +% \end{variable}^^A addressee +% +% \begin{variable}{fromname,fromaddress,fromemail,fromurl,frombank, +% toname,toaddress, +% fromphone,fromfax, +% yourmail,yourref, +% myref,customer,invoice,subject,date} +% \changes{v2.8q}{2002/01/16}{added} +% \begin{variable}{frommobilephone} +% \changes{v3.12}{2013/05/29}{added} +% \begin{command}{\date} +% \changes{v3.17}{2015/03/05}{deprecated} +% \begin{macro}{\scr@saved@date} +% \changes{v3.17}{2015/03/05}{added} +% Several variables with output name but without default value. Somehow +% special is \var{subject}, because the output name also contains the +% separator. To change the name only but not the separator change the output +% name of \var{subjectseparator}. \var{toaddress} and \var{fromaddress} are +% also special. Their output names are the values of \var{toname} +% resp. \var{fromname}. But this is not used initially. The initial value of +% \var{date} is \cs{@date}. So \cs{date} can still be used to change it, but +% this is not recommended. +% \begin{macrocode} +\newkomavar[\headfromname]{fromname} +\newkomavar[\usekomavar{fromname}]{fromaddress} +\newkomavar[\headtoname]{toname} +\newkomavar[\usekomavar{toname}]{toaddress} +\newkomavar[\usekomavar*{phoneseparator}% + \usekomavar{phoneseparator}]{fromphone} +\newkomavar[\usekomavar*{mobilephoneseparator}% + \usekomavar{mobilephoneseparator}]{frommobilephone} +\newkomavar[\usekomavar*{faxseparator}% + \usekomavar{faxseparator}]{fromfax} +\newkomavar[\usekomavar*{emailseparator}% + \usekomavar{emailseparator}]{fromemail} +\newkomavar[\usekomavar*{urlseparator}% + \usekomavar{urlseparator}]{fromurl} +\newkomavar[\bankname]{frombank} +\newkomavar[\yourrefname]{yourref} +\newkomavar[\yourmailname]{yourmail} +\newkomavar[\myrefname]{myref} +\newkomavar[\customername]{customer} +\newkomavar[\invoicename]{invoice} +\newkomavar[\usekomavar*{subjectseparator}% + \usekomavar{subjectseparator}]{subject} +\newkomavar[\datename]{date} +\setkomavar{date}{\@date} +\newcommand*{\scr@saved@date}{} +\let\scr@saved@date\date +\renewcommand*{\date}[1]{% +%<class> \ClassWarning{\KOMAClassName}{% +%<package> \PackageWarning{scrletter}{% + \string\date\space changes the internal \string\LaTeX\space date + only.\MessageBreak + You should note that this changes the default\MessageBreak + value of variable `date' only as long as nobody\MessageBreak + uses `\string\setkomavar` to change the content of\MessageBreak + variable `date'.\MessageBreak + Therefore, usage of `\string\setkomavar' is recommended\MessageBreak + to change the letter's date% + }% + \scr@saved@date{#1}% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \scr@saved@date +% \end{command}^^A \date +% \end{variable}^^A frommobilephone +% \end{variable}^^A fromname … date +% +% +% \begin{macrocode} +%</letter> +% \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: |