%\iffalse %<*package> %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % % % Doc-Source file to use with LaTeX2e % Copyright (C) 2015 Nicola Talbot, all rights reserved. % Copyright (C) 2017-19 Sebastian Friedl, all rights reserved. % \fi % % % % \changes{1.0}{2015-03-27}{Initial release} % \changes{3.0}{2019-12-13}{Load regionless style only when no regional variant is stated} % % This file contains the style used when German is requested without a known region. % % \medskip % Identify Module. % \begin{macrocode} \ProvidesDateTimeModule{german}[2019/12/13 v3.0] % \end{macrocode} % Require the base German module % \begin{macrocode} \RequireDateTimeModule{german-base} % \end{macrocode} % % Allow the user to configure the "german" and "german-numeric" styles. % The package wide separators such as \cs{dtm@datetimesep} are not used % in case other date formats are also required. % %\begin{macro}{\DTMgermandowdaysep} % The separator between weekday and day. % \begin{macrocode} \newcommand*{\DTMgermandowdaysep}{,\space} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermandaymonthsep} % The separator between the day and month for the text format. % \begin{macrocode} \newcommand*{\DTMgermandaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermanmonthyearsep} % The separator between the month and year for the text format. % \begin{macrocode} \newcommand*{\DTMgermanmonthyearsep}{\space} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermandatetimesep} % The separator between the date and time blocks in the full format % (either text or numeric). % \begin{macrocode} \newcommand*{\DTMgermandatetimesep}{,\space} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermantimezonesep} % The separator between the time and zone blocks in the full format % (either text or numeric). % \begin{macrocode} \newcommand*{\DTMgermantimezonesep}{\space} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermandatesep} % The separator for the numeric date format. % \begin{macrocode} \newcommand*{\DTMgermandatesep}{.} % \end{macrocode} %\end{macro} % %\begin{macro}{\DTMgermantimesep} % The separator for the numeric time format. % \begin{macrocode} \newcommand*{\DTMgermantimesep}{:} % \end{macrocode} %\end{macro} % % Provide keys that can be used in \cs{DTMlangsetup} to set these separators. % \begin{macrocode} \DTMdefkey{german}{dowdaysep}{\renewcommand*{\DTMgermandowdaysep}{#1}} \DTMdefkey{german}{daymonthsep}{\renewcommand*{\DTMgermandaymonthsep}{#1}} \DTMdefkey{german}{monthyearsep}{\renewcommand*{\DTMgermanmonthyearsep}{#1}} \DTMdefkey{german}{datetimesep}{\renewcommand*{\DTMgermandatetimesep}{#1}} \DTMdefkey{german}{timezonesep}{\renewcommand*{\DTMgermantimezonesep}{#1}} \DTMdefkey{german}{datesep}{\renewcommand*{\DTMgermandatesep}{#1}} \DTMdefkey{german}{timesep}{\renewcommand*{\DTMgermantimesep}{#1}} % \end{macrocode} % % % Define a boolean key that can switch between full and abbreviated formats for % the month and day of week names. % \begin{macrocode} \DTMdefboolkey{german}{abbr}[true]{} % \end{macrocode} % % The default is to show the full names. % \begin{macrocode} \DTMsetbool{german}{abbr}{false} % \end{macrocode} % % Define a boolean key that determines if the time zone mappings % should be used. % \begin{macrocode} \DTMdefboolkey{german}{mapzone}[true]{} % \end{macrocode} % The default is to use mappings. % \begin{macrocode} \DTMsetbool{german}{mapzone}{true} % \end{macrocode} % % Define a boolean key that determines if the day of month should be % displayed. % \begin{macrocode} \DTMdefboolkey{german}{showdayofmonth}[true]{} % \end{macrocode} % The default is to show the day of month. % \begin{macrocode} \DTMsetbool{german}{showdayofmonth}{true} % \end{macrocode} % % Define a boolean key that determines if the year should be % displayed. % \begin{macrocode} \DTMdefboolkey{german}{showyear}[true]{} % \end{macrocode} % The default is to show the year. % \begin{macrocode} \DTMsetbool{german}{showyear}{true} % \end{macrocode} % % Define the (regionless) "german" style. %\changes{1.1}{2017-03-09}{Fixed bug in \cs{DTMDisplaydate}} %\changes{1.2}{2017-09-10}{Implemented short month names} %\changes{1.2}{2017-09-10}{Implemented short weekday names} %\changes{1.2}{2017-09-10}{Implemented day of week} %\changes{2.1}{2017-11-13}{Fixed spurious space when switching languages} % \begin{macrocode} \DTMnewstyle {german}% label {% date style \renewcommand*\DTMdisplaydate[4]{% \ifDTMshowdow \ifnum##4>-1 \DTMifbool{german}{abbr}% {\DTMgermanshortweekdayname{##4}}% {\DTMgermanweekdayname{##4}}% \DTMgermandowdaysep \fi \fi % \DTMifbool{german}{showdayofmonth}% {\DTMgermanordinal{##3}\DTMgermandaymonthsep}% {}% % \DTMifbool{german}{abbr}% {\DTMgermanshortmonthname{##2}}% {\DTMgermanmonthname{##2}}% % \DTMifbool{german}{showyear}% {% \DTMgermanmonthyearsep% \number##1 % space intended }% {}% }% \renewcommand*\DTMDisplaydate[4]{% \ifDTMshowdow \ifnum##4>-1 \DTMifbool{german}{abbr}% {\DTMgermanshortweekdayname{##4}}% {\DTMgermanweekdayname{##4}}% \DTMgermandowdaysep \fi \fi % \DTMifbool{german}{showdayofmonth}% {\DTMgermanordinal{##3}\DTMgermandaymonthsep}% {}% % \DTMifbool{german}{abbr}% {\DTMgermanshortmonthname{##2}}% {\DTMgermanmonthname{##2}}% % \DTMifbool{german}{showyear}% {% \DTMgermanmonthyearsep% \number##1 % space intended }% {}% }% }% {% time style (use default) \renewcommand*\DTMdisplaytime[3]{% \DTMtwodigits{##1}% \DTMgermantimesep\DTMtwodigits{##2}% \ifDTMshowseconds\DTMgermantimesep\DTMtwodigits{##3}\fi }% }% {% zone style \DTMresetzones \DTMgermanzonemaps \renewcommand*{\DTMdisplayzone}[2]{% \DTMifbool{german}{mapzone}% {\DTMusezonemapordefault{##1}{##2}}% {% \ifnum##1<0\else+\fi\DTMtwodigits{##1}% \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi }% }% }% {% full style \renewcommand*{\DTMdisplay}[9]{% \ifDTMshowdate \DTMdisplaydate{##1}{##2}{##3}{##4}% \DTMgermandatetimesep \fi \DTMdisplaytime{##5}{##6}{##7}% \ifDTMshowzone \DTMgermantimezonesep \DTMdisplayzone{##8}{##9}% \fi }% \renewcommand*{\DTMDisplay}[9]{% \ifDTMshowdate \DTMDisplaydate{##1}{##2}{##3}{##4}% \DTMgermandatetimesep \fi \DTMdisplaytime{##5}{##6}{##7}% \ifDTMshowzone \DTMgermantimezonesep \DTMdisplayzone{##8}{##9}% \fi }% }% % \end{macrocode} % % Define the corresponding numeric style. %\changes{1.2}{2017-09-10}{Implemented day of week} %\changes{2.0}{2017-10-03}{Fixed month-year-separator} % \begin{macrocode} \DTMnewstyle {german-numeric}% label {% date style \renewcommand*\DTMdisplaydate[4]{% \ifDTMshowdow \ifnum##4>-1 \DTMifbool{german}{abbr}% {\DTMgermanshortweekdayname{##4}}% {\DTMgermanweekdayname{##4}}% \DTMgermandowdaysep \fi \fi % \DTMifbool{german}{showdayofmonth}% {% \DTMtwodigits{##3}% \DTMgermandatesep }% {}% \DTMtwodigits{##2}% \DTMgermandatesep% \DTMifbool{german}{showyear}% {% \DTMifbool{german}{abbr}% {\DTMtwodigits{##1}}% {\number##1 }% space intended }% {}% }% \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}% }% {% time style \renewcommand*\DTMdisplaytime[3]{% \DTMtwodigits{##1}% \DTMgermantimesep\DTMtwodigits{##2}% \ifDTMshowseconds\DTMgermantimesep\DTMtwodigits{##3}\fi }% }% {% zone style \DTMresetzones \DTMgermanzonemaps \renewcommand*{\DTMdisplayzone}[2]{% \DTMifbool{german}{mapzone}% {\DTMusezonemapordefault{##1}{##2}}% {% \ifnum##1<0\else+\fi\DTMtwodigits{##1}% \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi }% }% }% {% full style \renewcommand*{\DTMdisplay}[9]{% \ifDTMshowdate \DTMdisplaydate{##1}{##2}{##3}{##4}% \DTMgermandatetimesep \fi \DTMdisplaytime{##5}{##6}{##7}% \ifDTMshowzone \DTMgermantimezonesep \DTMdisplayzone{##8}{##9}% \fi }% \renewcommand*{\DTMDisplay}{\DTMdisplay}% } % \end{macrocode} % % Switch the style according to the \opt{useregional} setting. % \begin{macrocode} \DTMifcaseregional {}% do nothing {\DTMsetstyle{german}} {\DTMsetstyle{german-numeric}} % \end{macrocode} % % Redefine \cs{dategerman} (or \cs{date}\meta{dialect}) to prevent % \sty{babel} from resetting \cs{today}. (For this to work, % \sty{babel} must already have been loaded if it's required.) % \begin{macrocode} \ifcsundef{date\CurrentTrackedDialect} {% \ifundef\dategerman {% do nothing }% {% \def\dategerman{% \DTMifcaseregional {}% do nothing {\DTMsetstyle{german}}% {\DTMsetstyle{german-numeric}}% }% }% }% {% \csdef{date\CurrentTrackedDialect}{% \DTMifcaseregional {}% do nothing {\DTMsetstyle{german}}% {\DTMsetstyle{german-numeric}}% }% }% % \end{macrocode} % \endinput