Skip to content
Snippets Groups Projects
ptbletter.cls 11.4 KiB
Newer Older
% Rolf Niepraschk, Rolf.Niepraschk@gmx.de

\setcounter{errorcontextlines}{100}  \listfiles

\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{ptbletter}[2023/04/21 v0.4c PTB-Brief-Klasse (RN)]

\let\ptb@tempdima=\@ovxx
\let\ptb@tempdimb=\@ovyy
\let\ptb@tempdimc=\@ovdx
\let\ptb@tempdimd=\@clnwd
\let\ptb@tempdime=\@clnht
\let\ptb@tempdimf=\@dashdim

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newif\ifPTB@useCMYK \PTB@useCMYKfalse % vorerst

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{graphicx,xcolor}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

\ifPTB@useCMYK
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \definecolor{PTBcolor}{cmyk}{1,0.32549,0.12549,0.12549}% ???
Rolf Niepraschk's avatar
Rolf Niepraschk committed
% icc:model: Europe ISO Coated FOGRA27
\else
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \definecolor{PTBcolor}{RGB}{0,155,206}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\fi

\newif\ifptb@BLN \ptb@BLNtrue
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newif\ifptb@serif \ptb@seriftrue

\newcommand*\ptb@lang{main=ngerman}
\newcount\ptb@head \ptb@head=1 %
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\ptb@tempa{}
\newcommand*\ptb@tempb{}
\DeclareOption{german}{\def\ptb@lang{main=ngerman}}
\DeclareOption{ngerman}{\def\ptb@lang{main=ngerman}}
\DeclareOption{de}{\def\ptb@lang{main=ngerman}}
\DeclareOption{english}{\def\ptb@lang{main=english}}
\DeclareOption{en}{\def\ptb@lang{main=english}}
\DeclareOption{BS}{\ptb@BLNfalse}
\DeclareOption{BLN}{\ptb@BLNtrue}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{sanserif}{\ptb@seriffalse}
\DeclareOption{serif}{\ptb@seriftrue}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{head0}{\ptb@head=0}
\DeclareOption{head1}{\ptb@head=1}
\DeclareOption{head2}{\ptb@head=2}

\DeclareOption{visualize}{%
  \PassOptionsToClass{\CurrentOption}{scrlttr2}
  \AtEndOfClass{%
    \showfields{head,address,location,refline,foot}%
    %\showfields{refline}%
    \addtokomafont{field}{\color{lightgray}}%
    \setshowstyle{rule}%
    %\setshowstyle{edges}%
    %\setshowstyle{frame}% default
  }
}

%\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrlttr2}}

\ExecuteOptions{pagesize}
\ProcessOptions\relax

\PassOptionsToPackage{usegeometry=true}{typearea}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
%,DINmtext
,backaddress=plain
,refline=nodate
,pagenumber=no
,parskip=never
Rolf Niepraschk's avatar
Rolf Niepraschk committed
,firstfoot=true
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\LoadLetterOption{DINmtext}

\RequirePackage[%
,verbose
Rolf Niepraschk's avatar
Rolf Niepraschk committed
,left=1in
,textwidth=165mm
]{geometry}

\RequirePackage{hyphsubst}% Trennregeln austauschen
\HyphSubstIfExists{ngerman-x-latest}{%
  \HyphSubstLet{ngerman}{ngerman-x-latest}}{}
\HyphSubstIfExists{german-x-latest}{%
  \HyphSubstLet{german}{german-x-latest}}{}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{ifxetex,ifluatex,url,array,tabularx,picture}
\newif\ifXeOrLua \XeOrLuafalse
\ifxetex\XeOrLuatrue\else\ifluatex\XeOrLuatrue\fi\fi

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage[right]{eurosym}

\ifXeOrLua% XeLaTeX oder luaLaTeX
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \input{ptbletter-new-engines.clo}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \input{ptbletter-old-engines.clo}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

\def\tiny{\@setfontsize\tiny{7}{8.17}}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

\ifptb@serif 
  \renewcommand*\familydefault{\rmdefault}
\else
  \renewcommand*\familydefault{\sfdefault}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\let\texteuro=\officialeuro

