%%\def\filename{german3.sty}
%%\def\fileversion{1.0c}
%%\def\filedate{92/04/08}
%%\def\docdate{92/03/11}
%%
%% \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         \~}
%%
%% This is GERMAN3.TEX or GERMAN3.STY, Vers. 1.0a, 10 Mar 1992
%    by Rainer Sch\"opf and Bernd Raichle
%    based on german.sty, version 2.4a
%    maintained by Rainer Sch\"opf (ZIB Berlin)
%    using ideas by H.Partl (TU Wien, Uni.f.Bodenkultur Wien),
%    W.Appelt, F.Hommes et al. (GMD St.Augustin),
%    T.Hofmann (CIBA-GEIGY Basel), N.Schwarz (Uni Bochum),
%    J.Schrod (TH Darmstadt), D.Armbruster (Uni Stuttgart),
%    R.Sch\"opf (Uni Mainz, Uni Heidelberg, ZIB Berlin),
%    F.Mittelbach (Uni Mainz, EDS R\"usselsheim),
%    J.Knappen (Uni Mainz), P.Breitenlohner (MPI M\"unchen),
%    and many others.
%%
%% DOCUMENT STYLE OPTION for writing german texts
%% with TeX version 3.x (Plain TeX) or with LaTeX version 2.09.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% THIS STYLE OPTION IS STILL EXPERIMENTAL!
%% DO NOT RELY ON ANY SPECIFIC FEATURE!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%
%% Copying of this file is authorized only if either
%% (1) you make absolutely no changes to your copy, including name, or
%% (2) if you do make changes, you name it something other than
%%     german3.doc, german3.tex or german3.sty.
%% This restriction helps ensure that all styles developed for
%% DANTE e.V. (the users group of german speaking TeX users)
%% remain identical.
%%
%
% Error reports please to:
%         Rainer Sch"opf
%         Konrad_zuse_zentrum f"ur Informationstechnik Berlin
%         Heilbronner Str. 10
%         W-1000 Berlin 31
%         Federal Republic of Germany
% Email:  Schoepf@sc.ZIB-Berlin.de
%
%
%
% It can be called via
%    \input german3
% or (with LaTeX) via
%    \documentstyle[german3]{anystyle}
%
% This file conforms to the standard for ``Einheitliche deutsche
% TeX-Befehle'' as proposed at the 6th Meeting of German TeX Users
% in M\"unster, October 1987.
% It is available by:
%  * anonymous ftp: rusinfo.rus.uni-stuttgart.de [129.69.1.12]
%        in soft/tex/latex-style-supported/german
%  * E-mail: send a message containing the line "help" or
%        "send soft/tex/latex-style-supported/german/german3.sty"
%        to  mail-server@rusinfo.rus.uni-stuttgart.de
%  * Bitnet: "GET GERMAN3 STY" from Bitnet server listserv@dhdurz1.bitnet
%
% Commands to be used by the end users:
% "a                 for Umlaut-a (like \"a), also for all other vowels.
% "s                 for sharp s  (like \ss{}).
% "ck                for ck to be hyphenated as k-k.
% "ff                for ff to be hyphenated as ff-f, also for certain
%                    other consonants.
% "S                 for SS to be \uppercase{"s}
% "A, "CK, "FF etc.  uppercase versions of the above.
% "|                 to separate ligatures.
% "-                 like \-, but allowing hyphenation in the rest of
%                    the word (i.e., in the parts before and after the
%                    hyphenation point added by "-)
% ""                 like "-, but producing no hyphen sign (for x-""y).
% "~                 for an unbreakable hyphen (for `bergauf und "~ab').
% "` or \glqq        for german left  double quotes   (similar to ,,)
% "' or \grqq        for german right double quotes   (similar to ``)
%       \glq         for german left  single quotes   (similar to , )
%       \grq         for german right single quotes   (similar to ` )
% "< or \flqq        for french left guillemets       (similar to <<)
% "> or \frqq        for french right guillemets      (similar to >>)
% \flq               for single version of \flqq      (similar to <)
% \frq               for single version of \frqq      (similar to >)
% "= or \dq          for the original quotes character (")
% \selectlanguage{n} to select the main language of the document,
%                    specified by the language name <n>, which should
%                    be one of the following names:
%                    german, austrian, USenglish, english, french;
%                    - this changes the date format, captions and (if
%                    `german.sty' is properly installed) hyphenation.
%                    To be compatible with older versions of german.sty
%                    it is allowed to specify the names as control
%                    sequences (e.g. \german).
% \originalTeX       to restore everything to the original settings
%                    of TeX and LaTeX (well, almost everything).
% \germanTeX         to re-activate the german settings.
%
%
% Obsolete command, provided for compatibility with existing
% applications:
% \ck                for ck to be hyphenated as k-k (like "ck).
%
%
% Obsolete command, incompatible with the former definition:
% \setlanguage       the former name of \selectlanguage
%                    TeX 3.x introduces a new primitive with the
%                    same name (DO NOT USE \setlanguage!)
%
%
% Lower level commands and features:
% \umlautlow         redefines the Umlaut accent such that the dots come
%                    nearer to the letter and that hyphenation is enabled
%                    in the rest of the word.
% \umlauthigh        restores \" to its original meaning.
% \ss                is \lccode'd to enable hyphenation.
% \mdqon             makes " an active (meta-) character that does the
%                    pretty things described above.
% \mdqoff            restores " to its original meaning.
% \dospecials,\@sanitize  are extended to include the ".
% \dateaustrian, \dategerman, \dateenglish, \dateUSenglish, \datefrench
%                    redefine \today to use the respective date format.
% \captionsgerman, \captionsenglish, \captionsfrench
%                    switch to german, english or french chapter captions
%                    and the like, resp. This will have an effect only
%                    if the document style files use the symbolic names
%                    \chaptername etc. instead of the original english
%                    words. ("International LaTeX")
% \language          a count that may be set by \selectlanguage to switch
%                    hyphenation patterns or other language dependent
%                    items. It is an internal count register in TeX 3.x
%                    and ML-TeX.
%
% Finally, \germanTeX is switched on.
%
%
% Installation:
%
% If you want to get rid of most comments, use the `docstrip' utility,
% which can be found in the `multicol' style-option package.
% You are NOT ALLOWED to distribute the stripped file alone!
%   
% When used with TeX 3.x (or MLTeX), IniTeX can load more than one set
% of hyphenation patterns.  `german.sty' assumes that the control
% sequence names \l@german, \l@austrian, \l@USenglish, \l@english and
% \l@french specify the value of \language for the language-specific
% set of hyphenation patterns.
% Set these control sequences to correct values when dumping a new
% format with IniTeX, otherwise TeX uses incorrect (or no) hyphenation
% patterns.
% If these control sequences are undefined, english/USenglish uses
% \language position 0, german/austrian 1 and french 2.
%
%
% Notes:
%
% This file can be used both with Plain TeX and with LaTeX and other
% macro packages, and with the original TeX and LaTeX fonts. Usage of
% german hyphenation patterns is recommended to accompany this style
% file when writing german texts.
%
% The file should be read in vertical mode only (usually at the
% beginning of the document) to avoid spurious spaces.
%
% Multiple calls of this file (e.g. at the beginning of each subfile)
% will do no harm. Only the first call (i.e., if \mdqon is undefined)
% performs all the definitions and settings. Later calls only switch
% to \germanTeX.
%
% The catcode of @ remains unchanged after processing of this file.
% All of the definitions are local (except one \newdimen and three
% \newcount), the switching on of the german options is local.
%
% The commands \mdqon, \mdqoff, \originalTeX, \germanTeX, and
% \selectlanguage are ``fragile'' with LaTeX and should not be used
% within arguments of macro calls.
%
% In Plain TeX, `\protect' should be \let to `\relax' normally and to
% something like `\string' inside the arguments of `\write' or
% `\message' (see LaTeX.tex for all the details).
%
% The command \umlautlow may need adaption to font parameters (see
% comments there for details).
%
% The commands \flqq, \frqq, and \datefrench in their
% present forms do not work properly with all font sizes and styles,
% they still require a better solution. A LaTeX-only solution might be
% to use {\ly(}, {\ly(\kern-0.166em(}, {\ly)} etc., but this would not
% work with Plain TeX.
%
% The current version has been designed for TeX version 3 and with
% MLTeX (by M. Ferguson). Basic support for more than one set of
% hyphenation patterns is included.
%
% Since " has a different catcode (\active) and a different meaning
% than in original TeX, special care has to be taken if " is to be
% used in its original meaning for hexadecimal constants (explicitly,
% or implicitely by math-delimiters or other macros when expanded).
%
%
% Known "Bugs":
%
%  -- If a hexadecimal number begins with a letter, TeX reports
%     ``Missing number, treated as zero''.
%  >> Use "0A0-"0FF instead of "A0-"FF or make sure that the catcode of
%     the doublequote is `other' when reading a hexadecimal constant.
%
%  -- Spaces after active doublequotes are ignored.  E.g. the input of
%     ``M" unster'' produces the same as ``M"unster''.
%  -- The use of things like "} in the text causes an error.
%  -- If a doublequote is followed by a group, e.g. "{a"a}, it is
%     possible that TeX reports ``Missing \endcsname inserted''.
%  >> Use the ''-ligature or "{} or \verb+"+ to produce normal
%     doublequotes.
%

% First check whether we have a TeX3 here...
%
\expandafter\ifx\csname inputlineno\endcsname\relax
  \message{german3 can only be used with TeX3}\endinput\fi

% \ifundefined{mdqon} or \mdqon=\relax
% \then go ahead \else switch to \germanTeX and do nothing
\expandafter\ifx\csname mdqon\endcsname\relax
\else \germanTeX \expandafter\endinput \fi

\message{Document Style Option `german3', Version 1.0c of 92/04/08.}
\message{THIS STYLE OPTION can ONLY BE USED TOGETHER WITH DC TEXT FONTS!!!}
\message{THIS STYLE OPTION IS STILL EXPERIMENTAL!}
\message{DO NOT RELY ON ANY SPECIFIC FEATURE!}


% \ifundefined{protect} \then define it
\expandafter\let\expandafter\protect\csname protect\endcsname


% save current category code of `@'
\chardef\atcode=\catcode`\@
\catcode`\@=11 % \makeatletter

% \allowhyphens simulates a word boundary,
% kerning information will be lost!
\def\allowhyphens{\penalty\@M \hskip\z@skip}
%                {\nobreak    \hskip 0pt plus 0pt\relax}

\let\umlauthigh=\relax
\let\umlautlow=\relax


%
%  Quotes
%  ------
%
% make sure that the category codes of the
% used quote characters are correct
\catcode14=12 \catcode15=12 % \flq  \frq
\catcode16=12 \catcode18=12 % \grqq \glqq
\catcode19=12 \catcode20=12 % \flqq \frqq

\def\glqq{^^12}
\def\grqq{^^10}
\def\@glq{\char13 }% cannot write ^^d since this ends the line
\def\glq{\protect\@glq}
% \hskip instead of \kern to make sure that we leave vertical mode
\def\@grq{\hskip-.07em`\kern.07em}
\def\grq{\protect\@grq}
\def\flqq{^^13}
\def\frqq{^^14}
\def\flq{^^0e}
\def\frq{^^0f}


% add doublequotes to the definitions of dospecials and sanitize:
\begingroup
  \def\do{\noexpand\do\noexpand}%
  \edef\x{\endgroup
    \def\noexpand\dospecials{\dospecials\do\"}}%
\x
% not ( \ifundefined{@sanitize} or \@sanitize=\relax ) = if LaTeX
\expandafter\ifx\csname @sanitize\endcsname\relax \else
  \begingroup
    \def\@makeother{\noexpand\@makeother\noexpand}%
    \edef\x{\endgroup
      \def\noexpand\@sanitize{\@sanitize\@makeother\"}}%
  \x
\fi

\def\mdqon{\catcode`\"\active}
\def\mdqoff{\catcode`\"12 }

\def\ck{\allowhyphens\discretionary{k-}{}{c}k\allowhyphens}


%
%  active doublequote mechanism
%  ----------------------------
%
\begingroup \mdqoff
\def\x{\endgroup
%  \def\@UMLAUT{\"}%
  \def\@MATHUMLAUT{\ddot}%
%  \def\@SS{\mathchar"7019 }%
  \def\dq{"}}
\x


% For all arguments of an active doublequote which should be treated in
% a special way, we define a macro with the argument text in the name.
%
% \dq@macro#1#2 constructs this name out of #2 before calling #1.
%
% - If the expansion of \dq@macro results in another call of \dq@macro
%   the inner macro shouldn't contain unexpandable primitives like
%   \relax. Otherwise TeX warns about a "Missing \endcsname inserted."
%   Example: Gr"{u"se})
% - When this macro is used in the following code, a `@' is added at
%   the end of argument #2, because we use \string in \dq@prtct to
%   protect the argument of an active doublequote (Example: "").
%
\def\dq@macro#1#2{\expandafter#1\csname @dq@\string #2@dq\endcsname}


% The definition of the active doublequote macro:
%
% If used with DC/EC-fonts, correct kerning and ligature building is
% inhibited by \protect (with meaning \relax). This is checked in
% the macro \@@active@dq.
%
\def\@active@dq#1{%
  \dq@macro\ifx{#1@}\relax
    \expandafter\normal@dq
  \else
    \expandafter\@@active@dq
  \fi {#1}}


% The braces of {#1} in \@active@dq are necessary if someone wants to
% define a doublequote macro for things like "{}. They ensure that
% \active@dq is called with the correct argument.
% For \normal@dq we have to delete the braces and insert a normal
% doublequote.
%
\def\normal@dq#1{\dq #1}


% \protect (with meaning \relax) should expand to \empty.
% This is necessary to allow correct kerning and ligatures when
% these macros are used with the new DC-/EC-fonts.
% The additional hack `\dq@prtct\dq@eprtct' is necessary if
% \protect is set to \noexpand or \string (in \write and \mark
% commands; see LaTeX.tex) and the argument is an expandable token
% (e.g., when using "").
%
\def\@@active@dq#1{\ifx\protect\relax \else \expandafter\protect \fi
  \active@dq\dq@prtct ^^J\dq@eprtct{#1@}}

% \dq@prtct is used to protect the argument (with \string).
% If the "x command is written to the toc-file (in LaTeX), it is
% written and read more than once. To make sure that this is done
% properly, this macro expands to "itself" (\string\dq@prtct).
% To get rid of unwanted tokens (\dq@prtct) in \active@dq, we use
% \dq@eprtct as delimiter.
%
\def\dq@prtct#1\dq@eprtct#2{%
  \string\dq@prtct ^^J\dq@eprtct{\string#2}}

% The following assignment makes sure that \dq@eprtct is written
% unexpanded to the output file.
% 
\let\dq@eprtct=\relax


% For combinations "x which should be treated in a special way,
% \active@dq is called with `x' as argument.
% In the current implementation the actions for argument #2 are saved
% in macros with name \dq@macro{..}{#2@}. (The `@' is inserted in
% \@@active@dq.) These macros expand to two groups containing the
% action for text and for math mode.
% The support of other ``modes'' (e.g., DC/EC-Fonts) can be implemented
% in this macro.
%
\def\active@dq#1\dq@eprtct#2{%
  \csname dq@\ifmmode second\else first\fi
%     \dq@macro has to be expanded three times:
%     1. \dq@macro          --> \expandafter..\csname...
%     2. \csname...         --> control seqence
%     3. control seqence    --> {text mode}{math mode}
    \expandafter\expandafter\expandafter\expandafter
  \dq@macro\endcsname{#2}}
%
\def\dq@first#1#2{#1}
\def\dq@second#1#2{#2}


% The definition of a "-macro is done with...
%
\def\def@dqmacro#1#2#3{\dq@macro\def{#1@}{{#2}{#3}}}

\def\let@dqmacro#1#2{\begingroup
  \edef\x{\endgroup \let
    \dq@macro\noexpand{#1@}\dq@macro\noexpand{#2@}}%
  \x}


% Definitions for all doublequote macros...
% (The empty groups after some macros are necessary for \write commands,
% otherwise spaces after these macros will be ignored.)
%
% umlauts:
%
\def@dqmacro{a}{^^e4}{\@MATHUMLAUT a}
\def@dqmacro{o}{^^f6}{\@MATHUMLAUT o}
\def@dqmacro{u}{^^fc}{\@MATHUMLAUT u}
\def@dqmacro{A}{^^c4}{\@MATHUMLAUT A}
\def@dqmacro{O}{^^d6}{\@MATHUMLAUT O}
\def@dqmacro{U}{^^dc}{\@MATHUMLAUT U}
%
% german es-zet:
%
\def@dqmacro{s}{^^ff}{^^ff}
\def@dqmacro{S}{^^df}{^^df}
%
% german and french quotes:
%
\def@dqmacro{`}{^^12}{^^12}
\def@dqmacro{'}{^^10}{^^10}
\def@dqmacro{<}{^^13}{^^13}
\def@dqmacro{>}{^^14}{^^14}
%
% tremas:
%
\def@dqmacro{e}{^^eb}{\@MATHUMLAUT e}
\def@dqmacro{E}{^^cb}{\@MATHUMLAUT E}
\def@dqmacro{i}{^^ef}{\@MATHUMLAUT\imath}
\def@dqmacro{I}{^^cf}{\@MATHUMLAUT I}
%
% misc.:
%
\def@dqmacro{-}{\allowhyphens\-\allowhyphens}%
                {\allowhyphens\-\allowhyphens}
\def@dqmacro{|}{\allowhyphens
    \discretionary{-}{}{\kern.03em}\allowhyphens}{}
\def@dqmacro{"}{\hskip\z@skip}{\hskip\z@skip}
%
\def@dqmacro{~}{\leavevmode\hbox{-}}{-}
\def@dqmacro{=}{\dq}{\dq}
%
% discretionaries:
%
\def\dq@disc#1#2{\allowhyphens\discretionary{#2-}{}{#1}\allowhyphens}
%
\def@dqmacro{c}{\dq@disc ck}{c}
\def@dqmacro{C}{\dq@disc CK}{C}
\def@dqmacro{f}{\dq@disc f{ff}}{f}
\def@dqmacro{F}{\dq@disc F{FF}}{F}
\def@dqmacro{l}{\dq@disc l{ll}}{l}
\def@dqmacro{L}{\dq@disc L{LL}}{L}
\def@dqmacro{m}{\dq@disc m{mm}}{m}
\def@dqmacro{M}{\dq@disc M{MM}}{M}
\def@dqmacro{n}{\dq@disc n{nn}}{n}
\def@dqmacro{N}{\dq@disc N{NN}}{N}
\def@dqmacro{p}{\dq@disc p{pp}}{p}
\def@dqmacro{P}{\dq@disc P{PP}}{P}
\def@dqmacro{t}{\dq@disc t{tt}}{t}
\def@dqmacro{T}{\dq@disc T{TT}}{T}


%
%  Dates and Captions
%  ------------------
%
\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}
\def\dategerman{\def\today{\number\day.~\month@german
  \space\number\year}}
\def\dateaustrian{\def\today{\number\day.~\ifnum 1=\month
  J\"anner\else \month@german\fi \space\number\year}}
\def\month@english{\ifcase\month \or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi}
\def\dateUSenglish{\def\today{\month@english
  \space\number\day, \number\year}}
\def\dateenglish{\def\today{\number\day \ifcase\day \or
  st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or %  1..10
  th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or % 11..20
  st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or % 21..30
  st\fi
  ~\month@english \space\number\year}}
\def\datefrench{\def\today{\number\day \ifnum1=\day \/$^{\rm er}$\fi
  \space\ifcase\month \or
  janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
  juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi
  \space\number\year}}


% Here is, how you can modify the LaTeX document style files and option
% files, to benefit from the following \captionsxxx commands. Def's like
%  \def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
%  \@starttoc{toc}}
% should be redefined by def's like
%  \def\contentsname{Contents} % <---
%  \def\tableofcontents{\section*{\contentsname
%  \markboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}
%  \@starttoc{toc}}
% (it's best to put all these new lines to the end of the original
% files), and of course, you should modify the change date in the file
% header and in the \typeout command.
%
% You need not do this yourself - rather, retrieve the new LaTeX 2.09
% distribution of January 1992 (or newer).

\def\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)}% % oder: Beilage(n)
\def\ccname{Verteiler}%   % oder: Kopien an
\def\headtoname{An}%
\def\pagename{Seite}%
\def\seename{siehe}%
\def\alsoname{siehe auch}}

\let\captionsaustrian=\captionsgerman

\def\captionsenglish{%
\def\prefacename{Preface}%
\def\refname{References}%
\def\abstractname{Abstract}%
\def\bibname{Bibliography}%
\def\chaptername{Chapter}%
\def\appendixname{Appendix}%
\def\contentsname{Contents}%
\def\listfigurename{List of Figures}%
\def\listtablename{List of Tables}%
\def\indexname{Index}%
\def\figurename{Figure}%
\def\tablename{Table}%
\def\partname{Part}%
\def\enclname{encl}%
\def\ccname{cc}%
\def\headtoname{To}%
\def\pagename{Page}%
\def\seename{see}%
\def\alsoname{see also}}

\let\captionsUSenglish=\captionsenglish

\def\captionsfrench{%
\def\prefacename{Pr\'eface}%
\def\refname{R\'ef\'erences}%
\def\abstractname{R\'esum\'e}%
\def\bibname{Bibliographie}%
\def\chaptername{Chapitre}%
\def\appendixname{Annexe}%
\def\contentsname{Table des mati\`eres}%
\def\listfigurename{Liste des figures}%
\def\listtablename{Liste des tableaux}%
\def\indexname{Index}%
\def\figurename{Figure}%
\def\tablename{Tableau}%
\def\partname{Partie}%
\def\enclname{P.~J.}%
\def\ccname{Copie \`a}%
\def\headtoname{A}%
\def\pagename{Page}%
\def\seename{voir}%
\def\alsoname{voir aussi}}%

%
%  Language Specific Settings
%  --------------------------
%
\let\extrasUSenglish=\relax \let\noextrasUSenglish=\empty
\let\extrasenglish=\relax \let\noextrasenglish=\empty
\def\extrasgerman{\frenchspacing
  \lefthyphenmin\tw@ \righthyphenmin\tw@}
\def\noextrasgerman{%
  \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi
  \lefthyphenmin\the\lefthyphenmin \righthyphenmin\the\righthyphenmin}
\let\extrasaustrian=\extrasgerman \let\noextrasaustrian=\noextrasgerman
\def\extrasfrench{\frenchspacing}
\def\noextrasfrench{%
  \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi}

%
%  Switching Languages
%  -------------------
%
% If the appropriate \language values for the hyphenation patterns
% loaded with IniTeX are not given, provide default values.
% (The default values are:
% USenglish=english=0, german=austrian=1, french=2.)
%
\expandafter\ifx\csname l@english\endcsname\relax
  \expandafter\ifx\csname l@USenglish\endcsname\relax
    \chardef\l@english=0
  \else
    \chardef\l@english=\l@USenglish
  \fi
\fi
\expandafter\ifx\csname l@USenglish\endcsname\relax
  \chardef\l@USenglish=\l@english
\fi
%
\expandafter\ifx\csname l@german\endcsname\relax
  \expandafter\ifx\csname l@austrian\endcsname\relax
    \chardef\l@german=1
  \else
    \chardef\l@german=\l@austrian
  \fi
\fi
\expandafter\ifx\csname l@austrian\endcsname\relax
  \chardef\l@austrian=\l@german
\fi
%
\expandafter\ifx\csname l@french\endcsname\relax
  \chardef\l@french=2 % incompatible with older versions
\fi


\let\original@TeX=\relax

\def\p@selectlanguage#1{\relax \original@TeX
  \expandafter\ifx\csname l@#1\endcsname\relax
    \errhelp{Your command will be ignored, type <return> to proceed}%
    \errmessage{You haven't defined the language #1 yet}%
  \else
    \edef\original@TeX{\csname noextras#1\endcsname
                       \let\original@TeX\relax}%
    \csname date#1\endcsname
    \csname captions#1\endcsname
    \csname extras#1\endcsname
    \language \csname l@#1\endcsname\relax
  \fi}

\def\selectlanguage#1{\protect\p@selectlanguage{%
  \ifnum\escapechar=\expandafter`\string#1\empty
  \else \string#1\empty\fi}}

%
%  TeX 2/TeX 3 compatibility
%  -------------------------
%
%  If \language has not yet been declared neither by Ferguson's
%  ``Multilingual T^eX'' nor by TeX 3, complain:
%
% \ifundefined{language}
\expandafter\ifx\csname language\endcsname\relax
  \errmessage{This file can only be used with TeX3 or MLTeX!}
\fi
%
%  TeX 3 introduces two new internal count registers:
%
\expandafter\ifx\csname lefthyphenmin\endcsname\relax
  \csname newcount\endcsname\lefthyphenmin
\fi
\expandafter\ifx\csname righthyphenmin\endcsname\relax
  \csname newcount\endcsname\righthyphenmin
\fi
%
%  TeX 3 has another new primitive: \setlanguage. It can be used
%  only in hmode and has ``real'' effects in inner mode only!
%  If not defined, try to simulate TeX 3's \setlanguage.
%
% \ifundefined{setlanguage} (= TeX version < 3 )
\expandafter\ifx\csname setlanguage\endcsname\relax
  \def\setlanguage{\relax
    \ifhmode \else
      \errhelp{Use \selectlanguage to switch languages.}%
      \errmessage{\setlanguage allowed only in horizontal mode}%
    \fi
    \begingroup\afterassignment\endgroup\count@=}
\fi


\begingroup \mdqon
\def\x{\endgroup
  \def\originalTeX{\mdqoff \let"\dq \selectlanguage{USenglish}}
  \def\germanTeX{\mdqon \let"\@active@dq \selectlanguage{german}}}
\x


\catcode`\@=\atcode % return to previous catcode

% Now, switch on what is appropriate for german:
%
\germanTeX

% This is the end of GERMAN3.STY/TEX.
\endinput

