From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/tuda-ci/tex/tudaletter.cls | 481 ++++++++++++++++++++++++ 1 file changed, 481 insertions(+) create mode 100644 macros/latex/contrib/tuda-ci/tex/tudaletter.cls (limited to 'macros/latex/contrib/tuda-ci/tex/tudaletter.cls') diff --git a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls new file mode 100644 index 0000000000..43bcd28693 --- /dev/null +++ b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls @@ -0,0 +1,481 @@ +%% This is file `tudaletter.cls' version 1.01 (2019/08/05), +%% it is part of +%% TUDa-CI -- Corporate Design for TU Darmstadt +%% ---------------------------------------------------------------------------- +%% +%% Copyright (C) 2018--2019 by Marei Peischl +%% +%% ============================================================================ +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainers of this work are +%% Marei Peischl +%% Markus Lazanowski +%% +%% The development respository can be found at +%% https://github.com/tudace/tuda_latex_templates +%% Please use the issue tracker for feedback! +%% +%% ============================================================================ +%% +\def\fileversion{1.01} +\def\filedate{2019/08/05} +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\ProvidesExplPackage{tudaletter} + {\filedate}{\fileversion}{Letters for TUDa-CI, Corporate Design of TU Darmstadt} + +\RequirePackage{l3keys2e} + +\keys_define:nn {TUDaLetter} { + logo .bool_gset:N = \g_TUDaletter_logo_bool, + logo .default:n = true, + logo .initial:n = true, + premium .bool_gset:N = \g_TUDaletter_premium_bool, + premium .default:n = true, + accentcolor .code:n = \PassOptionsToPackage{accentcolor=#1}{tudacolors}, + firstpagenumber .bool_gset:N = \g_TUDa_firstpagenumber_bool, + firstpagenumber .initial:n = true, + raggedright .bool_gset:N = \g_TUDa_raggedright_bool, + pdfa .bool_gset:N = \g_TUDa@pdfa_bool, + pdfa .initial:n = true, + logofile .tl_gset:N = \g_TUDa_logofile_tl, + logofile .initial:n = tuda_logo, +} + + +\ProcessKeysOptions{TUDaLetter} + +\bool_if:NT \g_TUDa@pdfa_bool {\PassOptionsToPackage{RGB}{xcolor}} + + +\newcommand*{\@fontsizefilebase}{tudalettersize} + +\PassOptionsToClass{fontsize=10pt, refline=nodate, parskip=full-,addrfield=topaligned}{scrlttr2} +\LoadClass{scrlttr2} + +% Load the TUDa-colorscheme +\RequirePackage{tudacolors} + +\bool_if:NTF \g_TUDaletter_premium_bool +{ \def\TUDa@premiumcolor{accentcolor} + \def\TUDa@use@premiumcolor{\color{accentcolor}} + \def\TUDa@use@premiumcolor@text{\color{textaccentcolor}} +}{ + \def\TUDa@premiumcolor{black} + \let\TUDa@use@premiumcolor\relax + \let\TUDa@use@premiumcolor@text\relax +} + + + +\RequirePackage{tudafonts} +\RequirePackage{graphicx} +\RequirePackage{afterpage} +\RequirePackage{ragged2e} + + +%%%%%Briefbogen +%% Spacing: +\dim_const:Nn \c_TuDa_HeadMargin_dim {12.5mm} +\dim_const:Nn \c_TuDa_LeftMargin_dim {24.0mm} +\dim_const:Nn \c_TuDa_RightMargin_dim {\c_TuDa_HeadMargin_dim} +\dim_const:Nn \c_TuDa_BottomMargin_dim {\c_TuDa_LeftMargin_dim} +\dim_const:Nn \c_TuDa_Linewidth_dim {\paperwidth-\c_TuDa_LeftMargin_dim-\c_TuDa_RightMargin_dim} + +\RequirePackage[heightrounded]{geometry} + +\geometry{ + twoside=false, + left=\c_TuDa_LeftMargin_dim, + right=\c_TuDa_RightMargin_dim, + bottom=20mm, + footskip=3mm, +} + +\dim_const:Nn \c_TUDa_textwidth_dim {\textwidth} + +\bool_if:NTF \g_TUDaletter_logo_bool { + \geometry{top=64mm} +} { + \geometry{top=30mm} +} + +\@setplength{firstheadhpos}{\c_TuDa_HeadMargin_dim} +\@setplength{firstheadvpos}{\c_TuDa_HeadMargin_dim} +\@setplength{firstheadwidth}{\dim_eval:n {\paperwidth - 2\c_TuDa_HeadMargin_dim}} + +\@setplength{firstfootvpos}{\dim_eval:n {\paperheight -17mm}} +\@setplength{firstfoothpos}{\useplength{firstheadhpos}} +\@setplength{firstfootwidth}{\useplength{firstheadwidth}} + + +\@setplength{toaddrhpos}{\c_TuDa_LeftMargin_dim} +\@setplength{toaddrvpos}{50mm} +\@setplength{backaddrheight}{4mm} +\@setplength{toaddrindent}{0mm} + +\@setplength{refhpos}{\c_TuDa_LeftMargin_dim} +\@setplength{refvpos}{106mm} + +\@setplength{subjectaftervskip}{2\baselineskip} +\@setplength{lochpos}{\c_TuDa_HeadMargin_dim} +\@setplength{locvpos}{\dimexpr\useplength{refvpos}+\useplength{subjectaftervskip}+1.4\baselineskip\relax} +\@setplength{refaftervskip}{0pt} +\@setplength{subjectbeforevskip}{0pt} +\@setplength{locwidth}{\dimexpr\paperwidth-154,5mm -\c_TuDa_RightMargin_dim\relax} +\@setplength{locheight}{\dimexpr\paperheight-\useplength{locvpos}-\c_TuDa_BottomMargin_dim\relax} + + + +\dim_const:Nn \c_TuDa_firstpage_extraindent_dim {-\paperwidth+120mm +\c_TuDa_LeftMargin_dim +\c_TuDa_RightMargin_dim} + + +\RequirePackage[paper=a4]{tudarules} + + +\TUDa@makeheadrule[width=\useplength{firstheadwidth}, color=\TUDa@premiumcolor]{TuDa@LetterheadRule} +\TUDa@makefootrule[width=\useplength{firstheadwidth}]{TuDa@LetterfootRule} + + +\box_new:N \g_TUDaLetter_firsthead_box +\hbox_gset:Nn \g_TUDaLetter_firsthead_box { + \parbox{\useplength{firstheadwidth}}{ + \raggedleft + \TuDa@LetterheadRule\par + \vspace{.5\c_TUDa_logoheight_dim} + \makebox[2.2\c_TUDa_logoheight_dim][l]{\includegraphics[height=\c_TUDa_logoheight_dim]{\g_TUDa_logofile_tl}} + } +} + +\setkomavar{firsthead}{ + \box_use:N \g_TUDaLetter_firsthead_box +} + +\KOMAoptions{backaddress=plain} +\setkomavar{backaddressseparator}{\,$\vert$\,} + +%DOKU neue komavars +\newkomavar{frominstitution} +\newkomavar{frominstitution-en} + +\newkomafont{TUDa_location}{\accentfont\normalcolor} +\setkomafont{fromname}{\small} +\newkomafont{TUDa_frominst}{\small\TUDa@use@premiumcolor@text} +\setkomafont{fromaddress}{\footnotesize} + +\setkomafont{refname}{} +\setkomafont{refvalue}{} + + +\newcommand{\TUD@locfield}{% + \usekomafont{TUDa_location}\usekomafont{fromaddress} + \setparsizes{\z@}{\z@}{\z@ plus 1fil} + \par@updaterelative + \begingroup + \usekomafont{TUDa_frominst} + \ifkomavarempty{frominstitution}{}{% + {\usekomavar[\raggedright]{frominstitution}} + \\[\baselineskip]}% + \ifkomavarempty{frominstitution-en}{}{% + \usekomavar[\raggedright]{frominstitution-en} + \\[\baselineskip]}% + \endgroup + \ifkomavarempty{fromlogo}{}{\usekomavar{fromlogo}\\[\baselineskip]}% + \ifkomavarempty{fromname}{} + {{\usekomafont{fromname}\usekomavar{fromname}} + \ifkomavarempty{fromfunction}{}{\\\usekomavar{fromfunction}} + \\[\baselineskip]}% + \ifkomavarempty{fromaddress}{}{\usekomavar{fromaddress}\\[\baselineskip]}% + \@tempswafalse + \clist_map_inline:nn {fromphone, fromfax, fromemail, fromurl}{ + \@tempswatrue + \ifkomavarempty{##1}{}{ + \ifkomavarempty*{##1}{}{\makebox[1cm][l]{\usekomavar*{##1}}}\usekomavar{##1}\par + } + } + \if@tempswa + \vspace{2\baselineskip} + \fi + \ifkomavarempty*{date}{}{\usekomavar*{date}\\\usekomavar{date}} + \seq_use:Nn \g_TUDa_reffields_seq {} + \ifkomavarempty{frombank}{}{\vfill% + \ifkomavarempty*{frombank}{Bankverbindung}{\usekomavar*{frombank}}\\\usekomavar{frombank} + } +} + +\setkomavar{location}{\parbox[t][.45\paperheight][t]{\useplength{locwidth}}{\TUD@locfield}} + +\tl_const:Nn \TUDa@reffield_separator_tl {\\} + +\cs_new:Nn \TUDa@set@reffield:n { + \ifkomavarempty{#1}{}{% + \if@tempswa\\[\baselineskip]\fi + \parbox[t]{\linewidth}{\noindent\raggedright + \usekomafont{refname} + \usekomavar*{#1}\TUDa@reffield_separator_tl + \usekomafont{refvalue} + \usekomavar{#1} + }% + \@tempswatrue + }% +} + + + +\seq_new:N \g_TUDa_reffields_seq +\newlength{\TUD@page@free} +\newcounter{TUD@page@free@lines} + +\renewcommand{\opening}[1]{% + \widowpenalty=100 + \@PapersizeWarning + \seq_gclear:N \g_TUDa_reffields_seq + \renewcommand*{\@set@reffield}[1]{ + \typeout{Field: ##1}% + \str_if_eq:nnT {##1}{datemarkerfield}{% + \let\scr@datemarkerfield@var=\scr@date@var + \let\scr@datemarkerfield@name=\scr@date@name + \setkomavar{date}{}% + } + \ifkomavarempty{##1}{}{% + \seq_gput_right:Nn \g_TUDa_reffields_seq {% + \TUDa@set@reffield:n {##1} + }% + }% + } + \let\do@set@reffield\@set@reffield + \@set@reffields + \removereffields + \@gen@firsthead + \@mkboth{\scr@fromname@var}{\scr@subject@var}% + \thispagestyle{empty}\noindent + \ifkomavarempty{toname}{\setkomavar{toname}{\mbox{}}}{} + \@foldmarks\@firstheadfootfield\@addrfield\@locfield + \ifdim\useplength{subjectvpos}=\z@\else\@subjfield\fi + \@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 + \setcounter{equation}{0}% + \@afterheading% + \@nobreaktrue + \@afterindentfalse + \everypar{% + \if@nobreak + \@nobreakfalse\clubpenalty\@M + \if@afterindent + \else{\setbox\z@\lastbox} + \fi + \else + \clubpenalty \@clubpenalty + \fi + %TODO: ifdum < 2 \baselineskip + \ifnum\thepage=1% + \TUD@page@free=-\pagegoal% + \advance\TUD@page@free\pagetotal% + \dim_compare:nTF {-\TUD@page@free>2\baselineskip} + { + \bool_if:NF \g_TUDaletter_logo_bool { + \advance\TUD@page@free-.3\baselineskip + } + \divide\TUD@page@free\baselineskip% + \c@TUD@page@free@lines=\TUD@page@free% + \int_compare:nT {\value{TUD@page@free@lines}<0} { + \hangafter=\value{TUD@page@free@lines}\hangindent=\c_TuDa_firstpage_extraindent_dim% + } + } { + \dim_compare:nT {-\TUD@page@free>\baselineskip} { + \hangafter=-2\hangindent=\c_TuDa_firstpage_extraindent_dim% + } + } + \fi% + }% + \global\setlength{\linewidth}{\dim_eval:n {\c_TuDa_Linewidth_dim + \c_TuDa_firstpage_extraindent_dim}} + \afterpage{ + \global\setlength{\linewidth}{\c_TuDa_Linewidth_dim} + \widowpenalty=10000 + } +} + +\AtBeginDocument{% + \raggedbottom% +} + +\setkomafont{backaddress}{\accentfont\tiny\TUDa@use@premiumcolor@text\raisebox{\dimexpr-\totalheight+\ht\strutbox\relax}{\rule{\z@}{4mm}}} +\setkomafont{pagenumber}{\tiny} + +\raggedbottom + +\int_new:N \l_TUDa_letter_lastpage_int +\newcommand*{\TUDa@letterpagemark}{ + %get lastpage for this letter if not already done + \int_compare:nTF {\value{page} = 1} { + \bool_if:NTF \g_TUDa_firstpagenumber_bool + {\bool_set_true:N \l_tmpa_bool} + {\bool_set_false:N \l_tmpa_bool} + } + {\bool_set_true:N \l_tmpa_bool} + \bool_if:NT \l_tmpa_bool { + \int_if_exist:cF {c_TUDa_letter\thisletter _lastpage_int} { + \expandafter\ifx\csname r@\thisletter.lastpage\endcsname\relax + %warning -> rerun latex + \int_const:cn {c_TUDa_letter\thisletter _lastpage_int} {0} + \else + \int_const:cn {c_TUDa_letter\thisletter _lastpage_int} { + \cs_if_exist:NTF \hypersetup + {\exp_args:NNc \expandafter \@secondoffive { r@\thisletter.lastpage}} + {\exp_args:NNc \expandafter \use_ii:nn { r@\thisletter.lastpage}} + } + \fi + } + \usekomafont{pagenumber}\pagename\nobreakspace\thepage + \int_compare:nT { + \int_use:c {c_TUDa_letter\thisletter _lastpage_int} + > 1 + } {/\int_to_arabic:n{\int_use:c {c_TUDa_letter\thisletter _lastpage_int}}} + } +} + +\setkomavar{nextfoot}{ + \parbox{\useplength{firstfootwidth}}{\usekomafont{pagefoot} + \raggedleft\TuDa@LetterfootRule\par\TUDa@letterpagemark} +} + +\setkomavar{firstfoot}{ + \usekomavar{nextfoot} +} + +%pagestyle +\RequirePackage{scrlayer} + +\bool_if:NTF \g_TUDaletter_logo_bool { + \DeclareNewLayer[ + background, + align=tl, + hoffset=\useplength{firstheadhpos}, + voffset=\useplength{firstheadvpos}, + width=\box_wd:N \g_TUDaLetter_firsthead_box, + height=\box_ht:N \g_TUDaLetter_firsthead_box, + contents={\box_use:N \g_TUDaLetter_firsthead_box} + ]{letter.head} +}{ + \DeclareNewLayer[ + background, + align=tl, + hoffset=\useplength{firstheadhpos}, + voffset=\useplength{firstheadvpos}, + %TODO: replace leiste logo=? + width=\box_wd:N \TuDa@LetterheadRule_box, + height=\box_ht:N \TuDa@LetterheadRule_box, + contents=\TuDa@LetterheadRule + ]{letter.head} +} + +\DeclareNewLayer[ + background, + align=tl, + hoffset=\useplength{firstfoothpos}, + voffset=\useplength{firstfootvpos}, + width=\useplength{firstfootwidth}, + height=\baselineskip, + contents={\raisebox{\ht\strutbox}{\parbox[t]{\layerwidth}{\usekomavar{nextfoot}}}} +]{letter.foot} + +\RequirePackage{tikz} +\DeclareNewPageStyleByLayers{TUDaletter}{ + letter.head, letter.foot.rule, letter.foot +} + +\DeclarePageStyleAlias{letter}{TUDaletter} +\DeclarePageStyleAlias{plain.letter}{TUDaletter} + +\pagestyle{plain.letter} + +%pdfa +\if_bool:N \g_TUDa@pdfa_bool +\PassOptionsToPackage{a-1b}{pdfx} +\RequirePackage{pdfx} +%%hyperref +\hypersetup{hidelinks, unicode} +\iow_new:N \TUDa@xmpdata_stream +\tl_new:N \g_TUDa@xmp_title +\tl_new:N \g_TUDa@xmp_author + +\cs_new:Nn \TUDa_pass_TitleData: { + \prop_if_empty:NF \g_TUDa_MetaData_prop { + \iow_open:Nn \TUDa@xmpdata_stream {\jobname.xmpdata} + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \cs_set:Npn \and {\exp_not:N \sep} + \use:c {pdfx@localcommands} + \prop_map_function:NN \g_TUDa_MetaData_prop \TUDa_write_xmp_line:nn + \endgroup + \iow_close:N \TUDa@xmpdata_stream + } +} +\cs_new:Nn \TUDa_write_xmp_line:nn { + \cs_if_exist:cTF {\tl_mixed_case:n {#1}} { + \iow_now:Nx \TUDa@xmpdata_stream { + \c_backslash_str \tl_mixed_case:n {#1} {#2}\iow_newline: + } + }{ + \msg_error:nnn {TUDapub} {unknown-metadata} {#1} + } +} + +\bool_new:N \g_TUDa_pass_TitleData_bool +\bool_gset_true:N \g_TUDa_pass_TitleData_bool +\prop_new:N \g_TUDa_MetaData_prop + +\newcommand*{\Metadata}[1]{ + \bool_gset_false:N \g_TUDa_pass_TitleData_bool + \prop_gset_from_keyval:Nn \g_TUDa_MetaData_prop {#1} +} + +\msg_new:nnnn {TUDapub} {unknown-metadata} { + You~ used~ the~ #1~ metadata~ entry.\\ + I~ don't~ know~ how~ to~ handle~ that.\\ + It~ will~ be~ ignored. +} {See~ TUDa-CI~ or~ pdfx~ documentation~ for~ details.} +\fi: + + +%Widows and clubs +\widowpenalty=10000 +\clubpenalty=10000 + +%default values +\setkomavar*{fromemail}{} +\setkomavar*{fromurl}{} +\setkomavar{backaddress}{Technische~ Universität~ Darmstadt\\Karolinenplatz~ 5\\64289~ Darmstadt} + +%renewcaptions +\defcaptionname{german,ngerman,austrian,naustrian,% + swissgerman,nswissgerman}\yourmailname{Ihre~ Nachricht}% +\defcaptionname{german, ngerman,austrian,naustrian,% + swissgerman,nswissgerman}\phonename{Tel.}% + + +%signature raggedright +\let\raggedsignature\raggedright + +\newkomavar{fromfunction} + +\bool_if:NT \g_TUDa_raggedright_bool {\AtBeginLetter{\RaggedRight}} + +\endinput -- cgit v1.2.3