\RequirePackage[\ptb@lang]{babel}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{etoolbox,iflang,trimspaces}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\AtEndPreamble{%
  \IfLanguageName{ngerman}{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \RequirePackage[autostyle=true,german=guillemets,maxlevel=3]{csquotes}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  }{%
    \RequirePackage[babel=once]{csquotes}
    \useshorthands*{"}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \MakeAutoQuote{»}{«}
  \defineshorthand{"`}{\openautoquote}
  \defineshorthand{"'}{\closeautoquote}\shorthandon{"}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\AtEndOfClass{%
  \@ifpackageloaded{inputenc}{}{%
    \catcode`=\active
    \catcode`=\active
  }%
}

\setplength{toaddrhpos}{72bp}
\setplength{toaddrvpos}{124bp}
\setplength{lochpos}{-354bp}% "-" --> vom linken Blattand aus
\setplength{locvpos}{146bp}%      --> vom oberen Blattand aus
\setplength{locwidth}{212bp}
\setplength{locheight}{139bp}
\setplength{refvpos}{304bp}
%\setplength{refwidth}{40mm}
\setplength{refaftervskip}{\z@}
\setplength{firstheadhpos}{72bp}
\setplength{firstheadvpos}{50bp}
\setplength{firstheadwidth}{469bp}
\setplength{firstfoothpos}{72bp}
\setplength{firstfootvpos}{764bp}
\setplength{firstfootwidth}{\useplength{firstheadwidth}}
\setplength{subjectaftervskip}{23bp}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
%\setplength{sigindent}{3em}
\setplength{sigbeforevskip}{3mm}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\setlength{\textheight}{235mm}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\setlength{\footheight}{30bp}
%\widowpenalties 2 10000 0 %
\usepackage[defaultlines=2]{nowidow}
\setnowidow% keine einzelne Zeile am Seitenbeginn (keine "Hurenkinder")
% https://tex.stackexchange.com/questions/21983/how-to-avoid-page-breaks-inside-paragraphs

\let\raggedsignature=\raggedright

\removereffields

\addtokomafont{addressee}{\sffamily}
\setkomafont{refname}{\sffamily\tiny}
\setkomafont{refvalue}{\normalfont\footnotesize}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\setkomavar{firsthead}{%
  \ifcase\ptb@head
  \or% 1
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \begin{picture}(0,30bp )
      \unitlength=1bp % ???
      \put(0,0) {%
        \includegraphics[width=308bp]{PTB-logo-2015.pdf}%
      }
      \put(0,-5bp) {%
        \linethickness{1bp}%
        %\textcolor{PTBcolor}{\line(1,0){\linewidth}}%
        \textcolor{PTBcolor}{\line(1,0){494bp}}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
      }
    \end{picture}
  \or% 2
    \begin{minipage}[b]{\linewidth}%
      \sffamily\bfseries\huge%
      Physikalisch-Technische Bundesanstalt\\[3bp]%
      %%%\large
      Braunschweig und Berlin
    \end{minipage}%
  \fi
  \begin{tabular}%
    {@{}>{\usekomafont{refname}}l<{:}@{~\,}>{\usekomafont{refvalue}}l@{}}
    \usekomavar*{yourref} & \usekomavar{yourref}\\
    \usekomavar*{yourmail} & \usekomavar{yourmail}\\
    \usekomavar*{myref} & \usekomavar{myref}\\
    \usekomavar*{mymail} & \usekomavar{mymail}\\
    \multicolumn{2}{@{}l@{}}{} \\
    \usekomavar*{handledby} & \usekomavar{handledby}\\
    \usekomavar*{myphone} & \usekomavar{myphone}\\
    \usekomavar*{myfax} & \usekomavar{myfax}\\
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \usekomavar*{emailseparator} & \usekomavar{fromemail}\\
    \multicolumn{2}{@{}l@{}}{} \\
    \usekomavar*{date} & \usekomavar{date}
  \end{tabular}
}

\setkomavar{firstfoot}{%  TODO: engl/dt
  \parbox{\useplength{firstfootwidth}}{%
    \sffamily\tiny
    \begin{tabular}{@{}l@{}}
      \IfLanguageName{ngerman}{Hausadresse, Lieferanschrift:}{Domicile:} \\
      \ifptb@BLN Abbestr. 2--12 \else Bundesallee 100 \fi \\
      \ifptb@BLN 10587 Berlin \else 38116 Braunschweig\fi \\
      \IfLanguageName{ngerman}{DEUTSCHLAND}{GERMANY} \\
    \end{tabular}%
    \hfill
    \begin{tabular}{@{}l@{~}l@{}}
      \usekomavar*{fromphone} & \ifptb@BLN +49 30 3481-0 \else +49 531 592-0 \fi \\
      \usekomavar*{fromfax} & \ifptb@BLN +49 30 3481-7490 \else +49 531 592-9292 \fi \\
      \usekomavar*{fromemail} & \ifptb@BLN poststelle\_ib@ptb.de \else poststelle@ptb.de \fi \\
      Internet: & http://www.ptb.de
    \end{tabular}%
    \hfill
    \begin{tabular}{@{}l@{~}l@{}}
      \multicolumn{2}{@{}l@{}}{Deutsche Bundesbank, Filiale Leipzig} \\
      IBAN: & DE38 8600 0000 0086 0010 40 \\
      BIC: & MARKDEF1860 \\
      VAT-Nr.:  & DE 811 240 952
    \end{tabular}%
    \hfill
    \begin{tabular}{@{}l@{}}
      \ifptb@BLN PTB Braunschweig \else PTB Berlin-Charlottenburg \fi \\
      \ifptb@BLN Bundesallee 100 \else Abbestr. 2--12 \fi \\
      \ifptb@BLN 38116 Braunschweig \else 10587 Berlin \fi \\
      \IfLanguageName{ngerman}{DEUTSCHLAND}{GERMANY}
    \end{tabular}%
    \hfill \mbox{}
  }%
\setkomavar{backaddressseparator}{\,\,\textbullet\,\,}
\ifptb@BLN
  \setkomavar{backaddress}{PTB\\Abbestr. 2--12\\10587 Berlin}
\else
  \setkomavar{backaddress}{PTB\\Postfach 33 45\\38023 Braunschweig}
\fi

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\ptb@setcommand[3][]{%  #1=default (opt.), #2=macro, #3=value
  \edef\ptb@tempa{\trim@spaces@noexp{#3}}%
  \expandafter\protected@edef\csname #2\endcsname{%
    \ifx\@empty\ptb@tempa #1\else\ptb@tempa\fi}%
}
\newcommand*\ptb@setkomavar[2]{%
  \ptb@setcommand{ptb@tempb}{#2}%
  \edef\ptb@tempa{\noexpand\setkomavar{#1}{\ptb@tempb}}%
  \ptb@tempa
}
\newcommand*\handledby[1]{\ptb@setkomavar{handledby}{#1}}
\newcommand*\myref[1]{\ptb@setkomavar{myref}{#1}}
\newcommand*\mymail[1]{\ptb@setkomavar{mymail}{#1}}
\newcommand*\myphone[1]{\ptb@setkomavar{myphone}{#1}}
\newcommand*\myfax[1]{\ptb@setkomavar{myfax}{#1}}
\newcommand*\myemail[1]{\ptb@setkomavar{fromemail}{#1}}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\yourref[1]{\ptb@setkomavar{yourref}{#1}}
\newcommand*\yourmail[1]{\ptb@setkomavar{yourmail}{#1}}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\backaddress[1]{\ptb@setkomavar{backaddress}{#1}}
\newcommand*\subject[1]{\setkomavar{subject}{#1}}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\renewcommand*\date[1]{\ptb@setkomavar{date}{#1}}
\newkomavar[\mymailname]{mymail}
\newkomavar[\myphonename]{myphone}
\newkomavar[\myfaxname]{myfax}
\newkomavar[\handledbyname]{handledby}

\newcommand*\ptb@bgTextI{}
\newcommand*\ptb@bgTextII{}
\newcommand*\bgText{%
  \@ifstar{\@tempswatrue\ptb@bgText}{\@tempswafalse\ptb@bgText}%
\newcommand*\ptb@bgText[1]{%
  \if@tempswa
    \xdef\ptb@bgTextI{#1}%
  \else
    \xdef\ptb@bgTextII{#1}%

\RequirePackage{eso-pic}
\definecolor{bgTextColor}{gray}{0.9}
\AtBeginDocument{%
  \ifx\ptb@bgTextI\@empty
    \ifx\ptb@bgTextII\@empty\else
      \AddToShipoutPictureBG{%
        \AtTextCenter{%
          \makebox(0,0)[c]{\resizebox{\textwidth}{!}{%
            \rotatebox{54.7}{%
              \textnormal{\textsf{\textbf{%
                \color{bgTextColor}\ptb@bgTextII}}}}}}%
        }%
      }%
    \fi  
  \else
    \AddToShipoutPictureBG*{%
      \AtTextCenter{%
        \makebox(0,0)[c]{\resizebox{\textwidth}{!}{%
          \rotatebox{54.7}{%
            \textnormal{\textsf{\textbf{%
              \color{bgTextColor}\ptb@bgTextI}}}}}}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\yourrefname{Your reference}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\yourmailname{Your letter of}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\myrefname{My reference}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\mymailname{My letter of}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\myphonename{Telephone}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\myfaxname{Fax}%
\defcaptionname{american,australian,british,canadian,%
  english,newzealand,UKenglish,USenglish}\handledbyname{Handled by}%

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\yourrefname{Ihr Zeichen}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\yourmailname{Ihre Nachricht vom}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\myrefname{Mein Zeichen}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\mymailname{Meine Nachricht vom}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\myphonename{Telefondurchwahl}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\myfaxname{Telefaxdurchwahl}%
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\handledbyname{Bearbeitet von}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\defcaptionname{german,ngerman,austrian,naustrian,%
  swissgerman,nswissgerman}\enclname{Anlagen}%

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\AtBeginDocument{%
  \ifxetex\else
    \RequirePackage[%
    ,factor=1500
    ,protrusion=true
    ,expansion=true
    ,verbose=true
    ,final=true
    ,letterspace=100
    ,babel=true
    ]{microtype}
  \fi
  \shorthandon{"}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
}
\RequirePackage{enumitem}
\setlist{leftmargin=*,nosep,topsep=.5em,itemsep=.25em}
\setlist[1]{labelindent=1em}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

\IfLanguageName{ngerman}{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \newcommand*\MFG{Mit freundlichen Gr\"u\ss en}
  \newcommand*\MFg{Mit freundlichem Gru\ss}
  \newcommand*\MHG{Mit herzlichen Gr\"u\ss en}
}{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \newcommand*\MFG{Yours sincerely,}
  \newcommand*\MFg{Sincerely,}
  \newcommand*\MHG{With kind regards,}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
}