% \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{470}
%
% \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}
%<swiss>\ProvidesLanguage{swissgerman}
%<germanb>\ProvidesLanguage{germanb}
%\fi
%\ProvidesFile{germanb.dtx}
        [2016/11/02 v2.9 German support for babel (traditional 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]{caption}
\usepackage{marginnote}
\newcommand*\TeXhax{\TeX hax}
\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]{\textsf{#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.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 \texttt{swissgerman}.}
% \changes{Version 2.7}{2013/12/13}{Revised \texttt{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 (traditional~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 the \babel\ language definition file \file{germanb.ldf}
%      for German (traditional orthography).
%      The file is part of the \textsf{babel-german} bundle.
%    \end{abstract}
%
%    \section{Aim and usage}
%
%    The file \file{germanb.ldf} provides the \babel\ package with all language definition
%    macros (language specific strings and settings) for the German language, including
%    the Austrian and Swiss varieties of German. Furthermore, it assures that the
%    correct hyphenation patterns for the respective language or variety are
%    used.\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}).
%    The re-implementation was done by Johannes Braams.}
%    The file adheres to the traditional (1901--1996) orthography.
%    For reformed (post-1996) German orthography support, please refer to the
%    complementary |ngermanb.ldf| file.
%
%    In order to use the language definitions provided here, you need to use
%    the \babel\ package and pass the respective language name as an
%    option, either of
%
%    \begin{itemize}
%       \setlength{\itemsep}{0pt}
%       \item |\usepackage[german]{babel}|
%       \item |\usepackage[austrian]{babel}|
%       \item |\usepackage[swissgerman]{babel}|
%    \end{itemize}
%    Please 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 traditional German
%    spelling: consonantial character combinations that change in the context
%    of hyphenations.
%    Other shorthands are provided for frequently used
%    special characters as well for better control of hyphenation,
%    line breaks and ligatures.
%    Table~\ref{tab:german-quote} provides an overview of the shorthands
%    that are provided by \file{germanb.ldf}.
%
%    \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{}|).             \tabularnewline
%      |"z|	& 	German \graph{\ss} (shorthand for |\ss{}|). 
% 			The difference to |"s| is the uppercase version.	\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}. 		\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
%      |""|	& 	A breakpoint that does not output a hyphen if the line 
%             		break is performed (useful for compound words with 
%             		hyphen, e.\,g., |(Un-)""Sinn|).           		\tabularnewline
%      |"~|	& 	An explicit hyphen without a breakpoint. Useful for
%              		cases where the hyphen should stick at the following
%			word, e.\,g., |bergauf und "~ab| .          		\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.      			\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}
%
%    Table~\ref{tab:more-quote} lists some \babel\ macros for quotation marks
%    that might be used as an alternative to the quotation mark shorthands
%    provided by \file{germanb.ldf}.
%    \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}
%
% \StopEventually{}
%
%    \section{Implementation}
%
%    \subsection{General settings}
%
%    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}
% \iffalse
%<*germanb>
% \fi
%    \begin{macrocode}
\def\bbl@tempa{germanb}
\ifx\CurrentOption\bbl@tempa
  \def\CurrentOption{german}
  \ifx\l@german\@undefined
    \@nopatterns{German}
    \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, \texttt{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 \texttt{austrian} as a dialect of \texttt{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 \texttt{austrian} is loaded}
% \changes{Version 2.9}{2016/11/02}{Do not attempt to load \cs{l@austrian}, which does not exist}
%    \begin{macrocode}
\def\bbl@tempa{austrian}
\ifx\CurrentOption\bbl@tempa
  \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
%    \texttt{swissgerman} hyphenation patterns and fall back to
%    \texttt{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 \texttt{swissgerman} is not loaded}
%    \begin{macrocode}
\def\bbl@tempa{swissgerman}
\ifx\CurrentOption\bbl@tempa
  \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
%                                    \texttt{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}%    % oder nur: Inhalt
  \def\listfigurename{Abbildungsverzeichnis}%
  \def\listtablename{Tabellenverzeichnis}%
  \def\indexname{Index}%
  \def\figurename{Abbildung}%
  \def\tablename{Tabelle}%                  % oder: Tafel
  \def\partname{Teil}%
  \def\enclname{Anlage(n)}%
  \def\ccname{Verteiler}%                   % oder: Kopien an
  \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 \texttt{german} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsgerman} if
%                                    \texttt{german} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{german}
\ifx\CurrentOption\bbl@tempa
  \@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
%    \texttt{austrian} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsaustrian} if
%                                    \texttt{austrian} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{austrian}
\ifx\CurrentOption\bbl@tempa
  \@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
%    \texttt{swissgerman} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsswissgerman} if
%                                    \texttt{swissgerman} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{swissgerman}
\ifx\CurrentOption\bbl@tempa
  \@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.
% \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
%                                    \texttt{german} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{german}
\ifx\CurrentOption\bbl@tempa
  \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.
%    The result is identical to German.
%    \changes{Version 2.8}{2016/11/01}{Only define \cs{dateswissgerman} if
%                                      \texttt{swissgerman} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{swissgerman}
\ifx\CurrentOption\bbl@tempa
  \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.
% \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
%                                    \texttt{austrian} is requested.}
%    \begin{macrocode}
\def\bbl@tempa{austrian}
\ifx\CurrentOption\bbl@tempa
  \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}
%    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
%    \texttt{austrian} and \texttt{swissgerman}.}
%    \begin{macrocode}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
  \bbl@deactivate{"}}
%    \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
%    \texttt{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 |"|.
%    \begin{macrocode}
\begingroup \catcode`\"12
\def\x{\endgroup
  \def\@SS{\mathchar"7019 }
  \def\dq{"}}
\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}\allowhyphens}{\ddot a}}
\declare@shorthand{german}{"o}{\textormath{\"{o}\allowhyphens}{\ddot o}}
\declare@shorthand{german}{"u}{\textormath{\"{u}\allowhyphens}{\ddot u}}
\declare@shorthand{german}{"A}{\textormath{\"{A}\allowhyphens}{\ddot A}}
\declare@shorthand{german}{"O}{\textormath{\"{O}\allowhyphens}{\ddot O}}
\declare@shorthand{german}{"U}{\textormath{\"{U}\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}{\textormath{\ss}{\@SS{}}}
\declare@shorthand{german}{"S}{\SS}
\declare@shorthand{german}{"z}{\textormath{\ss}{\@SS{}}}
\declare@shorthand{german}{"Z}{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}\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 \texttt{dutch.ldf})}
%    \begin{macrocode}
\declare@shorthand{german}{"-}{\nobreak\-\bbl@allowhyphens}
\declare@shorthand{german}{"|}{%
  \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
              \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{\allowhyphens\discretionary{k-}{k}{ck}\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 \texttt{austrian}, \texttt{german} and \texttt{swissgerman}.\footnote{%
%    For some \texttt{austrian} and \texttt{german}, this is not strictly necessary,
%    since \babel\ provides aliases for these languages (pointing to \texttt{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|swiss>
% \fi
%    \begin{macrocode}
\input germanb.ldf\relax
%    \end{macrocode}
% \iffalse
%</austrian|german|swiss>
% \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{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}.
%  \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
