summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/babel-contrib/german
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
Initial commit
Diffstat (limited to 'macros/latex/contrib/babel-contrib/german')
-rw-r--r--macros/latex/contrib/babel-contrib/german/README73
-rw-r--r--macros/latex/contrib/babel-contrib/german/german.ins112
-rw-r--r--macros/latex/contrib/babel-contrib/german/germanb.dtx1004
-rw-r--r--macros/latex/contrib/babel-contrib/german/germanb.pdfbin0 -> 394468 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/german/ngermanb.dtx815
-rw-r--r--macros/latex/contrib/babel-contrib/german/ngermanb.pdfbin0 -> 371070 bytes
6 files changed, 2004 insertions, 0 deletions
diff --git a/macros/latex/contrib/babel-contrib/german/README b/macros/latex/contrib/babel-contrib/german/README
new file mode 100644
index 0000000000..f9189ba339
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/README
@@ -0,0 +1,73 @@
+=========================================================================
+The babel-german bundle
+
+German language support for the babel multilingual package
+
+Copyright 1989--2018 Johannes L. Braams
+ Bernd Raichle
+ Walter Schmidt,
+ Jürgen Spitzmüller
+
+Current Maintainer: Jürgen Spitzmüller
+E-mail: juergen (at) spitzmueller (dot) org
+
+Released under the LaTeX Project Public License v1.3 or later
+See http://www.latex-project.org/lppl.txt
+=========================================================================
+
+== PURPOSE ==
+
+This bundle is an extension to the babel package for multilingual
+typesetting. It provides all necessary macros, definitions and settings
+to typeset German documents. The bundle includes support for the
+traditional and reformed German orthography as well as for the Austrian
+and Swiss varieties of German.
+
+
+== CONTENTS ==
+
+The bundle consists of the following files:
+
+* german.ins (installation file to unpack the language definition
+ files)
+* germanb.dtx (packed language definition files and
+ documentation for the traditional [1901--1996] orthography)
+* ngermanb.dtx (packed language definition files and
+ documentation for the reformed [1996 ff.] orthography)
+* germanb.pdf: unpacked documentation for germanb.ldf (support
+ for traditional orthography)
+* ngermanb.pdf: unpacked documentation for ngermanb.ldf (support
+ for new orthography)
+* README (this file)
+
+
+== INSTALLATION ==
+
+If the latest version of this package is not included in your LaTeX
+distribution, do the following:
+
+* issue "latex german.ins" to unpack the language definition files
+* copy the files (austrian.ldf, german.ldf, germanb.ldf, naustrian.ldf,
+ ngerman.ldf, ngermanb.ldf, nswissgerman.ldf and swissgerman.ldf)
+ to a location where TeX can find them
+ (default location: $TEXMF/tex/generic/babel-german/)
+
+To re-generate the manuals, issue
+* pdflatex <file>.dtx
+* makeindex -s gglo.ist -o <file>.gls <file>.glo
+* pdflatex <file>.dtx
+* pdflatex <file>.dtx
+Substitute <file> either by germanb or ngermanb.
+
+
+== DOCUMENTATION ==
+
+See the included manuals germanb.pdf (traditional orthography) and
+ngermanb.pdf (new orthography) for usage instructions.
+
+
+== CHANGES ==
+
+See the included manuals germanb.pdf (traditional orthography) and
+ngermanb.pdf (new orthography), section "Change History".
+
diff --git a/macros/latex/contrib/babel-contrib/german/german.ins b/macros/latex/contrib/babel-contrib/german/german.ins
new file mode 100644
index 0000000000..92f2142bdf
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/german.ins
@@ -0,0 +1,112 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1989--2018
+%% 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.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/12/08}
+
+\input docstrip.tex
+
+{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi}
+
+\preamble
+This is a generated file.
+
+Copyright 1989--2018
+ 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.
+
+Please report errors to: Juergen Spitzmueller
+ via: https://github.com/jspitz/babel-german
+
+\endpreamble
+
+\keepsilent
+
+\usedir{tex/generic/babel-german}
+
+\generate{\file{germanb.ldf}{\from{germanb.dtx}{germanb}}
+ \file{german.ldf}{\from{germanb.dtx}{german}}
+ \file{austrian.ldf}{\from{germanb.dtx}{austrian}}
+ \file{swissgerman.ldf}{\from{germanb.dtx}{swissgerman}}
+ \file{ngermanb.ldf}{\from{ngermanb.dtx}{ngermanb}}
+ \file{ngerman.ldf}{\from{ngermanb.dtx}{ngerman}}
+ \file{naustrian.ldf}{\from{ngermanb.dtx}{naustrian}}
+ \file{nswissgerman.ldf}{\from{ngermanb.dtx}{nswissgerman}}
+ }
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space austrian.ldf, german.ldf, germanb.ldf,}
+\Msg{* \space\space naustrian.ldf, ngerman.ldf, ngermanb.ldf,}
+\Msg{* \space\space nswissgerman.ldf and swissgerman.ldf}
+\Msg{*}
+\Msg{* To produce the documentation run the files }
+\Msg{* germanb.dtx and ngermanb.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endbatchfile
diff --git a/macros/latex/contrib/babel-contrib/german/germanb.dtx b/macros/latex/contrib/babel-contrib/german/germanb.dtx
new file mode 100644
index 0000000000..4e8a344b55
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/germanb.dtx
@@ -0,0 +1,1004 @@
+% \iffalse meta-comment
+%
+% File `germanb.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.
+% \fi
+% \CheckSum{508}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{germanb.dtx}
+%</dtx>
+%<austrian>\ProvidesLanguage{austrian}
+%<german>\ProvidesLanguage{german}
+%<swissgerman>\ProvidesLanguage{swissgerman}
+%<germanb>\ProvidesLanguage{germanb}
+%\fi
+%\ProvidesFile{germanb.dtx}
+ [2018/12/08 v2.11 German support for babel (pre-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{germanb.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{germanb.dtx}
+%
+%\RecordChanges
+%
+% \changes{Version 2.9a=Version 2.10}{2016/11/07}{Improvements to the manual}
+%
+% \changes{Version 2.7}{2013/12/13}{Revised documentation: Turn the \babel{}
+% manual chapter into a self-enclosed manual.}
+% \changes{Version 2.7}{2013/12/13}{Added support for variety \Lopt{swissgerman}.}
+% \changes{Version 2.7}{2013/12/13}{Revised \Lopt{austrian} support.}
+%
+% \changes{Version 2.6d}{1996/07/10}{Replaced \cs{undefined} with
+% \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
+% with \LaTeX}
+% \changes{Version 2.6d}{1996/10/10}{Moved the definition of
+% \cs{atcatcode} right to the beginning.}
+%
+% \changes{Version 2.6a}{1995/02/15}{Moved the identification to the
+% top of the file}
+% \changes{Version 2.6a}{1995/02/15}{Rewrote the code that handles the
+% active double quote character}
+%
+% \changes{Version 2.5c}{1994/06/26}{Removed the use of \cs{filedate}
+% and moved the identification after the loading of
+% \file{babel.def}}
+%
+% \changes{Version 2.5}{1994/02/08}{Update or \LaTeXe}
+%
+% \changes{Version 2.3e}{1991/11/10}{Brought up-to-date with
+% \file{german.tex} v2.3e (plus some bug fixes) [br]}
+%
+% \changes{Version 2.2a}{1991/07/15}{Renamed \file{babel.sty} in
+% \file{babel.com}}
+%
+% \changes{Version 2.3}{1991/11/05}{Rewritten parts of the code to use
+% the new features of babel version 3.1}
+%
+% \changes{Version 2.2}{1991/06/11}{Removed global assignments,
+% brought uptodate with \file{german.tex} v2.3d}
+%
+% \changes{Version 2.1}{1991/05/29}{Removed bug found by van der Meer}
+%
+% \changes{Version 2.0a}{1991/05/25}{Removed some problems in change
+% log}
+%
+% \changes{Version 2.0}{1991/04/23}{Modified for babel 3.0}
+%
+% \changes{Version 1.1a}{1990/08/27}{Modified the documentation
+% somewhat}
+%
+% \changes{Version 1.1}{1990/07/30}{When using PostScript fonts with
+% the Adobe fontencoding, the dieresis-accent is located elsewhere,
+% modified germanb}
+%
+% \changes{Version 1.0c}{1990/07/16}{Fixed some typos}
+%
+% \changes{Version 1.0b}{1990/05/22}{fixed typo in definition for
+% austrian language found by Werenfried Spit
+% \texttt{nspit@fys.ruu.nl}}
+%
+% \changes{Version 1.0a}{1990/05/14}{Incorporated Nico's comments}
+%
+% \title{Babel support for the German language (pre-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 (pre-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{germanb.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, in \emph{traditional
+% (1901--1996) spelling}.\footnote{%
+% The file \file{germanb.ldf} started as a re-implementation of the
+% package \file{german.sty} (v.\,2.5b), which was originally
+% developed by Hubert Partl (cf.\,\cite{HP}) and later maintained by Bernd Raichle
+% (cf.\,\cite{gerdoc}). Johannes Braams did the initial re-implementation.}
+% As for support for contemporary (`reformed', i.\,e., post-1996) German orthography, please refer to
+% the complementary \href{file:ngermanb.pdf}{manual for the \file{ngermanb.ldf} language definition file}.
+% The `language definition file' also assures that the correct hyphenation patterns for the respective
+% language or variety are used (see sec.~\ref{sec:patterns} for details).
+%
+% In order to use the language definitions provided here, you need to use
+% the \babel\ package and pass the respective language\slash variety name as an
+% option, either of
+%
+% \begin{itemize}
+% \setlength{\itemsep}{0pt}
+% \item |\usepackage[german]{babel}|
+% \item |\usepackage[austrian]{babel}|
+% \item |\usepackage[swissgerman]{babel}|
+% \item |\usepackage[swissgerman.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.
+% Some of these shorthands address a peculiarity of pre-1996 German
+% spelling: consonantial character combinations that change in the context
+% of hyphenations.
+% Other shorthands are provided 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{german}, \Lopt{austrian}
+% and \Lopt{swissgerman}.
+%
+% \begin{table}[htb]
+% \begin{center}
+% \small
+% \caption{Shorthands provided by \file{germanb.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{}|).
+% The difference to |"s| is the uppercase version;
+% but cf. sec.~\ref{sec:toss}. \tabularnewline
+% |"ck| & \graph{ck}, hyphenated as \graph{k-k}. \tabularnewline
+% |"ff| & \graph{ff}, hyphenated as \graph{ff-f};
+% this is also implemented for \graph{l}, \graph{m},
+% \graph{n}, \graph{p}, \graph{r} and \graph{t}.
+% Please refer to sec.~\ref{sec:toss} for why this does not
+% include \graph{s}. \tabularnewline
+% |"S| & |\uppercase{"s}|, typeset as \graph{SS} (\graph{\ss}
+% must be written as \graph{SS} [or \graph{SZ}, see below]
+% in uppercase writing). \tabularnewline
+% |"Z| & |\uppercase{"z}|, typeset as \graph{SZ} (\graph{\ss}
+% must be written as \graph{SZ} [or \graph{SS}, see above]
+% in uppercase writing). \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}
+%
+% \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.
+% An exception is (pre-1996) Swiss German: here, the classic engines use the `experimental' patterns by default (since there were no patterns available
+% previously anyway).
+%
+% So you need to explicitly activate the new patterns for a given document (except for \Lopt{swissgerman}) 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[german=german-x-latest]{hyphsubst}
+% \usepackage[german]{babel}
+% \end{verbatim}\vspace{-\baselineskip}
+% Since \Lopt{austrian} uses the same patterns as \Lopt{german}, the given \textsf{hyphsubst} option activates
+% the new patterns for this variety as well; 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[german,austrian]{babel}
+% \HyphSubstLet{austrian}{german-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 Swiss writers will normally input \graph{ss} directly when they mean \graph{ss}, and we assume furthermore
+% that 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 Standard 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{swissgerman} 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{swissgerman}. I.\,e., pass \Lopt{swissgerman.toss} (rather than \Lopt{swissgerman}) as \babel\ option.
+%
+% \item To switch on the digraphical expansion only locally, you can use the boolean switch |\tosstrue|. Likewise,
+% |\tossfalse| switches off (both locally and globally set) digraphical expansion.
+% \end{itemize}
+% Both these changes result in the following deviant behavior of two shorthands:
+% \begin{table}[!h]
+% \begin{tabular}{l>{\raggedright}p{.9\textwidth}}
+% |"s| & Expands to digraph \graph{ss} \tabularnewline
+% |"z| & Expands to digraph \graph{sz} \tabularnewline
+% \end{tabular}
+% \end{table}
+%
+% \noindent One further note related to the use of \graph{ss} in Swiss German. As opposed to other consonantial letters, the \graph{s}
+% is excluded from the three consonant rule (\emph{Dreikonsonantenregel}) of traditional German spelling which prescribes
+% that one of three identical consonants has to be omitted if a vowel follows the three consonants (i.\,e., \emph{Schiffahrt},
+% not \emph{Schifffahrt}), except if the word is hyphenated (\emph{Schiff-fahrt}); the shorthands |"ff| etc. account for that.
+% This does not apply to \graph{s}! In that case, always all three consonants are spelled out (e.\,g., \emph{Kongresssaal},
+% not \emph{Kongressaal}). This is why we don't provide a shorthand for the \graph{sss} case.
+%
+%
+% \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
+%<*germanb>
+% \fi
+% \begin{macrocode}
+\def\bbl@opt@german{german}
+\def\bbl@opt@germanb{germanb}
+\def\bbl@opt@austrian{austrian}
+\def\bbl@opt@swissgerman{swissgerman}
+% \end{macrocode}
+%
+% If \file{germanb.ldf} is read via the deprecated \babel\ option
+% \Lopt{germanb}, we make it behave as if \Lopt{german} was specified.
+% \changes{Version 2.6l}{2008/03/17}{Making germanb behave like german
+% needs some more work besides defining \cs{CurrentOption}}
+% \changes{Version 2.6m}{2008/06/01}{Corrected a typo}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@germanb
+ \def\CurrentOption{german}
+ \ifx\l@german\@undefined
+ \@nopatterns{German (trad. orthography)}
+ \adddialect\l@german0
+ \fi
+ \let\l@germanb\l@german
+ \AtBeginDocument{%
+ \let\captionsgermanb\captionsgerman
+ \let\dategermanb\dategerman
+ \let\extrasgermanb\extrasgerman
+ \let\noextrasgermanb\noextrasgerman
+ }
+\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.
+% \changes{Version 2.6d}{1996/11/02}{Now use \cs{LdfInit} to perform
+% initial checks}
+% \begin{macrocode}
+\LdfInit\CurrentOption{captions\CurrentOption}
+% \end{macrocode}
+%
+% If \file{germanb.ldf} is read as an option, i.e. via |\usepackage|
+% command, \Lopt{german} could be an `unknown' language, so we
+% have to make it known. We check for the existence of
+% |\l@german| and issue a warning if it is unknown.
+%
+% \changes{Version 2.0}{1991/04/23}{Now use \cs{adddialect} if
+% language undefined}
+% \changes{Version 2.2d}{1991/10/27}{Removed use of \cs{@ifundefined}}
+% \changes{Version 2.3e}{1991/11/10}{Added warning, if no german
+% patterns loaded}
+% \changes{Version 2.5c}{1994/06/26}{Now use \cs{@nopatterns} to
+% produce the warning}
+% \begin{macrocode}
+\ifx\l@german\@undefined
+ \@nopatterns{German (trad. orthography)}
+ \adddialect\l@german0
+\fi
+% \end{macrocode}
+%
+% We set \Lopt{austrian} as a dialect of \Lopt{german},
+% since the Austrian variety uses the same hyphenation patterns as
+% Germany's Standard German. If no German patterns are found, we issue
+% a warning.
+% \changes{Version 2.0}{1991/04/23}{Now use \cs{adddialect} for
+% austrian}
+% \changes{Version 2.8}{2016/11/01}{Only add Austrian dialect if \Lopt{austrian} is loaded}
+% \changes{Version 2.9}{2016/11/02}{Do not attempt to load \cs{l@austrian}, which does not exist}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@austrian
+ \ifx\l@german\@undefined
+ \@nopatterns{German (trad. orthography), needed by Austrian (trad. orthography)}
+ \adddialect\l@austrian0
+ \else
+ \adddialect\l@austrian\l@german
+ \fi
+\fi
+% \end{macrocode}
+%
+% For the Swiss variety, we attempt to load the specific
+% \Lopt{swissgerman} hyphenation patterns and fall back to
+% \Lopt{german} if those are not available.
+% If no patterns are found, we issue a warning.
+% \changes{Version 2.7b}{2014/10/10}{Do not warn about missing swissgerman patterns
+% if \Lopt{swissgerman} is not loaded}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@swissgerman
+ \ifx\l@swissgerman\@undefined
+ \ifx\l@german\@undefined
+ \@nopatterns{Swiss German (trad. orthography) and German (trad. orthography)}
+ \adddialect\l@swissgerman0
+ \else
+ \@nopatterns{Swiss German (trad. orthography)}
+ \adddialect\l@swissgerman\l@german
+ \fi
+ \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}{\@captionsgerman}
+% The macro |\@captionsgerman| 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.2}{1991/06/06}{Removed \cs{global} definitions}
+% \changes{Version 2.2}{1991/06/06}{\cs{pagename} should be
+% \cs{headpagename}}
+% \changes{Version 2.3e}{1991/11/10}{Added \cs{prefacename},
+% \cs{seename} and \cs{alsoname}}
+% \changes{Version 2.4}{1993/07/15}{\cs{headpagename} should be
+% \cs{pagename}}
+% \changes{Version 2.6b}{1995/07/04}{Added \cs{proofname} for
+% AMS-\LaTeX}
+% \changes{Version 2.6d}{1996/07/10}{Construct control sequence on the
+% fly}
+% \changes{Version 2.6j}{2000/09/20}{Added \cs{glossaryname}}
+% \changes{Version 2.7}{2013/12/13}{Split \cs{captionsgerman} from
+% \cs{captionsaustrian} and
+% \cs{captionsswissgerman}.}
+% \changes{Version 2.7}{2013/12/13}{Changed \cs{enclname} in
+% \Lopt{austrian} to
+% \emph{Beilage(n)}.}
+% \changes{Version 2.8}{2016/11/01}{Define trans-variational base captions
+% which are loaded and modified by the varieties}
+% \begin{macrocode}
+\@namedef{@captionsgerman}{%
+ \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}{\captionsgerman}
+% The macro |\captionsgerman| is identical to |\@captionsgerman|,
+% but only defined if \Lopt{german} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsgerman} if
+% \Lopt{german} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@german
+ \@namedef{captionsgerman}{%
+ \@nameuse{@captionsgerman}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\captionsaustrian}
+% The macro |\captionsaustrian| builds on |\@captionsgerman|, but
+% redefines some strings following Austrian conventions (for the
+% respective variants, cf. \cite{vwb}). It is only defined if
+% \Lopt{austrian} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsaustrian} if
+% \Lopt{austrian} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@austrian
+ \@namedef{captionsaustrian}{%
+ \@nameuse{@captionsgerman}%
+ \def\enclname{Beilage(n)}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\captionsswissgerman}
+% The macro |\captionsswissgerman| builds on |\@captionsgerman|, but
+% redefines some strings following Swiss conventions (for the
+% respective variants, cf. \cite{vwb}). It is only defined if
+% \Lopt{swissgerman} is requested.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsswissgerman} if
+% \Lopt{swissgerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@swissgerman
+ \@namedef{captionsswissgerman}{%
+ \@nameuse{@captionsgerman}%
+ \def\enclname{Beilage(n)}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Date localizations}
+%
+% \begin{macro}{\month@german}
+% The macro |\month@german| defines German month names for all varieties.
+% \changes{Version 2.3e}{1991/11/10}{Added \cs{month@german}}
+% \begin{macrocode}
+\def\month@german{\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}{\dategerman}
+% The macro |\dategerman| redefines the command
+% |\today| to produce German dates. It is only defined if
+% \Lopt{german} is requested.
+% \changes{Version 2.6f}{1997/10/01}{Use \cs{edef} to define
+% \cs{today} to save memory}
+% \changes{Version 2.6f}{1998/03/28}{use \cs{def} instead of
+% \cs{edef}}
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{dategerman} if
+% \Lopt{german} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@german
+ \def\dategerman{\def\today{\number\day.~\month@german
+ \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dateswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{dateswissgerman}.}
+% The macro |\dateswissgerman| does the same for Swiss German dates. It
+% is only defined if \Lopt{swissgerman} is requested.
+% The result is identical to German.
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{dateswissgerman} if
+% \Lopt{swissgerman} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@swissgerman
+ \def\dateswissgerman{\def\today{\number\day.~\month@german
+ \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dateaustrian}
+% The macro |\dateaustrian| 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{austrian} is requested.
+% \changes{Version 2.6f}{1997/10/01}{Use \cs{edef} to define
+% \cs{today} to save memory}
+% \changes{Version 2.6f}{1998/03/28}{use \cs{def} instead of
+% \cs{edef}}
+% \changes{Version 2.8}{2016/11/01}{Only define \cs{dateaustrian} if
+% \Lopt{austrian} is requested.}
+% \begin{macrocode}
+\ifx\CurrentOption\bbl@opt@austrian
+ \def\dateaustrian{\def\today{\number\day.~\ifnum1=\month
+ J\"anner\else \month@german\fi \space\number\year}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Extras}
+%
+% \begin{macro}{\extrasgerman}
+% \changes{Version 2.0b}{1991/05/29}{added some comment chars to
+% prevent white space}
+% \changes{Version 2.2}{1991/06/11}{Save all redefined macros}
+% \begin{macro}{\extrasaustrian}
+% \begin{macro}{\extrasswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{extrasswissgerman}.}
+% \begin{macro}{\noextrasaustrian}
+% \begin{macro}{\noextrasswissgerman}
+% \changes{Version 2.7}{2013/12/13}{Added \cs{noextrasswissgerman}.}
+% \begin{macro}{\noextrasgerman}
+% \changes{Version 1.1}{1990/07/30}{Added \cs{dieresis}}
+% \changes{Version 2.0b}{1991/05/29}{added some comment chars to
+% prevent white space}
+% \changes{Version 2.2}{1991/06/11}{Try to restore everything to its
+% former state}
+% \changes{Version 2.6d}{1996/07/10}{Construct control sequence
+% \cs{extrasgerman} or \cs{extrasaustrian} on the fly}
+%
+% The macros |\extrasgerman|, |\extrasaustrian|
+% and |\extrasswissgerman|, respectively, will perform all the extra
+% definitions needed for the German language or the respective
+% variety. The macro |\noextrasgerman| is used to cancel the
+% actions of |\extrasgerman|. |\noextrasaustrian| and
+% |\noextrasswissgerman| 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 |\extrasgerman|, |\extrasaustrian|
+% or |\extrasswissgerman| is defined. Each of those is identical:
+% they load the shorthands defined below and activate the \texttt{"}
+% character.
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{%
+ \languageshorthands{german}}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@activate{"}}
+% \end{macrocode}
+%
+% \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement boolean switch
+% \cs{tosstrue}\slash\cs{tossfalse} 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}{\tosstrue}
+% \begin{macro}{\tossfalse}
+% 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 |\tosstrue|.).
+% \begin{macrocode}
+\newif\iftoss\tossfalse
+\newif\ifbbl@toss\bbl@tossfalse
+\ifx\bbl@mod@swissgerman\@undefined\else
+ \@expandtwoargs\in@{,toss,}{,\bbl@mod@swissgerman,}
+ \ifin@
+ \tosstrue
+ \fi
+ \addto\extrasswissgerman{%
+ \iftoss\bbl@tosstrue\else\bbl@tossfalse\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 |\noextrasgerman|, |\noextrasaustrian|
+% or |\noextrasswissgerman| is defined.
+% These deactivate the \texttt{"} character and thus turn the shorthands
+% off again outside of the respective variety.
+% \changes{Version 2.6i}{1999/12/16}{Deactivate shorthands outside of
+% German.}
+% \changes{Version 2.7}{2013/12/13}{Deactivate shorthands also outside of
+% \Lopt{austrian} and \Lopt{swissgerman}.}
+% \begin{macrocode}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@deactivate{"}}
+\ifx\CurrentOption\bbl@opt@swissgerman
+ \addto\noextrasswissgerman{\bbl@tossfalse}
+\fi
+% \end{macrocode}
+%
+% \changes{Version 2.6a}{1995/02/15}{All the code to handle the active
+% double quote has been moved to \file{babel.def}}
+%
+% 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).
+% \changes{Version 2.6c}{1996/04/08}{Use decimal number instead of
+% hat-notation as the hat may be activated}
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \babel@savevariable{\lccode25}%
+ \lccode25=25}
+% \end{macrocode}
+% \changes{Version 2.6a}{1995/02/15}{Removeed \cs{3} as it is no
+% longer in \file{germanb.ldf}}
+%
+% 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 German hyphenation patterns can be used with |\lefthyphenmin|
+% and |\righthyphenmin| set to~2.
+% \changes{Version 2.6a}{1995/05/13}{use \cs{germanhyphenmins} to store
+% the correct values}
+% \changes{Version 2.6j}{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.6k}{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}
+%
+% \changes{Version 2.6a}{1995/02/15}{\cs{umlautlow} and
+% \cs{umlauthigh} moved to \file{glyphs.dtx}, as well as
+% \cs{newumlaut} (now \cs{lower@umlaut}}
+%
+% \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.
+%
+% \changes{Version 2.3e}{1991/11/10}{Added \cs{save@sf@q} macro and
+% rewrote all quote macros to use it}
+% \changes{Version 2.3h}{1991/02/16}{moved definition of
+% \cs{allowhyphens}, \cs{set@low@box} and \cs{save@sf@q} to
+% \file{babel.com}}
+% \changes{Version 2.6a}{1995/02/15}{Moved all quotation characters to
+% \file{glyphs.dtx}}
+%
+% \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@toss ss\else\textormath{\ss}{\@SS{}}\fi}
+ \def\bbl@SS{SS}
+ \def\bbl@sz{\ifbbl@toss sz\else\textormath{\ss}{\@SS{}}\fi}
+ \def\bbl@SZ{SZ}
+}
+\x
+% \end{macrocode}
+% \end{macro}
+% \changes{Version 2.6c}{1996/01/24}{Moved \cs{german@dq@disc} to
+% babel.def, calling it \cs{bbl@disc}}
+%
+% \changes{Version 2.6a}{1995/02/15}{Use \cs{ddot} instead of
+% \cs{@MATHUMLAUT}}
+%
+% Now we can define the doublequote shorthands: the umlauts,
+% \changes{Version 2.6c}{1996/05/30}{added the \cs{allowhyphens}}
+% \begin{macrocode}
+\declare@shorthand{german}{"a}{\textormath{\"{a}\bbl@allowhyphens}{\ddot a}}
+\declare@shorthand{german}{"o}{\textormath{\"{o}\bbl@allowhyphens}{\ddot o}}
+\declare@shorthand{german}{"u}{\textormath{\"{u}\bbl@allowhyphens}{\ddot u}}
+\declare@shorthand{german}{"A}{\textormath{\"{A}\bbl@allowhyphens}{\ddot A}}
+\declare@shorthand{german}{"O}{\textormath{\"{O}\bbl@allowhyphens}{\ddot O}}
+\declare@shorthand{german}{"U}{\textormath{\"{U}\bbl@allowhyphens}{\ddot U}}
+% \end{macrocode}
+% tremata,
+% \begin{macrocode}
+\declare@shorthand{german}{"e}{\textormath{\"{e}}{\ddot e}}
+\declare@shorthand{german}{"E}{\textormath{\"{E}}{\ddot E}}
+\declare@shorthand{german}{"i}{\textormath{\"{\i}}%
+ {\ddot\imath}}
+\declare@shorthand{german}{"I}{\textormath{\"{I}}{\ddot I}}
+% \end{macrocode}
+% German \ss{},
+% \changes{Version 2.6f}{1997/05/08}{use \cs{SS} instead of
+% \texttt{SS}, removed braces after \cs{ss}}
+% \begin{macrocode}
+\declare@shorthand{german}{"s}{\bbl@ss}
+\declare@shorthand{german}{"S}{\bbl@SS}
+\declare@shorthand{german}{"z}{\bbl@sz}
+\declare@shorthand{german}{"Z}{\bbl@SZ}
+% \end{macrocode}
+% German and French/Swiss quotation marks,
+% \begin{macrocode}
+\declare@shorthand{german}{"`}{\glqq}
+\declare@shorthand{german}{"'}{\grqq}
+\declare@shorthand{german}{"<}{\flqq}
+\declare@shorthand{german}{">}{\frqq}
+% \end{macrocode}
+% discretionary commands
+% \begin{macrocode}
+\declare@shorthand{german}{"c}{\textormath{\bbl@disc ck}{c}}
+\declare@shorthand{german}{"C}{\textormath{\bbl@disc CK}{C}}
+\declare@shorthand{german}{"F}{\textormath{\bbl@disc F{FF}}{F}}
+\declare@shorthand{german}{"l}{\textormath{\bbl@disc l{ll}}{l}}
+\declare@shorthand{german}{"L}{\textormath{\bbl@disc L{LL}}{L}}
+\declare@shorthand{german}{"m}{\textormath{\bbl@disc m{mm}}{m}}
+\declare@shorthand{german}{"M}{\textormath{\bbl@disc M{MM}}{M}}
+\declare@shorthand{german}{"n}{\textormath{\bbl@disc n{nn}}{n}}
+\declare@shorthand{german}{"N}{\textormath{\bbl@disc N{NN}}{N}}
+\declare@shorthand{german}{"p}{\textormath{\bbl@disc p{pp}}{p}}
+\declare@shorthand{german}{"P}{\textormath{\bbl@disc P{PP}}{P}}
+\declare@shorthand{german}{"r}{\textormath{\bbl@disc r{rr}}{r}}
+\declare@shorthand{german}{"R}{\textormath{\bbl@disc R{RR}}{R}}
+\declare@shorthand{german}{"t}{\textormath{\bbl@disc t{tt}}{t}}
+\declare@shorthand{german}{"T}{\textormath{\bbl@disc T{TT}}{T}}
+% \end{macrocode}
+% (we need to treat |"f| a bit differently in order to preserve the
+% ff-ligature)
+% \changes{Version 2.6f}{1998/06/15}{Copied the coding for \texttt{"f}
+% from german.dtx version 2.5d}
+% \begin{macrocode}
+\declare@shorthand{german}{"f}{\textormath{\bbl@discff}{f}}
+\def\bbl@discff{\penalty\@M
+ \afterassignment\bbl@insertff \let\bbl@nextff= }
+\def\bbl@insertff{%
+ \if f\bbl@nextff
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+ {\relax\discretionary{ff-}{f}{ff}\bbl@allowhyphens}{f\bbl@nextff}}
+\let\bbl@nextff=f
+% \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{german}{"-}{\nobreak\-\bbl@allowhyphens}
+\declare@shorthand{german}{"|}{%
+ \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \bbl@allowhyphens}{}}
+\declare@shorthand{german}{""}{\hskip\z@skip}
+\declare@shorthand{german}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
+\declare@shorthand{german}{"=}{\penalty\@M-\hskip\z@skip}
+\declare@shorthand{german}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\mdqon}
+% \begin{macro}{\mdqoff}
+% \begin{macro}{\ck}
+% All that's left to do now is to define a couple of commands
+% for reasons of compatibility with \file{german.sty}.
+% \changes{Version 2.6f}{1998/06/07}{Now use \cs{shorthandon} and
+% \cs{shorthandoff}}
+% \begin{macrocode}
+\def\mdqon{\shorthandon{"}}
+\def\mdqoff{\shorthandoff{"}}
+\def\ck{\bbl@allowhyphens\discretionary{k-}{k}{ck}\bbl@allowhyphens}
+% \end{macrocode}
+% \end{macro}
+% \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.
+% \changes{Version 2.6d}{1996/11/02}{Now use \cs{ldf@finish} to wrap
+% up}
+% \begin{macrocode}
+\ldf@finish\CurrentOption
+% \end{macrocode}
+% \iffalse
+%</germanb>
+% \fi
+%
+%
+% \subsection{\file{austrian.ldf}, \file{german.ldf} and \file{swissgerman.ldf}}
+%
+% \changes{Version 2.7}{2013/12/13}{Generate portmanteau files \file{austrian.ldf},
+% \file{german.ldf} and \file{swissgerman.ldf}.}
+%
+% \Babel\ expects a \file{\langvar{}.ldf} file for each \langvar. So we create portmanteau
+% ldf files for \Lopt{austrian}, \Lopt{german} and \Lopt{swissgerman}.\footnote{%
+% For \Lopt{austrian} and \Lopt{german}, this is not strictly necessary,
+% since \babel\ provides aliases for these languages (pointing to \Lopt{germanb}).
+% 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{germanb.ldf}, which does the real work:
+%
+% \iffalse
+%<*austrian|german|swissgerman>
+% \fi
+% \begin{macrocode}
+\input germanb.ldf\relax
+% \end{macrocode}
+% \iffalse
+%</austrian|german|swissgerman>
+% \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{gerdoc} Raichle, Bernd:
+% \emph{German}.
+% \url{http://www.ctan.org/pkg/german}.
+% \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}.
+% \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
diff --git a/macros/latex/contrib/babel-contrib/german/germanb.pdf b/macros/latex/contrib/babel-contrib/german/germanb.pdf
new file mode 100644
index 0000000000..e52056aa87
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/germanb.pdf
Binary files differ
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
diff --git a/macros/latex/contrib/babel-contrib/german/ngermanb.pdf b/macros/latex/contrib/babel-contrib/german/ngermanb.pdf
new file mode 100644
index 0000000000..1bb41c513d
--- /dev/null
+++ b/macros/latex/contrib/babel-contrib/german/ngermanb.pdf
Binary files differ