From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
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 <marei@peitex.de>
+%%
+%% ============================================================================
+%% 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 <tuda-ci@peitex.de>
+%%   Markus Lazanowski <latex@ce.tu-darmstadt.de>
+%%
+%% 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

