summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/babel-contrib/german/ngermanb.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/babel-contrib/german/ngermanb.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/babel-contrib/german/ngermanb.dtx')
-rw-r--r--macros/latex/contrib/babel-contrib/german/ngermanb.dtx815
1 files changed, 815 insertions, 0 deletions
diff --git a/macros/latex/contrib/babel-contrib/german/ngermanb.dtx b/macros/latex/contrib/babel-contrib/german/ngermanb.dtx
new file mode 100644
index 0000000000..01413286b9
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/ngermanb.dtx
@@ -0,0 +1,815 @@
+% \iffalse meta-comment
+%
+% File `ngermanb.dtx'
+%
+% Copyright 1989--2016
+% Johannes L. Braams
+% Bernd Raichle
+% Walter Schmidt
+% Juergen Spitzmueller
+% All rights reserved.
+%
+% This file is part of the babel-german bundle,
+% an extension to the Babel system.
+% ----------------------------------------------
+%
+% It 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 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Juergen Spitzmueller.
+%
+% This file is based on german.tex version 2.5e
+% by Bernd Raichle, Hubert Partl et.al.
+%
+% \fi
+% \CheckSum{403}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{ngermanb.dtx}
+%</dtx>
+%<naustrian>\ProvidesLanguage{naustrian}
+%<ngerman>\ProvidesLanguage{ngerman}
+%<nswissgerman>\ProvidesLanguage{nswissgerman}
+%<ngermanb>\ProvidesLanguage{ngermanb}
+%\fi
+%\ProvidesFile{ngermanb.dtx}
+ [2018/12/08 v2.11 German support for babel (post-1996 orthography)]
+%\iffalse
+%
+%<*filedriver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[osf]{libertine}
+\usepackage[scaled=0.76]{beramono}
+\usepackage{url}
+\usepackage{array}
+\usepackage{booktabs}
+\usepackage[tableposition=top,skip=5pt]{caption}
+\usepackage{marginnote}
+\usepackage[svgnames]{xcolor}
+\usepackage[pdfusetitle]{hyperref}
+\hypersetup{%
+ colorlinks,
+ linkcolor=black,
+ filecolor=Maroon,
+ urlcolor=Maroon,
+ citecolor=black
+}
+\newcommand*\babel{\textsf{babel}}
+\newcommand*\Babel{\textsf{Babel}}
+\newcommand*\langvar{$\langle \it lang \rangle$}
+\newcommand*\graph[1]{$\langle$#1$\rangle$}
+\newcommand*\note[1]{}
+\newcommand*\Lopt[1]{\texttt{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\newcommand*\newfeature[1]{\marginnote{\footnotesize New feature\\in v.\,#1!}}
+\GlossaryMin = .33\textheight
+
+\begin{document}
+ \DocInput{ngermanb.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{ngermanb.dtx}
+%
+%\RecordChanges
+%
+% \changes{Version 2.9a=Version 2.10}{2016/11/07}{Improvements to the manual}
+%
+% \changes{Version 2.7}{2013/12/13}{Added support for variety \Lopt{nswissgerman}.}
+% \changes{Version 2.7}{2013/12/13}{Revised \Lopt{naustrian} support.}
+% \changes{Version 2.7}{2013/12/13}{Revised documentation: Turn the \babel{}
+% manual chapter into a self-enclosed manual.}
+%
+% \changes{Version 2.6f}{1999/03/24}{Renamed from \file{germanb.ldf};
+% language names changed from \Lopt{german} and \Lopt{austrian}
+% to \Lopt{ngerman} and \Lopt{naustrian}.}
+%
+% \title{Babel support for the German language (post-1996~orthography)}
+% \author{Johannes Braams \and Bernd Raichle \and Walter Schmidt \and J\"urgen Spitzm\"uller\thanks{%
+% Current maintainer. Please report issues via \protect\url{https://github.com/jspitz/babel-german}.}}
+% \date{\fileversion\ (\filedate)}
+% \maketitle
+%
+% \begin{abstract}
+% \noindent This manual documents \babel\ language support for German (post-1996 orthography),
+% including support for the Austrian and Swiss varieties of German.
+% The manual is part of the \textsf{babel-german} bundle.
+% \end{abstract}
+%
+% \section{Aim and usage}
+%
+% The \babel\ `language definition file' \file{ngermanb.ldf} documented in this manual provides
+% the \babel\ package with all language specific strings, settings and commands needed for writing
+% German texts, including texts in the Austrian and Swiss varieties of German.\footnote{%
+% The file \file{ngermanb.ldf} started as a re-implementation of the
+% package \file{ngerman.sty} by Bernd Raichle (cf.\,\cite{gerdoc}),
+% which itself builds on \file{german.sty}, originally developed by
+% Hubert Partl (cf.\,\cite{HP}) and later maintained by Bernd Raichle
+% as well. The initial re-implementation was done by Johannes Braams.}
+% Furthermore, it is assured that the correct hyphenation patterns for the respective
+% language or variety are used (see sec.~\ref{sec:patterns} for details).
+% The file, and hence this manual, addresses the contemporary (`reformed', i.\,e., post-1996) orthography.
+% For traditional (pre-1996) German orthography support, please refer to the complementary
+% \href{file:germanb.pdf}{manual for the \file{germanb.ldf} language definition file}.
+%
+% In order to use the language definitions provided here, you need to use
+% the \babel\ package and pass the respective language\slash variety name\footnote{%
+% Obviously, the prefix \graph{n} in the language\slash variety
+% names stands for `new' (orthography) here, since the names \Lopt{austrian}, \Lopt{german}
+% and \Lopt{swissgerman} were already used for pre-1996 orthography.}
+% as an option, either of
+%
+% \begin{itemize}
+% \setlength{\itemsep}{0pt}
+% \item |\usepackage[ngerman]{babel}|
+% \item |\usepackage[naustrian]{babel}|
+% \item |\usepackage[nswissgerman]{babel}|
+% \item |\usepackage[nswissgerman.toss]{babel}|\newfeature{2.10}\footnote{%
+% See sec.~\ref{sec:toss} on the \Lopt{toss} modifier.}
+% \end{itemize}
+% Using multiple varieties in parallel is possible;
+% consult the \babel\ manual \cite{babel} for details.
+%
+% \section{Shorthands}
+%
+% For all three varieties of German, the character |"| is made active
+% in order to provide some shorthand macros for frequently used special
+% characters as well as for better control of hyphenation, line breaks
+% and ligatures.
+% Table~\ref{tab:german-quote} provides an overview of the shorthands
+% that are provided by \textsf{babel-german} for \Lopt{ngerman}, \Lopt{naustrian}
+% and \Lopt{nswissgerman}.
+% \begin{table}[htb]
+% \begin{center}
+% \small
+% \caption{The extra definitions made
+% by \file{ngermanb.ldf}}\label{tab:german-quote}
+% \begin{tabular}{l>{\raggedright}p{.9\textwidth}}
+% \toprule
+% |"a| & Umlaut \graph{\"a} (shorthand for |\"a|). Similar shorthands are
+% available for all other lower- and uppercase
+% vowels (umlauts: |"a|, |"o|, |"u|, |"A|, |"O|,
+% |"U|; tremata: |"e|, |"i|, |"E|, |"I|). \tabularnewline
+% |"s| & German \graph{\ss} (shorthand for |\ss{}|);
+% but cf. sec.~\ref{sec:toss}. \tabularnewline
+% |"z| & German \graph{\ss} (shorthand for |\ss{}|).
+% Differs to |"s| in uppercase version;
+% but cf. sec.~\ref{sec:toss}. \tabularnewline
+% |"S| & |\uppercase{"s}|, typeset as \graph{SS}(\graph{\ss}
+% must be written as \graph{SS} in uppercase writing). \tabularnewline
+% |"Z| & |\uppercase{"z}|, typeset as \graph{SZ}. In traditional
+% spelling, \graph{\ss} could also be written as \graph{SZ}
+% instead of \graph{SS} in uppercase writing. Note that,
+% with reformed orthography, the \graph{SZ} variant has
+% been deprecated in favour of \graph{SS} only. \tabularnewline
+% \verb="|= & Disable ligature at this position (e.\,g., at morpheme
+% boundaries, as in \verb=Auf"|lage=). \tabularnewline
+% |"-| & An additional breakpoint that does still
+% allow for hyphenation at the breakpoints preset in
+% the hyphenation patterns (as opposed to |\-|). \tabularnewline
+% |"=| & An explicit hyphen with a breakpoint, allowing
+% for hyphenation at the other points preset in the
+% hyphenation patterns (as opposed to plain |-|);
+% useful for long compounds such as
+% |IT"=Dienstleisterinnen|. \tabularnewline
+% |"~| & An explicit hyphen without a breakpoint. Useful for
+% cases where the hyphen should stick at the following
+% syllable, e.\,g., |bergauf und "~ab| . \tabularnewline
+% |""| & A breakpoint that does not output a hyphen if the line
+% break is performed (consider parenthetical extensions
+% as in |(pseudo"~)""wissenschaftlich|). \tabularnewline
+% |"/| & \newfeature{2.9}A slash that allows for a linebreak.
+% As opposed to |\slash{}|, hyphenation at the breakpoints
+% preset in the hyphenation patterns is still allowed. \tabularnewline
+% |"`| & German left double quotes \graph{,,}. \tabularnewline
+% |"'| & German right double quotes \graph{``}. \tabularnewline
+% |"<| & French/Swiss left double quotes \graph{<<}. \tabularnewline
+% |">| & French/Swiss right double quotes \graph{>>}. \tabularnewline
+% \bottomrule
+% \end{tabular}
+% \end{center}
+% \end{table}
+%
+% \enlargethispage{\baselineskip}
+% \noindent Table~\ref{tab:more-quote} lists some \babel\ macros for quotation marks
+% that might be used as an alternative to the quotation mark shorthands listed above.
+% \begin{table}[!h]
+% \begin{center}
+% \small
+% \caption{Alternative commands for quotation marks (provided by \babel)}\label{tab:more-quote}
+% \begin{tabular}{lp{.88\textwidth}}
+% \toprule
+% |\glqq| & German left double quotes \graph{,,}. \tabularnewline
+% |\grqq| & German right double quotes \graph{``}. \tabularnewline
+% |\glq| & German left single quotes \graph{,}. \tabularnewline
+% |\grq| & German right single quotes \graph{`}. \tabularnewline
+% |\flqq| & French/Swiss left double quotes \graph{<<}. \tabularnewline
+% |\frqq| & French/Swiss right double quotes \graph{>>}. \tabularnewline
+% |\flq| & French/Swiss left single quotes \graph{\guilsinglleft}. \tabularnewline
+% |\frq| & French/Swiss right single quotes \graph{\guilsinglright}. \tabularnewline
+% |\dq| & The straight quotation mark character \graph{\textquotedbl}. \tabularnewline
+% \bottomrule
+% \end{tabular}
+% \end{center}
+% \end{table}
+%
+% \section{Hyphenation patterns}\label{sec:patterns}
+%
+% The question which hyphenation patterns are used by \Babel\ in case of the varieties of German needs some elaboration.
+% There is a set of established hyphenation patterns for pre- and post-1996 German orthography that has been available
+% with \TeX\ distributions for a long time (currently, these are shipped in form of the \texttt{dehypht} and \texttt{dehyphn} files).
+% These patterns, though, have many flaws (they produce wrong hyphenations, and not much is known about their construction). Therefore,
+% a group of people developed completely new patterns that do much better, the so-called `experimental' new hyphenation patterns of German,
+% distributed in the \textsf{dehyph-exptl} package \cite{exptl}.
+% As opposed to the old patterns, the new ones undergo constant improvement. The price for this, however, is that hyphenation and thus
+% the typeset document is subject to change with, and only due to, pattern updates.
+%
+% Modern engines (i.\,e., \texttt{xetex} and \texttt{luatex}) have already embraced those new patterns, i.\,e., they are activated on these
+% engines by default. The classic \TeX\ engines (\texttt{tex}\slash\texttt{pdftex}), however, haven't: they continue to use the old patterns.
+% The reason for this is one of \TeX's quality standards: refrain, if ever possible, from changing the output of user's documents in the wake
+% of software updates.
+%
+% This means that you need to explicitly activate the new patterns for a given document with the classic engines, should you want to use them
+% instead of the old ones. With \Babel, this can be done quite easily by means of the \textsf{hyphsubst} \cite{hyphsubst} package:
+% \begin{verbatim}
+% \usepackage[ngerman=ngerman-x-latest]{hyphsubst}
+% \usepackage[ngerman]{babel}
+% \end{verbatim}\vspace{-\baselineskip}
+% Since \Lopt{naustrian} and \Lopt{nswissgerman} use the same patterns as \Lopt{ngerman}, the given \textsf{hyphsubst} option activates
+% the new patterns for all varieties; but note that \textsf{hyphsubst} must be loaded before \babel\ (please refer to \cite{exptl} and
+% \cite{hyphsubst} for details).
+%
+% If you only want to use experimental patterns for one variety, you can do like so:
+% \begin{verbatim}
+% \usepackage{hyphsubst}
+% \usepackage[ngerman,naustrian]{babel}
+% \HyphSubstLet{naustrian}{ngerman-x-latest}
+% \end{verbatim}\vspace{-\baselineskip}
+%
+% \section{Variety-specific options}\label{sec:toss}
+%
+% In\newfeature{2.10} Swiss (and Liechtensteinian) German writing, the use of \graph{\ss} is rather uncommon.
+% Swiss writers would normally use \graph{ss} where German or Austrian writers use the \graph{\ss} character
+% (e.\,g., \emph{Bu\ss e} vs.\,\emph{Busse}). When texts (or names) from other German speaking areas are quoted,
+% however, the spelling and hence the \graph{\ss} is often maintained (particularly in scholarly writing where
+% the spelling of quoted text is not supposed to be touched).
+%
+% We assume that (1) Swiss writers normally input \graph{ss} directly when they mean \graph{ss}, and that (2) the
+% \graph{\ss}-related shorthands |"s| and |"z| are useful also for Swiss writers when they actually need \graph{\ss},
+% the more so since the \graph{\ss} is not as directly accessible on Swiss keyboards as it is on German and Austrian ones.
+% On the other hand, there might be occasions where writers want to transfer a text from German or Austrian into Swiss
+% Standard German and adapt the spelling on the fly, i.\,e., transform all \graph{\ss} into \graph{ss}.
+%
+% For this special case, we provide an option to make the \graph{\ss}-related shorthands |"s| and |"z| expand to the
+% respective digraphs\footnote{In graphematics, the term \emph{digraph} denotes two characters that make a functional pair
+% (which means, depending on the theoretical assumptions: they represent a single sound or they are semantically distinctive).},
+% \graph{ss} and \graph{sz}, rather than to \graph{\ss}. This is not the default behavior with
+% \Lopt{nswissgerman} since, as mentioned, there are situations when the \graph{\ss} is (and has to be) used in Swiss writing,
+% and normally, no shorthand is needed to input (or output) two simple \graph{s} characters. You can opt-in (and out) digraphical
+% expansion of |"s| and |"z| on a global and local level:
+% \begin{itemize}
+% \item To globally switch on the digraphical expansion, use the \Babel\ modifier \Lopt{toss} (read: `to \graph{ss}') with
+% \Lopt{nswissgerman}. I.\,e., pass \Lopt{nswissgerman.toss} (rather than \Lopt{nswissgerman}) as \babel\ option.
+%
+% \item To switch on the digraphical expansion only locally, you can use the boolean switch |\ntosstrue|. Likewise,
+% |\ntossfalse| switches off (both locally and globally set) digraphical expansion.
+% \end{itemize}
+% Both these changes result in the following deviant behavior of two shorthands:\\
+% \begin{tabular}{l>{\raggedright}p{.9\textwidth}}
+% |"s| & Expands to digraph \graph{ss} \tabularnewline
+% |"z| & Expands to digraph \graph{sz} \tabularnewline
+% \end{tabular}
+%
+%
+% \StopEventually{}
+%
+%
+% \section{Implementation}
+%
+% \subsection{General settings}
+%
+% First, we define some helper macros that help us to identify later on
+% which variety of German we are currently dealing with.
+% \changes{Version 2.9a=Version 2.10}{2016/11/03}{Add helper macros to identify the current option.}
+% \iffalse
+%<*ngermanb>
+% \fi
+% \begin{macrocode}
+\def\bbl@opt@ngerman{ngerman}
+\def\bbl@opt@ngermanb{ngermanb}
+\def\bbl@opt@naustrian{naustrian}
+\def\bbl@opt@nswissgerman{nswissgerman}
+% \end{macrocode}
+%
+% If \file{ngermanb.ldf} is read via the deprecated \babel\ option
+% \Lopt{ngermanb}, we make it behave as if \Lopt{ngerman} was specified.
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@ngermanb
+ \def\CurrentOption{ngerman}
+\fi
+% \end{macrocode}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once with the same option, checking the category
+% code of the \texttt{@} sign, etc.
+% \begin{macrocode}
+\LdfInit\CurrentOption{captions\CurrentOption}
+% \end{macrocode}
+%
+% If \file{ngermanb.ldf} is read as an option, i.e., by the |\usepackage|
+% command, \Lopt{ngerman} could be an `unknown' language, so we
+% have to make it known. We check for the existence of
+% |\l@ngerman| and issue a warning if it is unknown.
+%
+% \begin{macrocode}
+\ifx\l@ngerman\@undefined
+ \@nopatterns{German (new orthography)}
+ \adddialect\l@ngerman0
+\fi
+% \end{macrocode}
+%
+% We set \Lopt{naustrian} and \Lopt{nswissgerman} as dialects
+% of \Lopt{ngerman}, since they use the same hyphenation patterns
+% than \Lopt{ngerman}. If no \Lopt{ngerman} patterns are found,
+% we issue a warning.
+% \changes{Version 2.8}{2016/11/01}{Only add dialects if the respective
+% variety is loaded}
+% \changes{Version 2.9}{2016/11/02}{Do not attempt to load \cs{l@naustrian}
+% or \cs{l@nswissgerman}, which do not exist}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@naustrian
+ \ifx\l@ngerman\@undefined
+ \@nopatterns{German (new orthography), needed by Austrian (new orthography)}
+ \adddialect\l@naustrian0
+ \else
+ \adddialect\l@naustrian\l@ngerman
+ \fi
+\fi
+\ifx\CurrentOption\bbl@opt@nswissgerman
+ \ifx\l@ngerman\@undefined
+ \@nopatterns{German (new orthography), needed by Swiss German (new orthography)}
+ \adddialect\l@nswissgerman0
+ \else
+ \adddialect\l@nswissgerman\l@ngerman
+ \fi
+\fi
+% \end{macrocode}
+%
+% \subsection{Language-specific strings (captions)}
+%
+% The next step consists of defining macros that provide language specific strings
+% and settings.
+%
+% \begin{macro}{\@captionsngerman}
+% \changes{Version 2.6n}{2008/07/06}{Corrected typo
+% \cs{captionnsgerman}}
+% The macro |\@captionsngerman| defines all strings used in the four
+% standard document classes provided with \LaTeX\ for German.
+% This is an internal macro that is inherited and modified by the following
+% macros for the respective language varieties.
+%
+% \changes{Version 2.7}{2013/12/13}{Split \cs{captionsngerman} from
+% \cs{captionsnaustrian} and
+% \cs{captionsnswissgerman}.}
+% \changes{Version 2.7}{2013/12/13}{Changed \cs{enclname} in
+% \Lopt{naustrian} to
+% \emph{Beilage(n)}.}
+% \changes{Version 2.6k}{2000/09/20}{Added \cs{glossaryname}}
+% \changes{Version 2.8}{2016/11/01}{Define trans-variational base captions
+% which are loaded and modified by the varieties}
+% \begin{macrocode}
+\@namedef{@captionsngerman}{%
+ \def\prefacename{Vorwort}%
+ \def\refname{Literatur}%
+ \def\abstractname{Zusammenfassung}%
+ \def\bibname{Literaturverzeichnis}%
+ \def\chaptername{Kapitel}%
+ \def\appendixname{Anhang}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\indexname{Index}%
+ \def\figurename{Abbildung}%
+ \def\tablename{Tabelle}%
+ \def\partname{Teil}%
+ \def\enclname{Anlage(n)}%
+ \def\ccname{Verteiler}%
+ \def\headtoname{An}%
+ \def\pagename{Seite}%
+ \def\seename{siehe}%
+ \def\alsoname{siehe auch}%
+ \def\proofname{Beweis}%
+ \def\glossaryname{Glossar}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\captionsngerman}
+% The macro |\captionsngerman| is identical to |\@captionsngerman|,
+% but only defined if \Lopt{ngerman} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsngerman} if
+% \Lopt{ngerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@ngerman
+ \@namedef{captionsngerman}{%
+ \@nameuse{@captionsngerman}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\captionsnaustrian}
+% The macro |\captionsnaustrian| builds on |\@captionsngerman|, but
+% redefines some strings following Austrian conventions (for the
+% respective variants, cf. \cite{vwb}). It is only defined if
+% \Lopt{naustrian} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnaustrian} if
+% \Lopt{naustrian} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@naustrian
+ \@namedef{captionsnaustrian}{%
+ \@nameuse{@captionsngerman}%
+ \def\enclname{Beilage(n)}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\captionsnswissgerman}
+% The macro |\captionsnswissgerman| builds on |\@captionsngerman|, but
+% redefines some strings following Swiss conventions (for the
+% respective variants, cf. \cite{vwb}). It is only defined if
+% \Lopt{nswissgerman} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnswissgerman} if
+% \Lopt{nswissgerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@nswissgerman
+ \@namedef{captionsnswissgerman}{%
+ \@nameuse{@captionsngerman}%
+ \def\enclname{Beilage(n)}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Date localizations}
+%
+% \begin{macro}{\month@ngerman}
+% The macro |\month@ngerman| defines German month names for all varieties.
+% \begin{macrocode}
+\def\month@ngerman{\ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\datengerman}
+% The macro |\datengerman| redefines the command
+% |\today| to produce German dates. It is only defined if
+% \Lopt{ngerman} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{datengerman} if
+% \Lopt{ngerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@ngerman
+ \def\datengerman{\def\today{\number\day.~\month@ngerman
+ \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\datenswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{datenswissgerman}.}
+% The macro |\datenswissgerman| does the same for Swiss German dates.
+% The result is identical to German. This macro is only defined if
+% \Lopt{nswissgerman} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{datenswissgerman} if
+% \Lopt{nswissgerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@nswissgerman
+ \def\datenswissgerman{\def\today{\number\day.~\month@ngerman
+ \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\datenaustrian}
+% The macro |\datenaustrian| redefines the command
+% |\today| to produce Austrian versions of the German dates.
+% Here, the naming of January (,,J\"anner``) differs from the
+% other German varieties. The macro is only defined if
+% \Lopt{naustrian} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{datenaustrian} if
+% \Lopt{naustrian} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@naustrian
+ \def\datenaustrian{\def\today{\number\day.~\ifnum1=\month
+ J\"anner\else \month@ngerman\fi \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Extras}
+%
+% \begin{macro}{\extrasnaustrian}
+% \begin{macro}{\extrasnswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{extrasnswissgerman}.}
+% \begin{macro}{\extrasngerman}
+% \begin{macro}{\noextrasnaustrian}
+% \begin{macro}{\noextrasnswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{noextrasnswissgerman}.}
+% \begin{macro}{\noextrasngerman}
+% The macros |\extrasngerman|, |\extrasnaustrian|
+% and |\extrasnswissgerman|, respectively, will perform all the extra
+% definitions needed for the German language or the respective
+% variety. The macro |\noextrasngerman| is used to cancel the
+% actions of |\extrasngerman|. |\noextrasnaustrian| and
+% |\noextrasnswissgerman| behave analoguously.
+%
+% First, the character \texttt{"} is declared active for all German
+% varieties. This is done once, later on its definition may vary.
+% \begin{macrocode}
+\initiate@active@char{"}
+% \end{macrocode}
+%
+% Depending on the option with which the language definition file
+% has been loaded, the macro |\extrasngerman|, |\extrasnaustrian|
+% or |\extrasnswissgerman| is defined. Each of those is identical:
+% they load the shorthands defined below and activate the \texttt{"}
+% character.
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{%
+ \languageshorthands{ngerman}%
+}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@activate{"}}
+% \end{macrocode}
+%
+% \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement boolean switch
+% \cs{ntosstrue}\slash\cs{ntossfalse} to customize \graph{\ss}-related
+% shorthands in Swiss German context.}
+% \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement modifier \Lopt{toss}
+% to customize \graph{\ss}-related shorthands in Swiss German context.}
+% \begin{macro}{toss}
+% \begin{macro}{\ntosstrue}
+% \begin{macro}{\ntossfalse}
+% For Swiss German, we allow optionally to expand the \graph{\ss}-related
+% shorthands the Swiss way, i.\,e. as \graph{ss} (globally, if the modifier \Lopt{toss}
+% is used or locally if |\ntosstrue|.).
+% \begin{macrocode}
+\newif\ifntoss\ntossfalse
+\newif\ifbbl@ntoss\bbl@ntossfalse
+\ifx\bbl@mod@nswissgerman\@undefined\else
+ \@expandtwoargs\in@{,toss,}{,\bbl@mod@nswissgerman,}
+ \ifin@
+ \ntosstrue
+ \fi
+ \addto\extrasnswissgerman{%
+ \ifntoss\bbl@ntosstrue\else\bbl@ntossfalse\fi}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Next, again depending on the option with which the language definition
+% file has been loaded, the macro |\noextrasngerman|, |\noextrasnaustrian|
+% or |\noextrasnswissgerman| is defined.
+% These deactivate the \texttt{"} character and thus turn the shorthands
+% off again outside of the respective variety.
+% \changes{Version 2.6j}{1999/12/16}{Deactivate shorthands outside of
+% German}
+% \changes{Version 2.7}{2013/12/13}{Deactivate shorthands also outside of
+% \Lopt{naustrian} and \Lopt{nswissgerman}.}
+% \begin{macrocode}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@deactivate{"}}
+\ifx\CurrentOption\bbl@opt@nswissgerman
+ \addto\noextrasnswissgerman{\bbl@ntossfalse}
+\fi
+% \end{macrocode}
+%
+%
+% In order for \TeX\ to be able to hyphenate German words which
+% contain `\ss' (in the \texttt{OT1} position |^^Y|) we have to
+% give the character a nonzero |\lccode| (see Appendix H, the \TeX
+% book).
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \babel@savevariable{\lccode25}%
+ \lccode25=25}
+% \end{macrocode}
+%
+% The umlaut accent macro |\"| is changed to lower the umlaut dots.
+% The redefinition is done with the help of |\umlautlow|.
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \babel@save\"\umlautlow}
+% \end{macrocode}
+% \changes{Version 2.7}{2013/12/13}{Do not use \cs{@namedef} when
+% \cs{noextras} is already defined and should not be overwritten.}
+% \begin{macrocode}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \umlauthigh}
+% \end{macrocode}
+% The current
+% version of the `new' German hyphenation patterns (\file{dehyphn.tex})
+% is to be used with |\lefthyphenmin| and |\righthyphenmin| set to~2.
+% \changes{Version 2.6k}{2000/09/22}{Now use \cs{providehyphenmins} to
+% provide a default value}
+% \begin{macrocode}
+\providehyphenmins{\CurrentOption}{\tw@\tw@}
+% \end{macrocode}
+% For German texts we need to assure that |\frenchspacing| is
+% turned on.
+% \changes{Version 2.6m}{2001/01/26}{Turn frenchspacing on, as in
+% \file{german.sty}}
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchspacing}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchspacing}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Active characters, macros \& shorthands}
+%
+% The following code is necessary because we need an extra active
+% character. This character is then used as indicated in
+% table~\ref{tab:german-quote}.
+%
+% In order to be able to define the function of |"|, we first define a
+% couple of `support' macros.
+%
+%
+% \begin{macro}{\dq}
+% We save the original double quotation mark character in |\dq| to keep
+% it available, the math accent |\"| can now be typed as |"|.
+%
+% Furthermore, we define some helper macros for contextual \graph{\ss} handling.
+% \begin{macrocode}
+\begingroup \catcode`\"12
+\def\x{\endgroup
+ \def\dq{"}
+ \def\@SS{\mathchar"7019 }
+ \def\bbl@ss{\ifbbl@ntoss ss\else\textormath{\ss}{\@SS{}}\fi}
+ \def\bbl@SS{SS}
+ \def\bbl@sz{\ifbbl@ntoss sz\else\textormath{\ss}{\@SS{}}\fi}
+ \def\bbl@SZ{SZ}
+}
+\x
+% \end{macrocode}
+% \end{macro}
+%
+% Now we can define the doublequote shorthands: the umlauts,
+% \begin{macrocode}
+\declare@shorthand{ngerman}{"a}{\textormath{\"{a}\bbl@allowhyphens}{\ddot a}}
+\declare@shorthand{ngerman}{"o}{\textormath{\"{o}\bbl@allowhyphens}{\ddot o}}
+\declare@shorthand{ngerman}{"u}{\textormath{\"{u}\bbl@allowhyphens}{\ddot u}}
+\declare@shorthand{ngerman}{"A}{\textormath{\"{A}\bbl@allowhyphens}{\ddot A}}
+\declare@shorthand{ngerman}{"O}{\textormath{\"{O}\bbl@allowhyphens}{\ddot O}}
+\declare@shorthand{ngerman}{"U}{\textormath{\"{U}\bbl@allowhyphens}{\ddot U}}
+% \end{macrocode}
+% tremata,
+% \begin{macrocode}
+\declare@shorthand{ngerman}{"e}{\textormath{\"{e}}{\ddot e}}
+\declare@shorthand{ngerman}{"E}{\textormath{\"{E}}{\ddot E}}
+\declare@shorthand{ngerman}{"i}{\textormath{\"{\i}}%
+ {\ddot\imath}}
+\declare@shorthand{ngerman}{"I}{\textormath{\"{I}}{\ddot I}}
+% \end{macrocode}
+% German \ss{},
+% \begin{macrocode}
+\declare@shorthand{ngerman}{"s}{\bbl@ss}
+\declare@shorthand{ngerman}{"S}{\bbl@SS}
+\declare@shorthand{ngerman}{"z}{\bbl@sz}
+\declare@shorthand{ngerman}{"Z}{\bbl@SZ}
+% \end{macrocode}
+% German and French/Swiss quotation marks,
+% \begin{macrocode}
+\declare@shorthand{ngerman}{"`}{\glqq}
+\declare@shorthand{ngerman}{"'}{\grqq}
+\declare@shorthand{ngerman}{"<}{\flqq}
+\declare@shorthand{ngerman}{">}{\frqq}
+% \end{macrocode}
+% and some additional commands (hyphenation, line breaking and ligature control):
+% \changes{Version 2.9}{2016/11/02}{Add \texttt{"/} shortcut for breakable slash
+% (taken from \file{dutch.ldf})}
+% \changes{Version 2.9b=Version 2.11}{2018/12/08}{Fix old hyphenation regression introduced with \babel\ 3.7
+% (2002) in a number of shorthands (change of meaning of \cs{allowhyphens}
+% vs. \cs{bbl@allowhyphens})}
+% \begin{macrocode}
+\declare@shorthand{ngerman}{"-}{\nobreak\-\bbl@allowhyphens}
+\declare@shorthand{ngerman}{"|}{%
+ \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \bbl@allowhyphens}{}}
+\declare@shorthand{ngerman}{""}{\hskip\z@skip}
+\declare@shorthand{ngerman}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
+\declare@shorthand{ngerman}{"=}{\penalty\@M-\hskip\z@skip}
+\declare@shorthand{ngerman}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\mdqon}
+% \begin{macro}{\mdqoff}
+% All that's left to do now is to define a couple of commands
+% for reasons of compatibility with \file{german.sty}.
+% \begin{macrocode}
+\def\mdqon{\shorthandon{"}}
+\def\mdqoff{\shorthandoff{"}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% The macro |\ldf@finish| takes care of looking for a
+% configuration file, setting the main language to be switched on
+% at |\begin{document}| and resetting the category code of
+% \texttt{@} to its original value.
+% \begin{macrocode}
+\ldf@finish\CurrentOption
+% \end{macrocode}
+% \iffalse
+%</ngermanb>
+% \fi
+%
+% \subsection{\file{naustrian.ldf}, \file{ngerman.ldf} and \file{nswissgerman.ldf}}
+%
+% \changes{Version 2.7}{2013/12/13}{Generate portmanteau files \file{naustrian.ldf},
+% \file{ngerman.ldf} and \file{nswissgerman.ldf}.}
+%
+% \Babel\ expects a \file{\langvar{}.ldf} file for each \langvar. So we create portmanteau
+% ldf files for \Lopt{naustrian}, \Lopt{ngerman} and \Lopt{nswissgerman}.\footnote{%
+% For \Lopt{naustrian} and \Lopt{ngerman}, this is not strictly necessary,
+% since \babel\ provides aliases for these languages (pointing to \Lopt{ngermanb}).
+% However, since \babel\ does not officially support these aliases anymore after
+% the language definition files have been separated from the core, we provide
+% the whole range of ldf files for the sake of completeness.} These files themselves
+% only load \file{ngermanb.ldf}, which does the real work:
+%
+% \iffalse
+%<*naustrian|ngerman|nswissgerman>
+% \fi
+% \begin{macrocode}
+\input ngermanb.ldf\relax
+% \end{macrocode}
+% \iffalse
+%</naustrian|ngerman|nswissgerman>
+% \fi
+%
+%\PrintChanges
+%
+% \begin{thebibliography}{9}
+% \bibitem{vwb} Ammon, Ulrich et al.:
+% \emph{Variantenw\"orterbuch des Deutschen. Die Standardsprache in \"Osterreich, der Schweiz
+% und Deutschland sowie in Liechtenstein, Luxemburg, Ostbelgien und S\"udtirol.}
+% Berlin, New York: De Gruyter.
+% \bibitem{babel} Braams, Johannes and Bezos, Javier:
+% \emph{Babel}.
+% \url{http://www.ctan.org/pkg/babel}.
+% \bibitem{exptl} Deutschsprachige Trennmustermannschaft:
+% \emph{dehyph-exptl -- Experimental hyphenation patterns for the German language}.
+% \url{https://ctan.org/pkg/dehyph-exptl}.
+% \bibitem{hyphsubst} Heiko Oberdiek:
+% \emph{hyphsubst -- Substitute hyphenation patterns}.
+% \url{https://ctan.org/pkg/hyphsubst}.
+% \bibitem{HP} Partl, Hubert:
+% \emph{German \TeX}, \emph{TUGboat} 9/1 (1988), p.~70--72.
+% \bibitem{hyph-utf8} Manuel P\'egouri\'e-Gonnard et al.:
+% \emph{hyph-utf8 -- Hyphenation patterns expressed in UTF-8}.
+% \url{https://ctan.org/pkg/hyph-utf8}.
+% \bibitem{gerdoc} Raichle, Bernd:
+% \emph{German}.
+% \url{http://www.ctan.org/pkg/german}.
+% \end{thebibliography}
+%
+% \Finale
+%%
+%% \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 \~}
+%%
+\endinput