diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls | 988 |
1 files changed, 487 insertions, 501 deletions
diff --git a/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls b/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls index 9eb3a15953a..73f6a022df8 100644 --- a/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls +++ b/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls @@ -1,10 +1,23 @@ -%% This is file `tudaletter.cls' version 3.41 (2024-07-02), +%% +%% This is file `tudaletter.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tudaletter.dtx (with options: `class,initialization') +%% tuda-ci.dtx (with options: `options,letter,print,process-options,pdfa') +%% tudaletter.dtx (with options: `class,packages') +%% tuda-ci.dtx (with options: `pdfx') +%% tudaletter.dtx (with options: `class,body') +%% tuda-ci.dtx (with options: `xmpdata') +%% %% it is part of %% TUDa-CI -- Corporate Design for TU Darmstadt +%% %% ---------------------------------------------------------------------------- -%% -%% Copyright (C) 2018--2024 by Marei Peischl <marei@peitex.de> -%% +%% +%% Copyright (C) 2018--2025 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.3c @@ -13,201 +26,230 @@ %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX %% version 2008/05/04 or later. -%% +%% %% This work has the LPPL maintenance status `maintained'. -%% -%% The Current Maintainers of this work are +%% +%% The Current Maintainer of this work is %% Marei Peischl <tuda-ci@peitex.de> -%% -%% The development respository can be found at +%% +%% The development repository can be found at %% https://github.com/tudace/tuda_latex_templates %% Please use the issue tracker for feedback! -%% +%% %% ============================================================================ -%% -\def\fileversion{3.41} -\def\filedate{2024-07-02} -\NeedsTeXFormat{LaTeX2e} - -\ProvidesExplClass{tudaletter} - {\filedate}{\fileversion}{Letters for TUDa-CI, Corporate Design of TU Darmstadt} - +%% +\NeedsTeXFormat{LaTeX2e}[2020/10/01] +\ProvidesExplClass{tudaletter}{2025-01-26}{4.00}{Letters for TUDa-CI, Corporate Design of TU Darmstadt} \str_const:Nn \c__ptxcd_base_str {letter} \str_new:N \g_ptxcd_department_str \bool_new:N \g__ptxcd_adjust_textwidth_bool - \keys_define:nn {ptxcd/letter} { - logo .bool_gset:N = \g__ptxcd_letter_logo_bool, - logo .default:n = true, - logo .initial:n = true, - premium .bool_gset:N = \g__ptxcd_letter_premium_bool, - premium .default:n = true, - accentcolor .code:n = \PassOptionsToPackage{accentcolor=#1}{tudacolors}, - firstpagenumber .bool_gset:N = \g__ptxcd_firstpagenumber_bool, - firstpagenumber .initial:n = true, - raggedright .bool_gset:N = \g__ptxcd_letter_raggedright_bool, - pdfa .bool_gset:N = \g_ptxcd_pdfa_bool, - pdfa .initial:n = true, - pdfx .bool_gset:N = \g_ptxcd_pdfx_bool, - pdfx .initial:n = true, - logofile .tl_gset:N = \g_ptxcd_logofile_tl, - logofile .initial:n = tuda_logo, - department .choice:, - department / default .code:n = \str_gset:Nn \g_ptxcd_department_str {default}, - department / mecheng .code:n = { - \str_gset:Nn \g_ptxcd_department_str {mecheng} - \keys_set:nn {ptxcd/letter}{departmentlogofile=tuda_maschinenbau_logo,headrule=false,logo=false,textwidth=narrow} - \PassOptionsToPackage{identbar=Primary1,accent=Primary2}{tudacolors} - }, - department .initial:n = default, - department / unknown .code:n = { - \str_gset:Nx \g_ptxcd_department_str {\l_keys_value_tl} - }, - departmentconfigprefix .tl_gset:N = \g__ptxcd_config_prefix_tl, - departmentconfigprefix .initial:n = tuda, - mecheng .meta:n = {department=mecheng}, - departmentlogofile .tl_gset:N = \g_ptxcd_departmentlogo_tl, - departmentlogofile .initial:n =, - headrule .bool_gset:N = \g__ptxcd_letter_headrule_bool, - headrule .initial:n = true, - headrule .default:n = true, - textwidth .choice:, - textwidth / wide .code:n = \bool_gset_true:N \g__ptxcd_adjust_textwidth_bool, - textwidth / narrow .code:n = \bool_gset_false:N \g__ptxcd_adjust_textwidth_bool, - textwidth .initial:n = wide, + logo .bool_gset:N = \g__ptxcd_letter_logo_bool, + logo .default:n = true, + logo .initial:n = true, + premium .bool_gset:N = \g__ptxcd_letter_premium_bool, + premium .default:n = true, + firstpagenumber .bool_gset:N = \g__ptxcd_firstpagenumber_bool, + firstpagenumber .initial:n = true, + raggedright .bool_gset:N = \g__ptxcd_letter_raggedright_bool, + headrule .bool_gset:N = \g__ptxcd_letter_headrule_bool, + headrule .initial:n = true, + headrule .default:n = true, + textwidth .choice:, + textwidth / wide .code:n = \bool_gset_true:N \g__ptxcd_adjust_textwidth_bool, + textwidth / narrow .code:n = \bool_gset_false:N \g__ptxcd_adjust_textwidth_bool, + textwidth .initial:n = wide, + logofile .tl_gset:N = \g_ptxcd_logofile_tl, + logofile .initial:n = tuda_logo, + accept-missing-logos .bool_gset:N = \g_ptxcd_logo_workaround_bool, + accept-missing-logos .initial:n = false, + accept-missing-logos .usage:n = load, + accept-missing-logos .default:n = true, + department .choice:, + department / default .code:n = \str_gset:Nn \g_ptxcd_department_str {default}, + department / mecheng .code:n = { + \str_gset:Nn \g_ptxcd_department_str {mecheng} + \exp_args:Ne \keys_set:ne { + + ptxcd / \c__ptxcd_base_str + }{ + departmentlogofile=tuda_maschinenbau_logo, + headrule=false, + logo=false, + textwidth=narrow, + } + \PassOptionsToPackage{identbar=Primary1,accent=Primary2}{tudacolors} + }, + + department .initial:n = default, + department / unknown .code:n = { + \str_gset:Nx \g_ptxcd_department_str {\l_keys_value_tl} + }, + departmentconfigprefix .tl_gset:N = \g__ptxcd_config_prefix_tl, + departmentconfigprefix .initial:n = tuda, + departmentlogofile .tl_gset:N = \g_ptxcd_departmentlogo_tl, + departmentlogofile .initial:n =, + mecheng .meta:n = {department=mecheng}, + pdfa .bool_gset:N = \g_ptxcd_pdfa_bool, + pdfa .initial:n = + true, + pdfx .bool_gset:N = \g_ptxcd_pdfx_bool, + pdfx .initial:n = true, +%% color options +%% color options + color .meta:n = {accentcolor=#1}, + accentcolor .code:n = {\PassOptionsToPackage{accentcolor=#1}{tudacolors}}, + textaccentcolor .code:n = {\PassOptionsToPackage{textaccentcolor=#1}{tudacolors}}, + identbarcolor .code:n = {\PassOptionsToPackage{identbarcolor=#1}{tudacolors}}, +} +\cs_if_exist:NT \TUDaDefaultBuildOptions { + \exp_args:Ne \keys_set:ne { ptxcd / + \c__ptxcd_base_str + } { + \TUDaDefaultBuildOptions + } +} +\cs_new:Nn \__ptxcd_insert_logo: { + \bool_if:NTF \g_ptxcd_logo_workaround_bool { + \file_if_exist:nTF {\g_ptxcd_logofile_tl.pdf} + \use_ii:nn + \use_i:nn + } { + \use_ii:nn + } + {\rule{0pt}{\c_ptxcd_logoheight_dim}\makebox[2.5\c_ptxcd_logoheight_dim][c]{\rule[.1\c_ptxcd_logoheight_dim]{2.05\c_ptxcd_logoheight_dim}{.8\c_ptxcd_logoheight_dim}}} + {\includegraphics[height=\c_ptxcd_logoheight_dim]{\g_ptxcd_logofile_tl}} } - -\ProcessKeyOptions[ptxcd/letter] +\ProcessKeyOptions[ptxcd/\c__ptxcd_base_str] \bool_if:NF \g_ptxcd_pdfa_bool {\bool_gset_false:N \g_ptxcd_pdfx_bool} \bool_if:NT \g_ptxcd_pdfa_bool { - \msg_new:nnn {tudapub} {colors-to-rgb} { - You~did~not~add~a~color~profile.\\ - I~will~use~the~default~one~and~automatically~try~to~convert~internal~colors~to~RGB.\\ - This~is~required~to~be~able~to~create~PDF/A~compliance. - } - - \cs_if_exist:NT \pdfmeta_standard_get:nN { - \pdfmeta_standard_get:nN {outputintent_A} \l_tmpa_tl - \quark_if_no_value:NF \l_tmpa_tl { - \bool_gset_false:N \g_ptxcd_pdfx_bool - \msg_new:nnn{tudapub} {prefer-lualatex} { - I~detected~usage~of~l3pdfmeta~(\DocumentMetadata)~to~create~PDF/A.\\ - tudapub~will~not~load~pdfx~to~avoid~conflicts.\\ - To~disable this message use pdfx=false. - } - \msg_info:nn {tudapub} {prefer-lualatex} - } - - \prop_if_in:NnF \g__pdfmeta_outputintents_prop {GTS_PDFA1} { - \PassOptionsToPackage{RGB}{xcolor} - \msg_info:nn {tudapub} {colors-to-rgb} - } - } -} - -\bool_if:NT \g_ptxcd_pdfx_bool { - \PassOptionsToPackage{RGB}{xcolor} - \msg_info:nn {tudapub} {colors-to-rgb} + \msg_new:nnn {tudapub} {colors-to-rgb} { + You~did~not~add~a~color~profile.\\ + I~will~use~the~default~one~and~automatically~try~to~convert~internal~colors~to~RGB.\\ + This~is~required~to~be~able~to~create~PDF/A~compliance. + } + + \cs_if_exist:NT \pdfmeta_standard_get:nN { + \pdfmeta_standard_get:nN {outputintent_A} \l_tmpa_tl + \quark_if_no_value:NF \l_tmpa_tl { + \bool_gset_false:N \g_ptxcd_pdfx_bool + \msg_new:nnn{tudapub} {prefer-lualatex} { + I~detected~usage~of~l3pdfmeta~(\DocumentMetadata)~to~create~PDF/A.\\ + tudapub~will~not~load~pdfx~to~avoid~conflicts.\\ + To~disable~this~message~use~pdfx=false. + } + \msg_info:nn {tudapub} {prefer-lualatex} + } + \prop_if_in:NnF \g__pdfmeta_outputintents_prop {GTS_PDFA1} { + \use_iii:nnn + } + } + \bool_if:NT \g_ptxcd_pdfx_bool { + \PassOptionsToPackage{RGB}{xcolor} + \msg_info:nn {tudapub} {colors-to-rgb} + } } \newcommand*{\@fontsizefilebase}{tudalettersize} - \PassOptionsToClass{fontsize=10pt,parskip=full-}{scrletter} \PassOptionsToPackage{refline=nodate,addrfield=topaligned,firstfoot=false,pagenumber=botright}{scrletter} \LoadClass{scrletter} - -% Load the TUDa-colorscheme \RequirePackage{tudacolors} \RequirePackage{tudafonts} \RequirePackage{graphicx} \RequirePackage{afterpage} \RequirePackage{ragged2e} - - -\bool_if:NTF \g__ptxcd_letter_premium_bool -{ \cs_new:Nn \ptxcd_premiumcolor: {accentcolor} - \cs_new:Nn \ptxcd_use_premiumcolor: {\color{accentcolor}} - \cs_set:Nn \ptxcd_use_premiumcolor_text: {\color{textaccentcolor}} +\bool_if:NTF \g__ptxcd_letter_premium_bool { + \cs_new:Nn \ptxcd_premiumcolor: {accentcolor} + \cs_new:Nn \ptxcd_use_premiumcolor: {\color{accentcolor}} + \cs_set:Nn \ptxcd_use_premiumcolor_text: {\color{textaccentcolor}} }{ - \cs_new:Nn \ptxcd_premiumcolor: {black} - \let\ptxcd_use_premiumcolor:\relax - \let\ptxcd_use_premiumcolor_text:\relax + \cs_new:Nn \ptxcd_premiumcolor: {black} + \let\ptxcd_use_premiumcolor:\relax + \let\ptxcd_use_premiumcolor_text:\relax } - - - -%%%%%Briefbogen -%% Spacing: \dim_const:Nn \c_ptxcd_HeadMargin_dim {12.5mm} \dim_const:Nn \c_ptxcd_LeftMargin_dim {24.0mm} \dim_const:Nn \c__ptxcd_firstpage_extraindent_dim {-\paperwidth+120mm +\c_ptxcd_LeftMargin_dim +\c_ptxcd_HeadMargin_dim} \bool_if:NTF \g__ptxcd_adjust_textwidth_bool - { - \dim_const:Nn \c_ptxcd_RightMargin_dim {\c_ptxcd_HeadMargin_dim} - - }{ - \dim_const:Nn \c_ptxcd_RightMargin_dim {\c_ptxcd_HeadMargin_dim-\c__ptxcd_firstpage_extraindent_dim} - } + { + \dim_const:Nn \c_ptxcd_RightMargin_dim {\c_ptxcd_HeadMargin_dim} + }{ + \dim_const:Nn \c_ptxcd_RightMargin_dim {\c_ptxcd_HeadMargin_dim-\c__ptxcd_firstpage_extraindent_dim} + } \dim_const:Nn \c_ptxcd_BottomMargin_dim {20mm} \dim_const:Nn \c_ptxcd_Linewidth_dim {\paperwidth-\c_ptxcd_LeftMargin_dim-\c_ptxcd_RightMargin_dim} - \RequirePackage{geometry} - \geometry{ - twoside=false, - left=\c_ptxcd_LeftMargin_dim, - right=\c_ptxcd_RightMargin_dim, - bottom=\c_ptxcd_BottomMargin_dim, - footskip=7mm, + twoside=false, + left=\c_ptxcd_LeftMargin_dim, + right=\c_ptxcd_RightMargin_dim, + bottom=\c_ptxcd_BottomMargin_dim, + footskip=7mm, } - \dim_const:Nn \c_ptxcd_textwidth_dim {\textwidth} - \bool_if:NTF \g__ptxcd_letter_logo_bool { - \geometry{top=64mm} + \geometry{top=64mm} } { - \geometry{top=30mm} + \geometry{top=30mm} } +\PassOptionsToPackage{hidelinks, unicode}{hyperref} +\bool_if:NTF \g_ptxcd_pdfx_bool { +%% only apply the hack if pdfx is older than the working version + \PassOptionsToPackage{a-2b}{pdfx} +%% Workaround posted by David Carlisle on tex.stackexchange +%% Thanks to Ulrike Fischer for mentioning it in #472 + \let \__ptxcd_grouplevel_before_pdfx: \currentgrouplevel + \chardef\currentgrouplevel0 + \ExplSyntaxOff + \RequirePackage{pdfx} + \ExplSyntaxOn + \let \currentgrouplevel \__ptxcd_grouplevel_before_pdfx: + \cs_undefine:N \__ptxcd_grouplevel_before_pdfx: +%% end of the workaround + + \msg_new:nnn{tuda-ci} {prefer-lualatex} { + You~use~pdfa-mode~in~#1.\\ + This~can~lead~to~incompatiblities~especially~with~older~compiler~versions.\\ + You~should~prefer~using~lualatex. + } + \msg_new:nnnn{tuda-ci} {outdated-package-pdfa} { + Your~Version~of~the~#1-package~is~too~old~to~support~all~methods~required~by~tudapubs~pdfa-mode.\\ + Either~update~your~TeX-distribution~or~switch~to~pdfa=false. + }{See~DEMO-tudapub~for~further~information.} + + \sys_if_engine_pdftex:T { + \msg_warning:nnn{tuda-ci} {prefer-lualatex} {PDFTeX} + } + + \sys_if_engine_xetex:T { + \msg_warning:nnn{tuda-ci} {prefer-lualatex} {XeTeX} + } + + \@ifpackagelater{xmpincl}{2021/09/22}{ + }{ + \msg_error:nn{tuda-ci} {outdated-package-pdfa} {xmpincl} + } -\if_bool:N \g_ptxcd_pdfx_bool - \PassOptionsToPackage{a-2b}{pdfx} -% Workaround posted by David Carlisle on tex.stackexchange -% Thanks to Ulrike Fischer for mentioning it in #472 - \let \__ptxcd_grouplevel_before_pdfx: \currentgrouplevel - \chardef\currentgrouplevel0 - \ExplSyntaxOff - \RequirePackage{pdfx} - \ExplSyntaxOn - \let \currentgrouplevel \__ptxcd_grouplevel_before_pdfx: - \cs_undefine:N \__ptxcd_grouplevel_before_pdfx: -% end of the workaround -\else: - \PassOptionsToPackage{hidelinks, unicode}{hyperref} - \RequirePackage{hyperref} -\fi: - +} { + \RequirePackage{hyperref} +} \RequirePackage[paper=a4]{tudarules}% might load pgfcore, so it has to be loaded after pdfx - \setplength{firstheadhpos}{\c_ptxcd_HeadMargin_dim} \setplength{firstheadvpos}{\c_ptxcd_HeadMargin_dim} \setplength{firstheadwidth}{\dim_eval:n {\paperwidth - 2\c_ptxcd_HeadMargin_dim}} - \setplength{firstfootvpos}{\dim_eval:n {\paperheight -17mm}} \setplength{firstfoothpos}{\useplength{firstheadhpos}} \setplength{firstfootwidth}{\useplength{firstheadwidth}} - - \setplength{toaddrhpos}{\c_ptxcd_LeftMargin_dim} \setplength{toaddrvpos}{50mm} \setplength{backaddrheight}{4mm} \setplength{toaddrindent}{0mm} - \setplength{refhpos}{\c_ptxcd_LeftMargin_dim} \setplength{refvpos}{106mm} - \setplength{subjectaftervskip}{2\baselineskip} \setplength{lochpos}{\c_ptxcd_HeadMargin_dim} \setplength{locvpos}{\dimexpr\useplength{refvpos}+\useplength{subjectaftervskip}+1.4\baselineskip\relax} @@ -215,428 +257,372 @@ \setplength{subjectbeforevskip}{0pt} \setplength{locwidth}{\dimexpr\paperwidth-154,5mm -\c_ptxcd_HeadMargin_dim\relax} \setplength{locheight}{\dimexpr\paperheight-\useplength{locvpos}-\c_ptxcd_BottomMargin_dim\relax} - - \bool_if:NTF \g__ptxcd_letter_headrule_bool { - \ptxcd_makeheadrule[width=\useplength{firstheadwidth},color=identbarcolor]{ptxcd_LetterheadRule} + \ptxcd_makeheadrule[width=\useplength{firstheadwidth},color=identbarcolor]{ptxcd_LetterheadRule} } { - \box_new:N \ptxcd_LetterheadRule_box - \def\ptxcd_LetterheadRule{} + \box_new:N \ptxcd_LetterheadRule_box + \def\ptxcd_LetterheadRule{} } \ptxcd_makefootrule[width=\useplength{firstheadwidth}]{ptxcd_LetterfootRule} - - \box_new:N \g_TUDaLetter_firsthead_box \hbox_gset:Nn \g_TUDaLetter_firsthead_box { - \parbox[t]{\useplength{firstheadwidth}}{ - \raggedleft - \smash{\ptxcd_LetterheadRule} - \par - \vspace{.5\c_ptxcd_logoheight_dim} - \makebox[\__ptxcd_logowidth:][l]{\includegraphics[height=\c_ptxcd_logoheight_dim]{\g_ptxcd_logofile_tl}} - } + \parbox[t]{\useplength{firstheadwidth}}{ + \raggedleft + \smash{\ptxcd_LetterheadRule} + \par + \vspace{.5\c_ptxcd_logoheight_dim} + \makebox[\__ptxcd_logowidth:][l]{\__ptxcd_insert_logo:} + } } - \box_gset_dp:Nn \g_TUDaLetter_firsthead_box {\c_zero_dim} \setkomavar{firsthead}{ - \box_use:N \g_TUDaLetter_firsthead_box + \box_use:N \g_TUDaLetter_firsthead_box } - \KOMAoptions{backaddress=plain} \setkomavar{backaddressseparator}{\,$\vert$\,} - -%DOKU neue komavars \newkomavar{frominstitution} \newkomavar{frominstitution-en} - \newkomafont{ptxcd_location}{\accentfont\normalcolor} \setkomafont{fromname}{\small} \newkomafont{ptxcd_frominst}{\small\ptxcd_use_premiumcolor_text: } \setkomafont{fromaddress}{\footnotesize} - \setkomafont{refname}{} \setkomafont{refvalue}{} - \setkomafont{pageheadfoot}{\footnotesize} - \newcommand{\TUD@locfield}{% - \usekomafont{ptxcd_location}\usekomafont{fromaddress} - \setparsizes{\z@}{\z@}{\z@ plus 1fil} - \par@updaterelative - \begingroup - \int_compare:nT {0 < \@pageat <3} { - \ptxcd_letterpagemark:\\[\baselineskip] - } - \usekomafont{ptxcd_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__ptxcd_reffields_seq {} - \Ifkomavarempty{frombank}{}{\vfill% - \Ifkomavarempty*{frombank}{Bankverbindung}{\usekomavar*{frombank}}\\\usekomavar{frombank} - } + \usekomafont{ptxcd_location}\usekomafont{fromaddress} + \setparsizes{\z@}{\z@}{\z@ plus 1fil} + \par@updaterelative + \begingroup + \int_compare:nT {0 < \@pageat <3} { + \ptxcd_letterpagemark:\\[\baselineskip] + } + \usekomafont{ptxcd_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__ptxcd_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 \ptxcd_reffield_separator_tl {\\} - \cs_new:Nn \ptxcd_set_reffield:n { - \Ifkomavarempty{#1}{}{% - \if@tempswa\\[\baselineskip]\fi - \parbox[t]{\linewidth}{\noindent\raggedright - \usekomafont{refname} - \usekomavar*{#1}\ptxcd_reffield_separator_tl - \usekomafont{refvalue} - \usekomavar{#1} - }% - \@tempswatrue - }% + \Ifkomavarempty{#1}{}{% + \if@tempswa\\[\baselineskip]\fi + \parbox[t]{\linewidth}{\noindent\raggedright + \usekomafont{refname} + \usekomavar*{#1}\ptxcd_reffield_separator_tl + \usekomafont{refvalue} + \usekomavar{#1} + }% + \@tempswatrue + }% } - - - \seq_new:N \g__ptxcd_reffields_seq \newlength{\TUD@page@free} \newcounter{TUD@page@free@lines} \dim_new:N \g__ptxcd_page_free_dim \int_new:N \g__ptxcd_free_lines_int - \renewcommand{\opening}[1]{% - \widowpenalty=100 - \@PapersizeWarning - \seq_gclear:N \g__ptxcd_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__ptxcd_reffields_seq {% - \ptxcd_set_reffield:n {##1} - }% - }% - } - \let\do@set@reffield\@set@reffield - \@set@reffields - \removereffields - \@gen@firsthead - \@mkboth{\scr@fromname@var}{\scr@subject@var}% - \thispagestyle{letter.first}\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 - \bool_if:NT \g__ptxcd_adjust_textwidth_bool { - \everypar{% - \if@nobreak - \@nobreakfalse\clubpenalty\@M - \if@afterindent - \else{\setbox\z@\lastbox} - \fi - \else - \clubpenalty\@clubpenalty - \fi - \ifnum\thepage=1% - \dim_gset:Nn \g__ptxcd_page_free_dim {-\pagegoal + \pagetotal} - \dim_compare:nTF {-\g__ptxcd_page_free_dim>2\baselineskip} - { - \int_gset:Nn \g__ptxcd_free_lines_int {\fp_eval:n {ceil(\g__ptxcd_page_free_dim/\baselineskip)}} - \int_compare:nT {\g__ptxcd_free_lines_int<0} { - \hangafter=\g__ptxcd_free_lines_int\hangindent=\c__ptxcd_firstpage_extraindent_dim% - } - } { - \dim_compare:nT {-\TUD@page@free>\baselineskip} { - \hangafter=-2\hangindent=\c__ptxcd_firstpage_extraindent_dim% - } - } - \fi% - }% - \global\setlength{\linewidth}{\dim_eval:n {\c_ptxcd_Linewidth_dim + \c__ptxcd_firstpage_extraindent_dim}} - \afterpage{ - \global\setlength{\linewidth}{\c_ptxcd_Linewidth_dim} - \widowpenalty=10000 - } - } + \widowpenalty=100 + \@PapersizeWarning + \seq_gclear:N \g__ptxcd_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__ptxcd_reffields_seq {% + \ptxcd_set_reffield:n {##1} + }% + }% + } + \let\do@set@reffield\@set@reffield + \@set@reffields + \removereffields + \@gen@firsthead + \@mkboth{\scr@fromname@var}{\scr@subject@var}% + \thispagestyle{letter.first}\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 + \bool_if:NT \g__ptxcd_adjust_textwidth_bool { + \everypar{% + \if@nobreak + \@nobreakfalse\clubpenalty\@M + \if@afterindent + \else{\setbox\z@\lastbox} + \fi + \else + \clubpenalty\@clubpenalty + \fi + \ifnum\thepage=1% + \dim_gset:Nn \g__ptxcd_page_free_dim {-\pagegoal + \pagetotal} + \dim_compare:nTF {-\g__ptxcd_page_free_dim>2\baselineskip} + { + \int_gset:Nn \g__ptxcd_free_lines_int {\fp_eval:n {ceil(\g__ptxcd_page_free_dim/\baselineskip)}} + \int_compare:nT {\g__ptxcd_free_lines_int<0} { + \hangafter=\g__ptxcd_free_lines_int\hangindent=\c__ptxcd_firstpage_extraindent_dim% + } + } { + \dim_compare:nT {-\TUD@page@free>\baselineskip} { + \hangafter=-2\hangindent=\c__ptxcd_firstpage_extraindent_dim% + } + } + \fi% + }% + \global\setlength{\linewidth}{\dim_eval:n {\c_ptxcd_Linewidth_dim + \c__ptxcd_firstpage_extraindent_dim}} + \afterpage{ + \global\setlength{\linewidth}{\c_ptxcd_Linewidth_dim} + \widowpenalty=10000 + } + } } - \AtBeginDocument{% \raggedbottom% } - \setkomafont{backaddress}{\accentfont\tiny\ptxcd_use_premiumcolor_text:\raisebox{\dimexpr-\totalheight+\ht\strutbox\relax}{\rule{\z@}{4mm}}} - \raggedbottom - \int_new:N \l_ptxcd_letter_lastpage_int \cs_new:Nn \ptxcd_letterpagemark: { - %get lastpage for this letter if not already done - \int_compare:nNnTF {\value{page}} = {1} { - \bool_if:NTF \g__ptxcd_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_ptxcd_letter\thisletter _lastpage_int} { - \cs_if_exist:cTF {r@\thisletter.lastpage} { - \int_const:cn {c_ptxcd_letter\thisletter _lastpage_int} { - \exp_args:NNc \expandafter \@secondoffive { r@\thisletter.lastpage} - } - } { - %warning -> rerun latex - \int_const:cn {c_ptxcd_letter\thisletter _lastpage_int} {0} - } - } - \usekomafont{pagenumber}\pagename\nobreakspace\thepage - \int_compare:nT { - \int_use:c {c_ptxcd_letter\thisletter _lastpage_int} - > 1 - } {/\int_to_arabic:n{\int_use:c {c_ptxcd_letter\thisletter _lastpage_int}}} - } + %get lastpage for this letter if not already done + \int_compare:nNnTF {\value{page}} = {1} { + \bool_if:NTF \g__ptxcd_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_ptxcd_letter\thisletter _lastpage_int} { + \cs_if_exist:cTF {r@\thisletter.lastpage} { + \int_const:cn {c_ptxcd_letter\thisletter _lastpage_int} { + \exp_args:NNc \expandafter \@secondoffive { r@\thisletter.lastpage} + } + } { + %warning -> rerun latex + \int_const:cn {c_ptxcd_letter\thisletter _lastpage_int} {0} + } + } + \usekomafont{pagenumber}\pagename\nobreakspace\thepage + \int_compare:nT { + \int_use:c {c_ptxcd_letter\thisletter _lastpage_int} + > 1 + } {/\int_to_arabic:n{\int_use:c {c_ptxcd_letter\thisletter _lastpage_int}}} + } } - - \setkomavar{firstfoot}{\usekomavar{nextfoot}} - \setkomavar{nextfoot}{% - \ifnum\@pageat>2 - \parbox[c]{\layerwidth}{% - \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi - \strut\pagemark% - }% - \fi + \ifnum\@pageat>2 + \parbox[c]{\layerwidth}{% + \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi + \strut\pagemark% + }% + \fi } - \cs_set_eq:NN \letterpagemark \ptxcd_letterpagemark: - - \bool_if:NT \g__ptxcd_letter_headrule_bool { - \bool_if:NTF \g__ptxcd_letter_logo_bool { - \setkomavar{nexthead}{\raisebox{\topskip}{\box_use:N \g_TUDaLetter_firsthead_box}} - }{ - \setkomavar{nexthead}{\raisebox{\depth}{\ptxcd_LetterheadRule}} - } + \bool_if:NTF \g__ptxcd_letter_logo_bool { + \setkomavar{nexthead}{\raisebox{\topskip}{\box_use:N \g_TUDaLetter_firsthead_box}} + }{ + \setkomavar{nexthead}{\raisebox{\depth}{\ptxcd_LetterheadRule}} + } } - \newpairofpagestyles[letter]{TUDaLetter}{ - \exp_args:Nx \KOMAoptions{ - footwidth=\dimexpr\paperwidth-2\c_ptxcd_HeadMargin_dim \c_colon_str-\dim_eval:n {\c_ptxcd_HeadMargin_dim -1mm}, - headwidth=\dimexpr\paperwidth-2\c_ptxcd_HeadMargin_dim \c_colon_str-\dim_eval:n {\c_ptxcd_HeadMargin_dim -1mm}, - footsepline=.5\c_ptxcd_smallrule_dim,plainfootsepline - } - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.even} - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.odd} - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.oneside} - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.even} - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.odd} - \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.oneside} - \lehead{\usekomavar{nexthead}}% - \lohead{\usekomavar{nexthead}}% - \lefoot{\usekomavar{nextfoot}}% - \lofoot{\usekomavar{nextfoot}}% + \exp_args:Nx \KOMAoptions{ + footwidth=\dimexpr\paperwidth-2\c_ptxcd_HeadMargin_dim \c_colon_str-\dim_eval:n {\c_ptxcd_HeadMargin_dim -1mm}, + headwidth=\dimexpr\paperwidth-2\c_ptxcd_HeadMargin_dim \c_colon_str-\dim_eval:n {\c_ptxcd_HeadMargin_dim -1mm}, + footsepline=.5\c_ptxcd_smallrule_dim,plainfootsepline + } + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.even} + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.odd} + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{TUDaLetter.head.oneside} + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.even} + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.odd} + \ModifyLayer[voffset=\c_ptxcd_HeadMargin_dim,align=tl]{plain.TUDaLetter.head.oneside} + \lehead{\usekomavar{nexthead}}% + \lohead{\usekomavar{nexthead}}% + \lefoot{\usekomavar{nextfoot}}% + \lofoot{\usekomavar{nextfoot}}% } - \DeclarePageStyleByLayers{TUDaLetter.first}{TUDaLetter.foot.even,TUDaLetter.foot.odd,TUDaLetter.foot.oneside,TUDaLetter.foot.above.line} \pagestyle{TUDaLetter} - \DeclarePageStyleAlias{letter.first}{TUDaLetter.first} \def\letterpagestyle{TUDaLetter} - -%pdfa -\if_bool:N \g_ptxcd_pdfx_bool - \PassOptionsToPackage{a-2b}{pdfx} -% Workaround posted by David Carlisle on tex.stackexchange -% Thanks to Ulrike Fischer for mentioning it in #472 - \let \__ptxcd_grouplevel_before_pdfx: \currentgrouplevel - \chardef\currentgrouplevel0 - \ExplSyntaxOff - \RequirePackage{pdfx} - \ExplSyntaxOn - \let \currentgrouplevel \__ptxcd_grouplevel_before_pdfx: - \cs_undefine:N \__ptxcd_grouplevel_before_pdfx: -% end of the workaround - %%hyperref - \hypersetup{hidelinks, unicode} - \iow_new:N \ptxcd_xmpdata_stream - - \cs_if_exist:NF \prop_gput_if_new:Nnx { - \cs_generate_variant:Nn \prop_gput_if_new:Nnn {Nnx} - } - \cs_if_exist:NF \tl_to_str:V {\cs_generate_variant:Nn \tl_to_str:N {V}} - - \cs_new:Nn \ptxcd_pass_TitleData: { - \prop_if_empty:NF \g_ptxcd_MetaData_prop { - \iow_open:Nn \ptxcd_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_ptxcd_MetaData_prop \ptxcd_write_xmp_line:nn - \endgroup - \iow_close:N \ptxcd_xmpdata_stream - } - } - \cs_new:Nn \ptxcd_write_xmp_line:nn { - %Fallback test for older kernels - \cs_if_exist:NTF \str_uppercase:f { - \tl_set:Nx \l_tmpa_tl { - \str_uppercase:f {\tl_head:n {#1}} - \str_lowercase:f { \tl_tail:n {#1}} - } - } { - %may be removed in some time - \tl_set:Nx \l_tmpa_tl {\tl_mixed_case:n {#1}} - } - \cs_if_exist:cTF {\l_tmpa_tl}{ - \iow_now:Nx \ptxcd_xmpdata_stream { - \c_backslash_str \l_tmpa_tl {\exp_not:n {#2}} - } - }{ - \msg_error:nnn{tudaletter} {unknown-metadata} {#1} - } - } - - \bool_new:N \g_ptxcd_pass_TitleData_bool - \bool_gset_true:N \g_ptxcd_pass_TitleData_bool - \prop_new:N \g_ptxcd_MetaData_prop - - \newcommand*{\Metadata}[1]{ - \bool_gset_false:N \g_ptxcd_pass_TitleData_bool - \prop_gset_from_keyval:Nn \g_ptxcd_MetaData_prop {#1} - } - - \msg_new:nnnn{tudaletter} {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.} - -\else: - \hypersetup{pdfcreator=LaTeX~using~TUDa-CI} - - \msg_new:nnnn {tudapub} {metadata-to-hypersetup} { - You~don't~use~pdfx.~ - Here~the~\string\Metadata\~command~only~exists~for~compatibility~reasons.\\ - I~will~pass~the~data~to~ḩypersetup. - }{ - If~possible~please~use~hyperref's~\strung\hypersetup~command~for~the~metadata~directly.\\ - See~hyperref~documentation~for~details~on~usage. - } - - \newcommand*{\Metadata}[1]{ - \tl_set:Nn \l_tmpa_tl {#1} - \tl_replace_all:Nnn \l_tmpa_tl {\sep} {;~}% pdfx-Syntax compatibility - \clist_map_inline:Nn \l_tmpa_tl { - \exp_args:Nx \hypersetup{pdf\tl_trim_spaces:n {##1}} - } - \msg_warning:nn {tudapub} {metadata-to-hypersetup} - } - - - \cs_new:Nn \ptxcd_pass_TitleData: { - % check if pdfmanagement is active - \prop_if_exist:NTF \g__pdfmanagement_documentproperties_prop { - \prop_set_eq:NN \l_tmpa_prop \g__pdfmanagement_documentproperties_prop - } { - \prop_set_eq:NN \l_tmpa_prop \g__hyp_documentproperties_prop - } - - % title - \prop_if_in:NnF \l_tmpa_prop {hyperref/pdftitle} { - \begingroup - \def\newline{} - \def\\{} - \let\thanks\use_none:n - \tl_gset:Nf \g_tmpa_tl {\@title} - \endgroup - \hypersetup{pdftitle={\tl_to_str:V \g_tmpa_tl}} - } - - % author - \prop_if_in:NnF \l_tmpa_prop {hyperref/pdfauthor} { - \begingroup - \def\newline{} - \def\\{} - \let\thanks\use_none:n - \tl_gset:Nx \g_tmpa_tl {\seq_use:Nn \g_ptxcd_author_seq {\exp_not:N \and}} - \tl_gset:Nx \g_tmpa_tl {\g_tmpa_tl } - \endgroup - \hypersetup{pdfauthor=\g_tmpa_tl} - } - } - - \bool_if:NF \g_ptxcd_pdfa_bool { - \msg_new:nnn{tudapub} {no-pdfa}{The~ tudapub~ class~ won't~ create~ PDF/A-mode.} - \msg_info:nn{tudapub} {no-pdfa} - } - -\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}% + swissgerman,nswissgerman}\yourmailname{Ihre~ Nachricht}% \defcaptionname{german, ngerman,austrian,naustrian,% - swissgerman,nswissgerman}\phonename{Tel.}% - - -%signature raggedright + swissgerman,nswissgerman}\phonename{Tel.}% \let\raggedsignature\raggedright - \newkomavar{fromfunction} - \bool_if:NT \g__ptxcd_letter_raggedright_bool {\AtBeginLetter{\RaggedRight}} - -%backwards compatibility for KOMA-Script \cs_if_exist:NF \Ifkomavarempty{ - \let\Ifkomavarempty\ifkomavarempty + \let\Ifkomavarempty\ifkomavarempty } - \file_if_exist_input:n {\g__ptxcd_config_prefix_tl\g_ptxcd_department_str.cfg} + +\if_bool:N \g_ptxcd_pdfx_bool + \iow_new:N \ptxcd_xmpdata_stream + \tl_new:N \g_ptxcd_xmp_title_tl + \tl_new:N \g_ptxcd_xmp_author_tl + + \cs_if_exist:NF \prop_gput_if_new:Nnx { + \cs_generate_variant:Nn \prop_gput_if_new:Nnn {Nnx} + } + + \cs_if_exist:NF \tl_to_str:V {\cs_generate_variant:Nn \tl_to_str:N {V}} + + \cs_new:Nn \ptxcd_pass_TitleData: { + \iow_open:Nn \ptxcd_xmpdata_stream {\jobname.xmpdata} + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \cs_set:Npn \and {\exp_not:n {\exp_not:N \sep}} + \use:c {Hy@pdfstringtrue} + \tl_gset:Nf \g_ptxcd_xmp_title_tl {\@title} + \prop_gput_if_new:Nnx \g_ptxcd_MetaData_prop {Title} {\tl_to_str:V \g_ptxcd_xmp_title_tl} + \prop_if_in:NnF \g_ptxcd_MetaData_prop {Author} { + \tl_gset:Nx \g_ptxcd_xmp_author_tl {\seq_use:Nn \g_ptxcd_author_seq {\exp_not:N \sep}} + \tl_gset:Nx \g_ptxcd_xmp_author_tl {\g_ptxcd_xmp_author_tl} + \prop_gput:Nnx \g_ptxcd_MetaData_prop {Author} {\tl_to_str:V \g_ptxcd_xmp_author_tl} + } + \prop_gput_if_new:Nnn \g_ptxcd_MetaData_prop {Publisher}{TU~Darmstadt} + \prop_gput_if_new:Nnn \g_ptxcd_MetaData_prop {Creator}{LaTeX~using~TUDa-CI} + \use:c {pdfx@localcommands}%should be held inside group + \prop_map_function:NN \g_ptxcd_MetaData_prop \ptxcd_write_xmp_line:nn + \endgroup + \iow_close:N \ptxcd_xmpdata_stream + \let\ptxcd_pass_TitleData:\relax + } + \cs_new:Nn \ptxcd_write_xmp_line:nn { + \begingroup + \cs_set:Npn \sep {\exp_not:N \sep} + \cs_if_exist:cTF {#1}{ + \iow_now:Nx \ptxcd_xmpdata_stream { + \c_backslash_str #1 {\exp_not:n {#2}} + } + }{ + \msg_error:nnn{tuda-ci} {unknown-metadata} {#1} + } + \endgroup + } + + \prop_new:N \g_ptxcd_MetaData_prop + + \newcommand*{\Metadata}[1]{ + \keyval_parse:NNn \use_none:n \ptxcd_set_metadata_prop:nn + {#1} + } + + \cs_set:Nn \ptxcd_set_metadata_prop:nn { + % Fallback test for older kernels doesn't support mixed case eintries + \cs_if_exist:NTF \text_titlecase_first:n { + \exp_args:NNf \prop_gput:Nnn \g_ptxcd_MetaData_prop {\text_titlecase_first:n {#1}} {#2} + } { + \exp_args:NNx \prop_gput:Nnn \g_ptxcd_MetaData_prop { + \str_uppercase:f {\tl_head:n {#1}} + \str_lowercase:f {\tl_tail:n {#1}} + } {#2} + } + } + \msg_new:nnnn{tuda-ci} {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.} +\else: + \hypersetup{pdfcreator=LaTeX~using~TUDa-CI} + \msg_new:nnnn {tuda-ci} {metadata-to-hypersetup} { + You~don't~use~pdfx.~ + Here~the~\string\Metadata ~command~only~exists~for~compatibility~reasons.\\ + I~will~pass~the~data~to~ḩypersetup. + }{ + If~possible~please~use~hyperref's~\string\hypersetup~command~for~the~metadata~directly.\\ + See~hyperref~documentation~for~details~on~usage. + } + + \newcommand*{\Metadata}[1]{ + \tl_set:Nn \l_tmpa_tl {#1} + \tl_replace_all:Nnn \l_tmpa_tl {\sep} {;~}% pdfx-Syntax compatibility + \clist_map_inline:Nn \l_tmpa_tl { + \exp_args:Nx \hypersetup{pdf\tl_trim_spaces:n {##1}} + } + \msg_warning:nn {tuda-ci} {metadata-to-hypersetup} + } + \cs_new:Nn \ptxcd_pass_TitleData: { + \prop_if_exist:NTF \g__pdfmanagement_documentproperties_prop { + \prop_set_eq:NN \l_tmpa_prop \g__pdfmanagement_documentproperties_prop + } { + \prop_set_eq:NN \l_tmpa_prop \g__hyp_documentproperties_prop + } + \prop_if_in:NnF \l_tmpa_prop {hyperref/pdftitle} { + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \tl_gset:Nf \g_tmpa_tl {\@title} + \endgroup + \hypersetup{pdftitle={\tl_to_str:V \g_tmpa_tl}} + } + \prop_if_in:NnF \l_tmpa_prop {hyperref/pdfauthor} { + \begingroup + \def\newline{} + \def\\{} + \let\thanks\use_none:n + \tl_gset:Nx \g_tmpa_tl {\seq_use:Nn \g_ptxcd_author_seq {\exp_not:N \and}} + \tl_gset:Nx \g_tmpa_tl {\g_tmpa_tl } + \endgroup + \hypersetup{pdfauthor=\g_tmpa_tl} + } + } + \bool_if:NF \g_ptxcd_pdfa_bool { + \msg_new:nnn{tuda-ci} {no-pdfa}{The~ tuda\c__ptxcd_base_str\space class~ will~ not~ create~ PDF/A.} + \msg_info:nn{tuda-ci} {no-pdfa} + } +\fi: \endinput +%% +%% End of file `tudaletter.cls'. |