summaryrefslogtreecommitdiff
path: root/language/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 /language/german
Initial commit
Diffstat (limited to 'language/german')
-rw-r--r--language/german/00readme.1st160
-rw-r--r--language/german/betatest/00readme.1st7
-rw-r--r--language/german/gerdoc.dvibin0 -> 83260 bytes
-rw-r--r--language/german/gerdoc.pdfbin0 -> 207441 bytes
-rw-r--r--language/german/gerdoc.tex1488
-rw-r--r--language/german/german.MISSING10
-rw-r--r--language/german/german.dtx2331
-rw-r--r--language/german/german.ins84
-rw-r--r--language/german/german.sty674
-rw-r--r--language/german/ngerman.sty680
10 files changed, 5434 insertions, 0 deletions
diff --git a/language/german/00readme.1st b/language/german/00readme.1st
new file mode 100644
index 0000000000..7b7171a222
--- /dev/null
+++ b/language/german/00readme.1st
@@ -0,0 +1,160 @@
+%% 00readme.1st
+%%
+%% README for the `german' files, version 2.5e of 1998-07-08
+%%
+%% Copyright (C) 1998 by B.Raichle
+%% All rights reserved.
+%%
+
+Dieses Verzeichnis enthaelt Makropakete zum Schreiben
+deutschsprachiger Texte. `german.sty' unterstuetzt die
+traditionelle, `ngerman.sty' die neue Rechtschreibung.
+
+Zur Nutzung der Makropakete werden zusaetzlich die deutschen
+Silbentrennmuster benoetigt; sie sind im CTAN zu finden als:
+
+ language/hyphenation/ghyph31.tex (alte Rechtschreibung)
+ language/hyphenation/gnhyph01.tex (neue Rechtschreibung)
+
+
+
+Uebersicht
+----------
+
+Die vorliegende Verteilung enthaelt folgende Dateien:
+
+ german.sty -- das Makropaket fuer die alte Rechtschreibung
+ ngerman.sty -- das Makropaket fuer die neue Rechtschreibung,
+ hyphxmpl.cfg -- Beispiel fuer die Konfigurationsdatei
+ `hyphen.cfg' zum Laden der Trennmuster
+ in LaTeX2e (Naeheres siehe `gerdoc.dvi')
+
+ gerdoc.dvi -- deutschsprachige Anleitung
+ gerdoc.tex -- LaTeX-Quelltext
+
+ german.dtx -- Docstrip-Archiv,
+ enthaelt die Makropakete u. hyphxmpl.cfg
+ german.ins -- Installationsskript fuer Docstrip
+
+Falls Sie das Docstrip-Archiv selbst entpacken wollen, benoetigen Sie
+`docstrip.tex' v2.4 oder neuer, das in der LaTeX2e-Verteilung enthalten
+ist. Das Installationsskript laesst sich sowohl mit LaTeX als auch mit
+Plain-TeX ausfuehren.
+
+
+
+Dokumentation
+-------------
+
+Eine Anleitung zur Installation und Verwendung der Makropakete und zur
+Installation der Trennmuster finden Sie in der Datei `gerdoc.dvi'.
+Der dazugehoerigen Quelltext `gerdoc.tex' laesst sich mit LaTeX2e oder
+LaTeX 2.09 uebersetzen. Eine mit Plain-TeX uebersetzbare Version
+existiert leider nicht.
+
+
+
+Interna
+-------
+
+Die Dokumentation, die die Implementierung der Makropakete beschreibt,
+erhalten Sie durch Uebersetzen der Datei `german.dtx' mit LaTeX. Als
+`normaler' (La)TeX-Nutzer benoetigen Sie diese Dokumentation _nicht_.
+Sie ist nur zur internen Dokumentation gedacht und es werden zum
+Verstaendnis tiefergehende TeX-Kenntnisse vorausgesetzt.
+
+
+
+Fehlermeldungen
+---------------
+
+Bitte senden Sie Fehlermeldungen an:
+
+ Bernd Raichle <raichle@Informatik.Uni-Stuttgart.DE>
+oder an
+ Koordinator German-Style <german@dante.de>
+
+
+
+!!! AENDERUNGEN !!! Achtung !!! AENDERUNGEN !!! Achtung !!!
+-----------------------------------------------------------
+
+Unterschiede zwischen Version 2.5d und 2.5e:
+
+ * Fuer Texte in neuer Rechtschreibung wird zusaetzlich das Paket
+ `ngerman' bereitgestellt.
+
+ * In den then- und else-Zweigen des Befehls \iflanguage duerfen nun
+ Makros stehen, deren Argumente erst nach \iflanguage folgen.
+
+ * Dokumentation `germdoc' verbessert; Name geaendert in `gerdoc'.
+
+
+Unterschiede zwischen Version 2.5c und 2.5d:
+
+ * Die Anfuehrungszeichen "` und "' sowie "> und "< wurden mit den
+ EC-Fonts v1.0 nicht korrekt plaziert, da {} in den Definitionen ein
+ meist notwendiges Kerning verhindert haben.
+
+ * \ss ergab mit einem mit Babel 3.5 erzeugten Format eine
+ Endlosschleife -- ausser mit LaTeX2e. Dies wurde abgefangen,
+ jedoch sollte man besser Babel Version 3.6 installieren, in dem
+ dieser Fehler behoben wurde.
+
+ * "ff ergab fuer "f ohne folgendes `f' einen Fehler.
+
+ * Dokumentation `germdoc.tex' und dokumentierter Code wurden
+ verbessert und auf neuesten Stand gebracht.
+
+ * Im Entpack-Skript `german.ins' werden nun die Anweisungen von
+ `docstrip' Version 2.4 (oder neuer) verwendet, so dass die
+ Dateien gleichzeitig entpackt werden.
+
+
+Unterschiede zwischen Version 2.5a/b und 2.5c:
+
+ * Mit "ff erhaelt man nun eine ff-Ligatur.
+
+ * Die schliessenden Anfuehrungszeichen wurden mit den DC-Fonts
+ Version 1.2 zu nah an das Wort gerueckt. Dies wurde verbessert.
+
+ * Fuer das Paket `bibgerm', das ein internes Makro aus German-Style
+ umdefiniert hat und deshalb mit neueren Versionen nicht mehr
+ funktionierte, wurde in German-Style ein Patch eingebaut. Somit
+ kann man dieses Paket jetzt wieder zusammen mit German-Style
+ verwenden. (Besser waere es aber, wenn man `bibgerm' aendern und
+ "sauber" implementieren wuerde. Bitte nicht auf den Patch in
+ German-Style vertrauen, da dieser sicher in spaeteren Versionen
+ entfernt wird!)
+
+ * Verschiedene kleinere Fehler (u.a. bei Verwendung mit AMS-TeX)
+ wurden berichtigt.
+
+
+Wichtige Aenderungen im Vergleich zu Version 2.4:
+
+ * \language = 1 wird nicht mehr als Default fuer die deutschen
+ Trennmuster angenommen, falls die `control sequence' \l@german
+ nicht definiert wurde.
+ Fuer diesen Fall werden Sie beim Laden der Style-Option ``german''
+ durch eine entsprechende Warnung darauf hingewiesen.
+
+ Ist \l@german undefiniert, wird __nicht__ getrennt!!
+
+ Deshalb muessen Sie jetzt beim Installieren der deutschen
+ Trennmuster die `control sequence' \l@german definieren.
+ Dasselbe gilt auch fuer die (US-)englische Trennung. Mehr
+ dazu erfahren Sie in der Dokumentation "germdoc.tex".
+
+
+ * Nach der Installation von "german.sty" kann der erste
+ Formatierlauf Fehler beim Lesen von *.aux-, *.toc-, *.lof-,
+ *.lot-, u.a. -Datei erzeugen, da sich ein kleines Detail
+ geaendert hat.
+
+ Sie koennen diese Fehler, die nur beim Lesen dieser Dateien
+ und beim ersten Formatierlauf auftreten sollten, ignorieren oder
+ Sie loeschen einfach diese Dateien nach dem Installieren der neuen
+ Version der Style-Option ``german''.
+
+%% finis
diff --git a/language/german/betatest/00readme.1st b/language/german/betatest/00readme.1st
new file mode 100644
index 0000000000..2013a24b45
--- /dev/null
+++ b/language/german/betatest/00readme.1st
@@ -0,0 +1,7 @@
+The version 2.5e (1998-07-14) of the `german' collection
+has been moved to the parent directory language/german/.
+
+Future beta versions will be located _here_ again.
+
+Walter Schmidt <wschmi@ibm.net>
+
diff --git a/language/german/gerdoc.dvi b/language/german/gerdoc.dvi
new file mode 100644
index 0000000000..014369c380
--- /dev/null
+++ b/language/german/gerdoc.dvi
Binary files differ
diff --git a/language/german/gerdoc.pdf b/language/german/gerdoc.pdf
new file mode 100644
index 0000000000..aed3da91da
--- /dev/null
+++ b/language/german/gerdoc.pdf
Binary files differ
diff --git a/language/german/gerdoc.tex b/language/german/gerdoc.tex
new file mode 100644
index 0000000000..49efee862d
--- /dev/null
+++ b/language/german/gerdoc.tex
@@ -0,0 +1,1488 @@
+%% File ``gerdoc.tex'', V. 2.5e <1998-07-08>
+%%
+%% Copyright (C) 1992, 1995-1997 by B.Raichle and DANTE e.V.
+%% Copyright (C) 1998 by B.Raichle
+%% All rights reserved.
+%%
+%%
+%% "Anderungen:
+%% -- Erste Fassung: Tagungsbericht (ca. 3 Seiten) --
+%% <87/11/27> Hubert Partl
+%% Bericht "uber die Einigung auf einen "`Minimal Subset von
+%% einheitlichen deutschen \TeX-Befehlen"' auf dem 6. Treffen der
+%% deutschen \TeX-Interessenten in M"unster (Oktober 1987).
+%% <90/04/??> Hubert Partl
+%% Korrektur \selectlanguage statt \setlanguage, f"ur v2.3
+%% <92/04/12> br
+%% erste Erweiterungen und Erg"anzungen des Berichts mit einer
+%% kurzen Installationsanleitung und den "Anderungen im
+%% German-Style, f"ur v2.4a
+%% --- Neufassung: Benutzerhandbuch (ca. 20-22 Seiten) --
+%% <95/01/01> br
+%% komplett "uberarbeitete, restrukturierte und stark erweiterte
+%% Version mit ausf"uhrlicherer Benutzungs- und Installations-
+%% anleitung, f"ur v2.5a
+%% <95/01/20> br
+%% vier(!) kleinere Korrekturen, f"ur v2.5b
+%% <96/05/01> br
+%% "uberarbeitete und korrigierte Version mit Neuerungen aus v2.5c
+%% <97/05/01> br
+%% "uberarbeitete Version mit einigen Umformulierungen und
+%% Erg"anzungen, au"serdem Verweis auf neuere Pakete, fuer v2.5d
+%% <1998-07-08> Walter Schmidt
+%% Dokument in gerdoc.tex umbenannt, f"ur v2.5e.
+%% Informationen zur neuen Rechtschreibung (Paket ngerman) erg"anzt.
+%% F"ur den Begriff `Style-Option' nun `Paket' oder `Makropaket' verwendet.
+%% In Kap.1 auf die Umschaltung der Trennmuster hingewiesen.
+%% Bessere Erkl"arung des Befehls "= .
+%% Erg"anzung: Tieferlegen der Umlaut-Punkte betrifft nur OT1-Fonts.
+%% Kap. 2.2.5 ausf"uhrlicher und (hoffentlich) verst"andlicher gemacht.
+%% Installationsanleitung komplett "uberarbeitet.
+%% Das Beispiel `Laden nur einer einzigen Trennmusterdatei' entfernt.
+%% Internet-Adressen aktualisiert.
+%% *** Dank an H.Oberdiek (Freiburg) und P.Zimmermann (Eichst"att)
+%% f"ur viele Hinweise auf Schreib- und Formulierungsfehler! ***
+%%
+\ifx\documentclass\undefined % LaTeX2e?
+ \documentstyle[11pt,a4,german]{article}
+\else
+ \NeedsTeXFormat{LaTeX2e}
+ \documentclass[11pt,a4paper]{article}
+ \usepackage{german}
+ \addtolength{\textheight}{7\baselineskip}
+ \addtolength{\topmargin}{-5\baselineskip}
+ %%\usepackage[T1]{fontenc}
+\fi
+
+\title{Kurzbeschreibung\\
+{\tt german.sty} und {\tt ngerman.sty} (Version~2.5)}
+
+\author{Bernd Raichle}
+
+\date{8.~Juli 1998\\ (f"ur die Version~2.5e)}
+
+\ifx\LaTeXe\undefined
+ \newcommand{\pLaTeXe}{%
+ \mbox{\LaTeX\kern.15em\(2_{\textstyle\varepsilon}\)}}
+ \newcommand{\LaTeXe}{\protect\pLaTeXe}\fi
+\ifx\emergencystretch\undefined \else
+ \setlength{\emergencystretch}{1em}\fi
+\newenvironment{beispiel}{%
+ \begin{quote}\small \begin{tabbing}%
+ {\tt 1234Merci bien12!1234}\quad \=ergibt:\qquad\=\kill
+}{\end{tabbing}\end{quote}}
+\renewcommand\labelitemi{\(\triangleright\)}
+\renewcommand\labelitemii{\(\diamond\)}
+\renewcommand\labelitemiii{\(\circ\)}
+\newcommand\CS[1]{{\tt\symbol{`\\}#1}}
+\hyphenation{Datei-name Datei-namen}
+\makeatletter
+\def\ps@firstpage{\let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty\def\@oddfoot{\reset@font%
+ \makebox[0pt][l]{{\footnotesize \copyright{} 1998 B.~Raichle}}
+ \hfil\thepage\hfil}
+ \let\@evenhead\@empty\let\@evenfoot\@oddfoot}
+\makeatother
+
+\begin{document}
+\maketitle
+\thispagestyle{firstpage}
+
+\begin{abstract}
+ Beim 6.~Treffen der deutschen \TeX-""Interessenten in M"unster
+ (Oktober 1987) wurde Einigung "uber ein "`Minimal Subset von
+ einheitlichen deutschen \TeX-Befeh\-len"' erzielt, das seitdem an
+ allen Installationen von \TeX\ und \LaTeX\ als Makropaket
+ "`german"' zur Ver"-f"u"-gung stehen und f"ur Texte in deutscher
+ Sprache verwendet werden soll. Damit wird erreicht, da"s alle
+ \TeX- und \LaTeX-Dokumente, die diese Befehle enthalten, problemlos
+ von einem Rechner zum anderen "uber"-tragen werden k"onnen.
+ In der Zwischenzeit wurde das Makropaket "`ngerman"' erg"anzt,
+ das die neue Rechtschreibung unterst"utzt.
+\end{abstract}
+
+\tableofcontents
+
+\section{Allgemeines}
+
+Die Makropakete "`german"' und "`ngerman"' dienen mehreren Zwecken:
+\begin{itemize}\tolerance=2000
+\item Sie aktivieren die der deutschen Sprache zugeordneten
+ Silbentrennmuster.
+\item Der deutsche Schriftsatz weist einige Besonderheiten auf, die
+ in \TeX{} durch neue Makros und verschiedene "Anderungen
+ unterst"utzt und dem Benutzer angeboten werden k"onnen. Beispiele
+ sind die Makros f"ur die unterschiedlichen
+ Anf"uhrungszeichen und die "Anderung des Umlautmakros f"ur
+ OT1-codierte Schriften.
+\item Zur Vereinfachung und Standardisierung der Eingabe von Umlauten
+ und des Buchstabens~"s wird die Kurznotation~\verb:"x: f"ur
+ Rechner einge"-f"uhrt, die die Eingabe dieser Zeichen nicht direkt
+ erlauben. Heutzutage unter"-st"utzen die meisten Rechnersysteme die
+ direkte Eingabe und Anzeige von Umlauten, jedoch ist die
+ Kurznotation weiterhin als Quasi-Standard zum Austausch von \TeX-
+ und \LaTeX-Dokumenten sinnvoll und f"ur deutschsprachige Texte weit
+ verbreitet.
+\item Das Umschalten zwischen den Sprachen Deutsch, Englisch und
+ Franz"osisch wird rudiment"ar unterst"utzt.
+\end{itemize}
+
+Je nachdem, ob ein deutschsprachiger Text in alter oder neuer
+Rechtschreibung verfa"st ist, m"ussen f"ur \TeX{} unterschiedliche
+Silbentrennmuster benutzt werden; au"serdem werden bestimmte Makros
+nur f"ur Sonderf"alle der "`alten"' Silbentrennung ben"otigt. Dies
+wird ber"ucksichtigt, indem f"ur die alte Rechtschreibung das Paket
+"`german"', f"ur die neue aber das Paket "`ngerman"' zur Verf"ugung
+steht. Wo im Folgenden von "`german"' die Rede ist, sind {\em beide}
+Pakete gemeint; auf Unterschiede wird explizit hingewiesen.
+
+
+\section{Verwendung}
+
+\subsection{Laden der Makropakete je nach Rechtschreibung}
+
+Je nachdem, ob ein deutschsprachiger Text nach der traditionellen
+oder der "`neuen"' Rechtschreibung verfa"st ist, mu"s entweder das
+Paket "`german"' oder das Paket "`ngerman"' benutzt werden.
+
+\paragraph{\LaTeX:} Mit \LaTeX\ (genauer: \LaTeXe) wird das
+Makropaket mit
+\begin{quote}
+ \verb:\usepackage{german}:
+\end{quote}
+oder
+\begin{quote}
+ \verb:\usepackage{ngerman}:
+\end{quote}
+%nach der Deklaration der Dokumentenklasse mit \verb:\documentclass:
+geladen. Momentan haben die Pakete keine eigenen Optionen und
+werten auch keine Dokumenten"-klassen"-optionen aus.
+
+\paragraph{\LaTeX~2.09:} Mit der alten \LaTeX-Version oder im
+\LaTeX~2.09-Kompatibi\-li\-t"ats"-modus von \LaTeXe{} wird das Paket
+als Style-Option innerhalb des optionalen Arguments des
+\verb:\documentstyle:-Befehls, beispielsweise mit
+\begin{quote}
+ \verb:\documentstyle[11pt,german]{article}:
+\end{quote}
+angegeben.
+
+\paragraph{Plain-\protect\TeX:} Unter Plain-\TeX\ wird das
+Paket als gew"ohnliche Makro"-datei mit dem \TeX-Befehl
+\begin{quote}
+ \verb:\input german.sty:
+\end{quote}
+dazugeladen.
+
+
+\subsection{Befehle}
+
+Der beim 6.~Treffen der deutschen \TeX-Interessenten in M"unster
+festgelegte Befehlssatz wurde nach"-tr"aglich um einige Befehle
+erweitert. Diese Erweiterungen werden zur Kenntlichmachung in der
+folgenden Liste mit einem~\(\dagger\) versehen.
+
+
+\subsubsection{Umlaute, Tremata und der Buchstabe "s}
+
+\begin{itemize}
+\item \verb:\"a: ergibt ein "`a"' mit einem Trema. Das Paket
+ "`german"' definiert dieses Makro so um, da"s bei Verwendung von
+ OT1-codierten Schriften die Umlautpunkte etwas
+ nach unten verschoben werden (Original: {\originalTeX \"a}, mit
+ "`german"': \"a).
+\item \verb:"a: als Kurzform f"ur \verb:\"a: (Umlaute, wie~"a) --
+ ebenso f"ur die Vokale o und~u und die entsprechenden Gro"sbuchstaben.
+\item \verb:"e: und \verb:"i: f"ur ein e und i mit Trema.
+\item \verb:"s: als Kurzform f"ur \verb:\ss: (scharfes~s:~"s),
+ \verb:"S:\(^\dagger\) ergibt "`SS"', \verb:"z:\(^\dagger\) und
+ \verb:"Z:\(^\dagger\) kann f"ur~\ss\ bzw.\ SZ verwendet werden,
+ falls man Mi"sverst"andnisse bei der Verwendung in
+ gro"sgeschriebenen W"ortern vermeiden m"ochte.
+\end{itemize}
+
+\paragraph{Verwendungsbeispiele}
+\begin{beispiel}
+\verb:sch"on: \> ergibt: \> sch"on \\
+\verb:sch\"on: \> ergibt: \>
+ sch\"on (statt: {\originalTeX sch\"on})\\[3pt]
+\verb:Citro"en: \> ergibt: \> Citro"en \\[3pt]
+\verb:Stra"se Ma"ze: \> ergibt: \> Stra"se Ma"ze \\
+\verb:STRA"SE MA"ZE: \> ergibt: \> STRA"SE MA"ZE \\
+\end{beispiel}
+
+\paragraph{Anmerkungen:}
+Die Befehle f"ur Umlaute und scharfes~s sind so definiert, da"s auch
+in Silben {\em vor\/} und {\em nach\/} dem Befehl die automatische
+Silbentrennung funktioniert. Dabei kann \TeX\ jedoch nicht mehr alle
+oder eventuell falsche Trennstellen finden (Beispiel: {\tt"ubert-ra-gen}
+statt {\tt "uber-tra-gen}). Diese fehlerhaften Trennungen treten bei
+der Verwendung von {\tt T1}-kodierten Schriften, wie beispielsweise
+den {\tt EC}-Schriften, die man unter \LaTeXe{} ohne gro"se
+Anpassungen verwenden kann, nicht auf. \TeX{}s Trennalgorithmus kann
+Trennstellen prinzip"-bedingt nicht 100\%ig fehlerfrei finden.
+Deshalb erhalten Sie, unabh"angig von der verwendeten Schrift, immer
+einige, wenn auch nur sehr wenige fehlerhafte Wort"-trennungen.
+
+
+\subsubsection{Zusammentreffen von drei gleichen Konsonanten und
+ \protect\mbox{"`ck"'} bei Silbentrennung}
+
+\begin{itemize}
+\item \verb:"ck: f"ur \mbox{"`ck"'}, das als \mbox{"`k-k"'} getrennt
+ wird.
+\item \verb:"ff: f"ur \mbox{"`ff"'}, das als \mbox{"`ff-f"'} getrennt
+ wird -- auch f"ur die anderen relevanten Konsonanten l, m, n, p, r
+ und~t.
+\end{itemize}
+%
+Diese Befehle sind nur mit der alten Rechtschreibung
+notwendig.
+ Regel~\(204\) der "`Richtlinien zur Rechtschreibung~\ldots"'~\cite{Duden}
+ bestimmte: {\it Treffen bei
+ Wortbildungen drei gleiche Konsonanten zusammen, dann setzt man nur
+ zwei, wenn ein Vokal folgt. Bei Silbentrennung tritt der dritte
+ Konsonant wieder ein.} {\it \mbox{ck} wird\/} nach Regel~\(179\) {\it
+ bei der Silbentrennung in \mbox{k-k} aufgel"ost.}
+
+\paragraph{Verwendungsbeispiele:}
+\begin{beispiel}
+\verb:Dru"cker: \> ergibt: \> Drucker bzw.\ Druk-ker \\
+\verb:Ro"lladen: \> ergibt: \> Rolladen bzw.\ Roll-laden \\
+\verb:Bettuch: \> ergibt: \> Bettuch bzw.\ Bet-tuch \\
+\verb:Be"ttuch: \> ergibt: \> Bettuch bzw.\ Bett-tuch \\
+\end{beispiel}
+
+\paragraph{Anmerkungen:}
+Da man diese besonderen F"alle der Silbentrennung nur durch den
+\TeX-Befehl \verb:\discretionary: als Trennausnahmen realisieren kann,
+wird dadurch die Trennung in den restlichen Wortteilen und die
+Ligaturbildung um diese Konsonanten beeinflu"st.
+
+\paragraph{Neue Rechtschreibung:}
+Mit der neuen Rechtschreibung wird
+das "`ck"' nicht mehr in \mbox{"`k-k"' } getrennt,
+und Dreifachkonsonanten werden immer ausgeschrieben.
+Im Paket "`ngerman"' haben diese Befehle deshalb eine ge"anderte Funktion.
+Sollten sie hier irrt"umlich benutzt werden, dann wird diejenige
+Ausgabe erzeugt, die offensichtlich gemeint ist, also ein "`ck"' mit
+einer Trennstelle davor oder die drei Konsonanten; eine entsprechende
+Warnung wird ausgegeben.
+
+
+\subsubsection{Anf"uhrungszeichen}
+
+\begin{itemize}
+\item \verb:"`: oder \verb:\glqq: f"ur untere und \verb:"': oder
+ \verb:\grqq: f"ur obere "`deutsche An\-f"uh\-rungs"-zeichen"'
+ (\glqq G"anse"-f"u"schen\grqq).
+\item \verb:\glq: f"ur untere und \verb:\grq: f"ur obere \glq
+ halbierte An\-f"uh\-rungs"-zeichen\grq{} (bitte Anmerkungen zur
+ Verwendung beachten!).
+\item \verb:"<: oder \verb:\flqq: f"ur linke und \verb:">: oder
+ \verb:\frqq: f"ur rechte "<An\-f"uh\-rungs"-zeichen"> in der
+ franz"osischen Form (\flqq\,guillemets\,\frqq).
+\item \verb:\flq: f"ur linke und \verb:\frq: f"ur rechte \flq
+ halbierte An\-f"uh\-rungs"-zeichen\frq\ in der franz"osischen Form,
+\item \verb:\dq: zum Ausdrucken des Doublequote-Zeichens~(\verb:":).
+\end{itemize}
+%
+In~\cite{Duden} findet man: {\it Im deutschen Schriftsatz werden
+ vornehmlich die An"-f"uhrungszeichen "`\ldots"' und ">\ldots"<
+ angewendet. Die franz"osische Form "<\,\ldots\,"> ist im Deutschen
+ weniger gebr"auchlich; in der Schweiz hat sie sich f"ur den
+ Antiquasatz eingeb"urgert.} Die Regeln~\(10\)ff erg"anzen diese
+ Aussagen durch: {\it Eine Anf"uhrung in einer Anf"uhrung wird durch
+ halbe Anf"uhrungszeichen deutlich gemacht.} In franz"osischen
+ Texten ist hinter dem "offnenden und vor dem schlie"senden ein
+ zus"atzlicher Leerraum einzuf"ugen und es werden keine halben
+ Anf"uhrungszeichen verwendet.
+
+\paragraph{Verwendungsbeispiele:}
+\begin{beispiel}
+\verb:"`Ja, bitte!"': \> ergibt: \> "`Ja, bitte!"' \\[3pt]
+\verb:"`Sag' doch nicht immer \glq Ja, bitte!{}\grq!"': \\
+ \> ergibt: \>
+ "`Sag' doch nicht immer \glq Ja, bitte!{}\grq!"' \\[3pt]
+\verb:">Ja, bitte!"<: \> ergibt: \> ">Ja, bitte!"< \\[3pt]
+\verb:">Sag' doch nicht immer \frq Ja, bitte!\flq!"<: \\
+ \> ergibt: \>
+ ">Sag' doch nicht immer \frq Ja, bitte!\flq!"< \\[3pt]
+\verb:"<\,Merci bien\,!\,">: \> ergibt: \> "<\,Merci bien\,!\,"> \\
+\end{beispiel}
+
+\paragraph{Anmerkungen:}
+Folgt \verb:\grq: auf ein Ausrufe- oder Fragezeichen, so sollte man
+zwischen diesen beiden Zeichen, wie im Beispiel gezeigt, ein leeres
+Klammerpaar~\verb:{}: oder \verb:{\kern0pt}: einf"ugen, um die
+Ligaturen~\verb:!`:~(!`) bzw.~\verb:?`:~(?`) zu verhindern, die sonst
+bei Verwendung von T1-kodierten Schriften gebildet w"urden.
+
+F"ur die Realisierung der Anf"uhrungszeichen existiert keine L"osung,
+die uneingeschr"ankt f"ur alle Schriften verwendbar w"are. Bei der
+momentanen Realisierung ist zu beachten, da"s bei Verwendung von
+nicht-{\tt T1}-kodierten Schriften kein {\it Kerning\/} zwischen den
+An\-f"uh\-rungs"-zeichen und den anderen Zeichen einge"-f"ugt wird.
+Bei einigen Buch\-staben-Anf"uhrungs\-zeichen-Kombi"-nationen k"onnen
+daher zu gro"-"se bzw.\ zu kleine Ab"-st"an"-de auftreten (Beispiel:
+\mbox{"`\kern0ptV} statt~\mbox{"`\negthinspace V}).
+
+Relativ h"aufig ist in Dokumenten folgender Fehler zu beobachten:
+Statt mit Hilfe von \verb:"`: und \verb:"': die Anf"uhrungszeichen
+"`\ldots"' bzw.\ mit \verb:``: und \verb:'': die im
+englischsprachigen Raum gebr"auchlichen Anf"uhrungszeichen ``\ldots''
+zu erzeugen, wird einfach der direkt auf der Tastatur zu findende
+Double\-quote~\verb:": verwendet, der das falsche Ergebnis ''\ldots''
+erzeugt. Dieser Fehler ist leider in vielen mit \LaTeX\ erstellten
+deutschsprachigen Texte zu beobachten, obwohl das Fehlen der unteren,
+"offnenden Anf"uhrungszeichen auf"|fallen m"u"ste! Bei Verwendung
+des Pakets "`german"' mit der dann ge"anderten Bedeutung des
+Double\-quote kann dies au"serdem zu verschiedenen Fehlermeldungen
+f"uhren.
+
+Ben"otigt man das Double\-quote-Zeichen, so mu"s man mit dem Paket
+"`german"' die Befehle \verb:\dq: oder~\verb:\verb+"+: verwenden. Aus
+Kompatibilit"ats"-gr"unden mit alten Versionen des Makropakets wird
+auch noch~\verb:"{}: unter"-st"utzt.
+
+
+\subsubsection{Trennhilfen f"ur die automatische Silbentrennung}
+
+\begin{itemize}
+\item \verb:\-: f"ur eine Silbentrennstelle, wobei vor und nach
+ dieser Trennstelle die Silbentrennung unter"-dr"uckt wird (dies ist
+ der Original"-befehl in \TeX{} zur Kennzeichnung von Trennstellen).
+\item \verb:"-: f"ur eine Silbentrennstelle an der angegebenen
+ Stelle; "ahnlich wie mit \verb:\-:, jedoch bleibt die automatische
+ Silbentrennung vor und nach dieser Trennstelle erhalten. Im
+ Unterschied zu \verb:\-: kann man mit \verb:"-: eine Trennstelle
+ ein"-f"ugen und alle weiteren Trennstellen werden von \TeX\ selbst
+ bestimmt, solange man dies nicht unterdr"uckt.
+\item \verb:"": f"ur eine Silbentrennstelle an der angegebenen
+ Stelle, an der im Fall einer Trennung {\it kein\/} Bindestrich
+ hinzugef"ugt wird.
+\item \verb:"|: zur Verhinderung von Ligaturen, "ahnlich wie
+ \verb:"-:, jedoch wird zu"-s"atzlich ein kleiner Zwischenraum zur
+ besseren Trennung der Einzelzeichen einer Ligatur eingef"ugt.
+%\item \verb:\allowhyphens: dient zum Einf"ugen einer Wortfuge, wobei
+% an dieser Stellen {\it keine\/} Silbentrennstelle eingef"ugt wird,
+% aber die automatische Silbentrennung vor und nach dieser Stelle
+% weiterhin erhalten bleibt.
+\item \verb:-: f"ur einen Bindestrich (Divis) bei Zusammensetzungen
+ von W"ortern und Wort"-abk"urzungen; \TeX\ erlaubt eine Trennung
+ nach dem Bindestrich und trennt nie automatisch in den Wortteilen
+ vor und nach dem Bindestrich.
+\item \verb:"~:\(^\dagger\) f"ur einen Bindestrich, an dem nicht
+ getrennt wird.
+\item \verb:"=:\(^\dagger\) f"ur einen Bindestrich, an dem die
+ Trennung erlaubt ist; au"serdem darf vor und nach dieser Stelle
+ automatisch getrennt werden.
+\end{itemize}
+
+\paragraph{Verwendungsbeispiele:}\hspace{0pt plus 1em} Die m"oglichen
+Silbentrennstellen sind in den Beispielen durch das Zeichen~\(|\)
+gekennzeichnet.
+\begin{beispiel}
+\verb:Auf"|lage: \> ergibt: \> Auf\(|\)la\(|\)ge \\
+ \> \> (formatiert: Auf"|lage statt Auflage) \\[3pt]
+
+\verb:"ubertragen: \> ergibt:
+ \> "ubert\(|\)ra\(|\)gen (falsche Trennstelle) \\
+\verb:"uber\-tragen: \> ergibt: \> "uber\(|\)tragen \\
+\verb:"uber"-tragen: \> ergibt: \> "uber\(|\)tra\(|\)gen \\[3pt]
+
+\verb:bergauf und -ab: \> ergibt:
+ \> berg\(|\)auf und -\(|\)ab (falsche Trennstelle)\\
+\verb:bergauf und "~ab: \> ergibt: \> berg\(|\)auf und "~ab \\
+\verb:I-Punkt: \> ergibt:
+ \> I-\(|\)Punkt (schlechte Trennstelle)\\
+\verb:I"~Punkt: \> ergibt: \> I"~Punkt \\
+\verb:Arbeiter"=Unfall: \> ergibt:
+ \> Ar\(|\)bei\(|\)ter-\(|\)Un\(|\)fall\(|\)ver\(|\)si\(|\)che\(|\)rungs- \\
+\verb:versicherungsgesetz: \> \> ge\(|\)setz \\
+\end{beispiel}
+
+\pagebreak[0]
+\paragraph{Tips:}
+\begin{itemize}
+\item Bei zusammengesetzten W"ortern, die falsche Trennstellen
+ aufweisen, sollte man zuerst die Trennhilfe~\verb:"-: in die
+ Wortfuge der Zusammensetzung ein"-f"ugen und nochmals testen, ob
+ danach richtig getrennt wird, bevor man weitere Trennhilfen
+ ein"-f"ugt.
+ \begin{beispiel}
+ \verb:"ubertragen: \> ergibt: \> "ubert\(|\)ra\(|\)gen \\
+ \verb:"uber"-tragen: \> ergibt: \> "uber\(|\)tra\(|\)gen \\
+ \verb:Bedienoberfl"ache: \> ergibt:
+ \> Be\(|\)dieno\(|\)ber\(|\)fl"ache \\
+ \verb:Bedien"-oberfl"ache: \> ergibt:
+ \> Be\(|\)di\(|\)en\(|\)ober\(|\)fl"ache \\
+ \verb:Be\-dien"-oberfl"ache: \> ergibt:
+ \> Be\(|\)dien\(|\)ober\(|\)fl"ache \\
+ \end{beispiel}
+\item Bei der Verwendung von Bindestrichen zur Er"-g"anzung ("`bergauf
+ und \mbox{-ab}"', "`\mbox{ein-}, zwei- oder dreimal"'), vor
+ Schr"ag"-strichen ("`\mbox{Ein-}\slash Aus\-gang"') und Klammern
+ ("`Prim"ar-\mbox{(Haupt-)}""Strom"') sollte man mit den Befehlen
+ \verb:\mbox:, \verb:"": und \verb:"~: vor den Satzzeichen die
+ Trennung unterbinden und eventuell nach den Satzzeichen wieder
+ erlauben.
+ \begin{beispiel}
+ \verb:bergauf und -ab: \> ergibt:
+ \> berg\(|\)auf und -\(|\)ab \\
+ \verb:bergauf und \mbox{-ab}: \> ergibt:
+ \> berg\(|\)auf und -ab \\
+ \verb:bergauf und "~ab: \> ergibt:
+ \> berg\(|\)auf und -ab \\
+ \verb:Ein-/Ausgang: \> ergibt: \> Ein-\(|\)/Ausgang \\
+ \verb:\mbox{Ein-}/""Ausgang: \> ergibt: \> Ein-/\(|\)Aus\(|\)gang \\
+ \verb:Ein"~/""Ausgang: \> ergibt: \> Ein-/\(|\)Aus\(|\)gang \\
+ \end{beispiel}
+\item Der Befehl~\verb:"=: erlaubt
+ in den mit dem Bindestrich verbundenen
+ Wortteilen auch nahe am Bindestrich liegende Trennstellen,
+ die oft h"a"slich oder gar sinnwidrig sind. Zusammengesetzte W"orter sollten
+ normalerweise ohne Bindestrich geschrieben werden.
+ Wenn der Bindestrich dennoch zur Vermeidung von Mi"sverst"andnissen
+ n"otig ist, oder um das Schriftbild "ubersichtlicher zu machen,
+ und man neben der Trennung am
+ Bindestrich weitere Trennstellen erlauben will, sollte man mit
+ \verb:\-: und \verb:"-: wenige, wohl"-"uber"-legte Trennhilfen
+ ein"-f"ugen.
+ \begin{beispiel}
+\verb:Arbeiter-Unfall: \> ergibt: \> Arbeiter-\(|\) \\
+\verb:versicherungsgesetz: \> \> Unfallversicherungsgesetz \\
+\verb:Arbeiter"=Unfall: \> ergibt:
+ \> Ar\(|\)bei\(|\)ter-\(|\)Un\(|\)fall\(|\) \\
+\verb:versicherungsgesetz: \>
+ \> ver\(|\)si\(|\)che\(|\)rungs\(|\)ge\(|\)setz \\
+\verb:Arbeiter-Unfall"-: \> ergibt:
+ \> Arbeiter-\(|\)Unfall\(|\) \\
+\verb:versicherungsgesetz: \>
+ \> ver\(|\)si\(|\)che\(|\)rungs\(|\)ge\(|\)setz \\
+ \end{beispiel}
+ Der Befehl~\verb:"=: ist also vorzugsweise in automatisch
+ erstellten oder konvertierten Texten zu verwenden, wo
+ manuelle Trennhilfen nicht verf"ugbar sind.
+\end{itemize}
+
+
+%\subsubsection{Erstellen deutschsprachiger Dokumente und Einbinden
+% von deutschsprachigen Texten in fremdsprachige Dokumente}
+\subsubsection{Befehle zur Sprachauswahl}
+
+\begin{itemize}
+\item \verb:\selectlanguage{:\mbox{\(\langle\)\it
+ Sprache\/\(\rangle\)}\verb:}: aktiviert
+ die der Sprache zugeordneten Trennmuster (siehe
+ auch~\ref{sec:languageundef}, S.~\pageref{sec:languageundef})
+ und schaltet zwischen deutschen,
+ "oster"-reichischen, englischen, amerikanischen und franz"osischen
+ Datumsangaben und "Uber"-schriften um.
+ F"ur~\mbox{\(\langle\)\it Sprache\/\(\rangle\)} ist einer der
+ folgenden Namen zu verwenden:
+ \begin{itemize}
+ \item Mit dem Paket "`german"':\\
+ \verb:german:, \verb:austrian:,
+ \verb:english:, \verb:USenglish: oder \verb:french:
+ \item Mit dem Paket "`ngerman"':\\
+ \verb:ngerman:, \verb:naustrian:,
+ \verb:english:, \verb:USenglish: oder \verb:french:.
+ \end{itemize}
+\item \verb:\germanTeX: zum Einschalten der deutschen \TeX-Befehle.
+ Dieser Befehl aktiviert alle \verb:"x:-Befehle, "andert das
+ \verb:\"x:-Makro, setzt durch einen Aufruf von
+ \CS{select\-language} die traditionellen deutschen Trennmuster in Kraft
+ und "andert die
+ Datumsangabe und "Uberschriften. {\em Dieser Befehl ist nur im Paket
+ "`german"' definiert.}
+\item \verb:\ngermanTeX:\(^\dagger\) dito, aber aktiviert die
+ "`neuen"' deutschen Trennmuster.
+ {\em Dieser Befehl ist nur im Paket "`ngerman"' definiert.}
+\item \verb:\originalTeX: zum Zur"uckschalten auf Original-\TeX\ bzw.\
+ \mbox{-\LaTeX}: deaktiviert alle durch \verb:\germanTeX: oder
+ \verb:\ngermanTeX: eingeschalteten Befehle.
+\end{itemize}
+Zu jeder Sprache geh"oren ein spezifisches Datumsformat und
+eigene, in den
+\LaTeX-Klassen bzw.\ \mbox{-Styles}\footnote{Anpa"sbare Klassen bzw.
+ Styles sind seit Dezember~1991 Bestandteil der offiziellen
+ \LaTeX-Verteilung.} verwendete "Uber"-schriften:
+\begin{quote}\small
+\day=1 \month=1 \year=1995 % Beispieldatum (J\"anner!)
+\begin{tabular}{@{}lll@{}}
+\mbox{\(\langle\)\it Sprache\/\(\rangle\)}&
+\verb:\today:&\verb:\chaptername:\\[3pt]
+\verb:german:, \verb:ngerman: & \selectlanguage{german}\today
+ & \selectlanguage{german}\chaptername \\
+\verb:austrian:, \verb:naustrian: & \selectlanguage{austrian}\today
+ & \selectlanguage{austrian}\chaptername \\
+\verb:english: & \selectlanguage{english}\today
+ & \selectlanguage{english}\chaptername \\
+\verb:USenglish:& \selectlanguage{USenglish}\today
+ & \selectlanguage{USenglish}\chaptername \\
+\verb:french: & \selectlanguage{french}\today
+ & \selectlanguage{french}\chaptername
+\end{tabular}
+\end{quote}
+
+\paragraph{Voreinstellung:}
+Nach dem Laden des Pakets "`german"' oder "`ngerman"' wird implizit
+der Befehl \verb:\germanTeX: bzw. \verb:\ngermanTeX :ausgef"uhrt,
+so da"s ohne weiteres Zutun
+von Seiten des Anwenders die Sprache
+\verb:german: bzw. \verb:ngerman: als Voreinstellung aktiviert wird.
+
+\paragraph{Verwendung:}
+
+\CS{selectlanguage}
+%ist nicht dazu geeignet, innerhalb eines
+%Dokuments zwischen mehreren Sprachen umzuschalten. Mit ihm bestimmt
+%man die "`Haupt\-sprache"' des Dokuments, deshalb sollte dieser
+ist prim"ar dazu bestimmt, die "`Hauptsprache"' eines Dokuments einzustellen.
+%deshalb sollte der Befehl nur ein einziges Mal in einem Dokument in der Pr"a"-ambel
+%verwendet werden. Dadurch
+So k"onnen die Befehle aus dem Paket
+"`german"' auch innerhalb eines fremdsprachigen Dokuments benutzt
+werden:
+\begin{quote}\small
+\begin{verbatim}
+\NeedsTeXFormat{latex2e}
+\documentclass{article}
+\usepackage{german}
+%\germanTeX % nicht notwendig, wird durch das Laden von
+ % `german' implizit aufgerufen
+\selectlanguage{USenglish}
+\begin{document}
+An english text with some german words, e.g., "Au"serung.
+\end{document}
+\end{verbatim}
+\end{quote}
+Benutzt man \CS{selectlanguage} zum Umschalten der Sprache
+{\em innerhalb} eines Textes, etwa f"ur fremdsprachige Zitate,
+dann ist zu beachten, da"s das Umschalten der "Uberschriften und der Datumsdarstellung
+unerw"unschte Nebenwirkungen haben kann, z.\,B. wenn das aktuelle Datum in der
+Fu"szeile erscheinen soll.\footnote{Eine zuk"unftige Version des Pakets "`german"'
+wird vsl. zus"atzliche und angemessenere Befehle f"ur mehrsprachige Dokumente
+zur Verf"ugung stellen.}
+
+Die Befehle \CS{originalTeX} und \CS{(n)germanTeX} dienen vor allem dazu,
+f"ur einen Teil eines Dokuments das Verhalten des originalen, englischsprachigen
+\LaTeX\ herzustellen, wenn dies aus Gr"unden der Kompatibilit"at mit
+anderer Software notwendig werden sollte. H"aufig gen"ugen dazu aber die Befehle
+\CS{mdqoff} und \CS{mdqon}, siehe Tab.~\ref{tab:cmds}, die nur die \verb:"x:-Makros
+aus- und einschalten.
+
+
+\begin{table}
+\setlength{\partopsep}{0pt}
+\begin{center}
+\rule[.3\baselineskip]{.3\textwidth}{.1pt}
+\renewcommand{\arraystretch}{1.1}
+%\setlength{\tabcolsep}{.5\tabcolsep}
+\begin{tabular}[b]{ll@{}}
+\multicolumn{2}{@{\strut}l}{\it
+ Befehle mit aktivem Doublequote:}\\[4pt]
+\verb:"a:, \verb:"A:, \verb:"o:, \verb:"O:, \verb:"u:, \verb:"U:
+ & Umlaute: "a, "A, "o, "O, "u, "U \\
+\verb:"s:, \verb:"S:, \verb:"z:, \verb:"Z:
+ & Buchstaben: "s, "S, "z und "Z \\
+\verb:"e:, \verb:"E:, \verb:"i:, \verb:"I:
+ & Buchstaben mit Trema: "e, "E, "i, "I \\[3pt]
+\verb:"c:, \verb:"C: & ck \(\rightarrow\) k-k \\
+\verb:"f:, \verb:"l:, \verb:"m:, \verb:"n:,
+ \verb:"p:, \verb:"r:, \verb:"t:,\\
+\verb:"F:, \verb:"L:, \verb:"M:, \verb:"N:,
+ \verb:"P:, \verb:"R:, \verb:"T:
+ & ausfallender dritter Konsonant \\[3pt]
+\verb:"`:, \verb:"': & "` "' \\
+\verb:">:, \verb:"<: & "> "< \\[3pt]
+\verb:"-:, \verb:"|:, \verb:"": & Trennhilfen \\
+\verb:"~:, \verb:"=: & Bindestriche mit besonderem Verhalten \\[5pt]
+\multicolumn{2}{p{.95\textwidth}}{%
+ Alle anderen {\tt\string"x}-Befehle, die mit keiner Bedeutung
+ belegt sind, erzeugen eine Fehlermeldung, um auf eine fehlerhafte
+ Eingabe hinzuweisen.}\\
+ \\
+\multicolumn{2}{@{}l}{\it Befehle mit ge"andertem Verhalten:}\\[4pt]
+\verb:\": & Umlautmakro mit tieferem Akzentzeichen, \\
+ & ohne Unterdr"uckung der Silbentrennung \\
+ \\[-3pt]
+\multicolumn{2}{@{}l}{\it Befehle f"ur Anf"uhrungszeichen:}\\[4pt]
+\CS{glqq}, \CS{grqq}, \CS{glq}, \CS{grq}
+ & Anf"uhrungszeichen: \glqq\ \grqq\ \glq\ \grq \\
+\CS{flqq}, \CS{frqq}, \CS{flq}, \CS{frq}
+ & dto., franz"osische Form: \flqq\ \frqq\ \flq\ \frq \\[3pt]
+\CS{dq} & Doublequote-Zeichen: \dq \\
+ \\
+\multicolumn{2}{@{}l}{\it Befehle zur Sprachumschaltung:}\\[4pt]
+\CS{selectlanguage} & Trennmuster u. "Uberschriften wechseln\\
+\CS{originalTeX}
+ & deaktiviere deutsche \TeX-Befehle \\
+\CS{germanTeX} (nur mit "`german"')
+ & aktiviere deutsche \TeX-Befehle \\
+\CS{ngermanTeX} (nur mit "`ngerman"')
+ & aktiviere deutsche \TeX-Befehle \\
+ \\
+\multicolumn{2}{@{}l}{\it Obsolete Befehle:
+ (Nicht mehr verwenden!)}\\[4pt]
+\CS{3}, \CS{ck}
+ & alte Form von \ss\ und ck\,\(\rightarrow\)\,k-k\\
+\CS{setlanguage} & ersetzt durch \CS{selectlanguage}\\
+ \\
+\multicolumn{2}{@{}l}{\it Low-Level-Befehle:}\\[4pt]
+\CS{allowhyphens} & k"unstliche, nicht trennbare Wortfuge \\
+\CS{mdqoff}, \CS{mdqon}
+ & (de-)aktiviere Doublequote-Befehle
+\end{tabular}
+\rule{.3\textwidth}{.1pt}
+\end{center}
+\caption{Befehls"ubersicht}
+ \label{tab:cmds}
+\end{table}
+
+
+\subsection{Beschr"ankungen und bekannte Fehler}\label{sec:fehler}
+
+\paragraph{Double\-quote-Mechanismus:}
+Da "`german"' das Double\-quote-Zeichen aktiviert und dessen
+urspr"ungliche Bedeutung "andert, k"onnen Probleme mit anderen
+Makropaketen und fremden Dokumenten auftreten:
+\begin{itemize}
+\item Ganzzahlige Konstanten k"onnen in \TeX\ auch in hexadezimaler
+ Notation mit einem voranstehenden Double\-quote eingegeben werden
+ (Beispiel: \verb:"FF: f"ur die Dezimalzahl~255). Beginnt die
+ Hexadezimalzahl mit einer Ziffer, so sollten mit neueren Versionen
+ des Pakets "`german"' keine Probleme auftreten. Beginnt die
+ Zahl stattdessen mit einem Buchstaben \mbox{A--F}, so tritt durch
+ die ge"-"anderte Bedeutung des Double\-quote meist der Fehler "`{\tt
+ Missing number, treated as zero}"' auf.
+
+ Abhilfe: Hexadezimalzahlen, die mit einem Buchstaben beginnen, die
+ Ziffer~\(0\) voranstellen -- statt \verb:"FF: sollte man demnach
+ \verb:"0FF: verwenden. Eine andere M"oglichkeit besteht darin, den
+ Double\-quote mit Hilfe des \TeX-Primitivs \CS{string} (Bsp:
+ \verb:\string"FF:) oder mit einem vorangestellten \CS{original\-TeX}
+ bzw.\ \CS{mdqoff} zu deaktivieren.
+\item Leerschritte nach einem aktivierten Double\-quote werden
+ ignoriert, d.\,h.\ sowohl \verb:" a: als auch~\verb:"a: erzeugen
+ dasselbe Ergebnis. Da dies eine Eigenschaft von \TeX\ selbst ist,
+ kann es nicht ohne andere Nachteile verhindert werden.
+\item Nach einem aktivierten Double\-quote sollten keine geschweiften
+ Klammern folgen. Sowohl die Kombination mit einer "offnenden
+ Klammer~\verb:"{: als auch mit einer schlie"senden Klammer~\verb:"}:
+ f"uhrt zu Fehlern.
+\end{itemize}
+%
+Treten die in den letzten beiden Punkten beschriebenen Fehler auf,
+ist dies meist auf die falsche Eingabe von An"-f"uh\-rungs"-zeichen
+zur"uckzuf"uhren. An"-f"uh\-rungs"-zeichen sind als
+\verb:"`:\ldots\verb:"': (bzw.\ als \verb:``:\ldots\verb:'':)
+einzugeben, die Verwendung eines einfachen Double\-quote f"uhrt zu
+falschen Ergebnissen!
+
+\paragraph{OT1-kodierte Schriften:}
+Bei Verwendung von Schriften in der Kodierung~{\tt OT1}, z.\,B.\ der
+CM-Familie, gibt es zu"-s"atzlich folgende
+Einschr"ankungen:
+%
+\begin{itemize}
+\item Es werden nicht alle oder falsche Silbentrennstellen in W"ortern
+ mit Umlauten gefunden, insbesondere wird nicht direkt am Umlaut
+ getrennt. Hier mu"s man bei Bedarf mit dem Befehl~\verb:"-:
+ nachhelfen.
+\item Da \TeX\ mit Hilfe der Makros im Paket "`german"' die
+ Umlaute und die An"-f"uh\-rungs"-zeichen aus mehreren Zeichen
+ aufbauen mu"s, findet {\it kein\/} Kerning und {\it keine\/}
+ Ligaturbildung mit den umgebenden Zeichen statt. Dies f"allt
+ insbesondere bei den Kombinationen \mbox{"`\kern0pt V},
+ \mbox{"`\kern0pt W} und \mbox{f\kern0pt "'} auf und wird bei
+ schr"ag"-gestellten Schriften noch ver"-st"arkt. Eine Abhilfe ist
+ auf Makroebene nur sehr schwer realisierbar, so da"s man von Hand
+ mit den Befehlen \CS{neg\-thin\-space} und~\CS{/} f"ur korrektere
+ Ab"-st"ande sorgen mu"s.
+\item Die Anf"uhrungszeichen in der franz"osischen Form "> und~"<
+ k"onnten, auch vom Aussehen, verbessert werden. Au"serdem wird nach
+ diesen An"-f"uh\-rungs"-zeichen nicht umbrochen, selbst wenn ein
+ Wortzwischenraum folgen sollte.
+\item Die Typewriter-Schriften {\tt cmtt}
+% besitzen keine Ligatur f"ur
+% die doppelten An"-f"uhrungszeichen ({\tt`\kern0pt`} statt~`` und
+% {\tt'\kern0pt'} statt~''),
+% sondern nur ein Zeichen f"ur den
+ enthalten keine deutschen Anf"uhrungszeichen, sondern nur den einfachen
+ Double\-quote~{\tt\dq}. Daher er"-h"alt man mit \LaTeXe{} f"ur die
+ Eingabe \verb:"`..."': das unerwartete Ergebnis~"`\mbox{\tt
+ \begingroup\setbox2=\hbox{,}\setbox0=\hbox{\char34}%
+ \setbox0=\hbox{\dimen0=\ht0\advance\dimen0-\ht2\lower\dimen0\box0}%
+ \ht0=\ht2\dp0=\dp2\box0\endgroup...\char92}"'.
+
+ Wer dies vermeiden will, mu"s die \LaTeXe-Deklarationen f"ur die
+ beiden Symbole \CS{text\-quote\-dblleft} und
+ \CS{text\-quote\-dblright} f"ur die OT1-Kodierung entsprechend
+ "andern.
+\end{itemize}
+
+\paragraph{T1-kodierte Schriften:}
+Die meisten der f"ur OT1-kodierte Schriften genannten Einschr"ankungen
+existieren f"ur Schriften in der Kodierung~{\tt T1}, wie
+beispielsweise die EC-Schrift\-familie, nicht, da diese Schriften
+Umlaute und An"-f"uhrungszeichen enthalten. F"ur T1-kodierte
+Schriften existiert nur die Einschr"ankung, da"s man bei Verwendung
+des halben schlie"senden An"-f"uhrungszeichens~\CS{grq} ein leeres
+Klammerpaar~\verb:{}: oder \verb:{\kern0pt}: ein"-f"ugen mu"s, wenn
+\CS{grq} auf ein Ausrufe- oder Fragezeichen folgt. Andernfalls
+er"-h"alt man sonst die Ligatur~\verb:!`:~(!`) bzw.~\verb:?`:~(?`).
+
+\paragraph{PostScript-Schriften:}
+Zur Einbindung dieser Schriften in \TeX{} und \LaTeX{} existieren
+unterschiedliche Versionen, wobei neuere Versionen die Verwendung von
+Post\-Script-Schriften sowohl in der Kodierung~{\tt OT1} als auch in
+der Kodierung~{\tt T1} und seit Anfang~1997 auch in der Kodierung~{\tt
+TS1} der Text-Companion-Schriften erlauben. F"ur die jeweilige
+Kodierung gelten die zuvor aufgez"ahlten Einschr"ankungen.
+
+Verwendet man mit \LaTeXe{} eine zu alte Version der Einbindung, so
+erh"alt man mit dem Paket "`german"' fehlerhafte Akzent- und
+Anf"uhrungszeichen. Bitte probieren Sie mit folgendem Testdokument
+aus, ob sie ein zu altes Paket zur Verwendung von
+Post\-Script-Schriften installiert haben. (Hinweis: Das Testdokument
+verwendet "`german"' {\it nicht}, da der Test nur von
+der verwendeten Einbindung der Post\-Script-Schriften abh"angt.)
+%
+\begin{quote}\small
+\begin{verbatim}
+\NeedsTeXFormat{LaTeX2e}
+\documentclass{article}
+\renewcommand\rmdefault{ptm}% oder: \usepackage{times}
+\begin{document}
+Test: \"a \"A \ss.
+\end{document}
+\end{verbatim}
+\end{quote}
+%
+Erhalten Sie fehlerhafte Umlaute oder kein scharfes~s, so besorgen Sie
+sich bitte eine neuere Version des Post\-Script-Schrift\-pakets und
+installieren Sie die darin enthaltenen \mbox{{\sc tfm}-}, \mbox{{\sc
+vf}-}, \mbox{{\sc tex}-}, {\sc fd}- und {\sc map}-Dateien nach
+Anleitung.
+
+\paragraph{\LaTeXe{} (1.~Dezember~1994 und neuer):}
+\LaTeXe{} benutzt als Standard"-schrift"-auswahlschema die
+Version~\(2\) des~\mbox{NFSS}, das den neuen Schriftparameter
+\CS{font\-encoding} zur Verf"ugung stellt. Dadurch k"onnen
+sehr einfach Schriften in unterschiedlicher Kodierung verwendet
+werden. So kann jetzt innerhalb eines Dokuments beliebig zwischen
+{\tt OT1}- und {\tt T1}-kodierten Schriften gewechselt werden.
+
+Sollen Schriften in anderen Kodierungen verwendet werden, so m"ussen
+nur die entsprechenden \LaTeXe-Deklarationen f"ur diese Kodierung mit
+den Anweisungen \CS{Declare\-Text}\ldots{} durchgef"uhrt werden, damit
+"`german"' die Lettern dieser Schrift korrekt verwenden kann.
+
+\paragraph{\LaTeXe{} (1.~Juni~1994):}
+Da die erste "offentliche \LaTeXe-Version die Verwendung von Schriften
+in unterschiedlicher Kodierung nur unvoll"-st"andig erlaubt, wird sie
+von "`german"' nicht mehr unter"-st"utzt. Ein \mbox{Update} auf die
+neueste \LaTeXe-Version ist auf alle F"alle ratsam!
+
+\paragraph{\LaTeX~2.09:}
+Mit der mittlerweile veralteten \LaTeX-Version k"on\-nen andere als
+die Schriften der Computer-Modern-Familie nur mit relativ gro"sen
+Aufwand integriert werden. Die von den Entwicklern nicht mehr
+gewartete Version~\(1\) des Schrift"-auswahlschemas~\mbox{NFSS}
+erleichtert dies zwar, jedoch unterst"utzt diese Version die
+Einbindung von Schriften in anderen Kodierungen noch nicht.
+
+Die Style-Option "`german"' unterst"utzt daher mit \LaTeX~2.09 nur
+Schriften in der Kodierung~{\tt OT1}. Sollen Schriften mit einer
+anderen Kodierung verwendet werden, so m"us\-sen die Makros \verb:\":,
+\verb:\ss:, \verb:\flqq:,\,\ldots\,\verb:\grq: entsprechend
+ge"-"andert werden. Weitere "Anderungen, insbesondere am
+Double\-quote-Mechanismus, sind nicht notwendig.
+
+\paragraph{Plain-\protect\TeX:} Hier gilt das zuvor f"ur \LaTeX~2.09
+Gesagte. Es ist geplant, \mbox{NFSS} Version~\(2\) auch f"ur
+Plain-\TeX\ verf"ugbar zu machen, so da"s man auch die unter \LaTeXe{}
+verf"ugbaren Vorteile nutzen kann. Leider ist der Zeitpunkt der
+Fertigstellung nicht absehbar.
+
+
+\subsection{Wohin melde ich Fehler?}
+
+Wenn Sie einen Fehler in dieser Version 2.5e
+der Makropakete "`german"' oder "`ngerman"' gefunden haben
+oder Vorschl"age zu deren Verbesserung haben, schreiben Sie bitte an
+\begin{quote}
+ Bernd Raichle\\
+ Stettener Str. 73\\
+ 73732 Esslingen-W"aldenbronn\\
+ Germany\\[.5ex]
+ E-Mail: {\tt raichle@Informatik.Uni-Stuttgart.DE}
+\end{quote}
+oder an
+\begin{quote}
+ DANTE, Deutschsprachige Anwendervereinigung
+ \TeX\ e.V\negthinspace. \\
+ Betreuung "`german.sty"' \\
+ Postfach 10\,18\,40 \\
+ 69008 Heidelberg \\
+ Germany\\[.5ex]
+ E-Mail: {\tt german@dante.de}
+\end{quote}
+Ein Kontakt per {\it electronic mail\/} wird bevorzugt.
+
+Der Fehlermeldung sollten Sie die komplette Eingabedatei beilegen, mit
+der dieser Fehler erzeugt werden kann. In Ihrem eigenen Interesse
+sollte diese Eingabedatei m"og"-lichst klein sein und nur die wirklich
+zur Reproduktion des Fehlers notwendigen Klassen, Pakete, Styles,
+Style-Optionen und Makrodateien laden. Andernfalls gestaltet sich die
+Fehlersuche zu aufwendig und/oder es fehlen verwendete Makrodateien,
+um den Fehler nachvollziehen zu k"onnen. F"ugen Sie auch die
+Protokolldatei f"ur diese Eingabedatei mit an, da diese weitere
+Hinweise auf die verwendeten Makros enth"alt. Um die Protokolldatei
+klein zu halten, brechen Sie bitte bei einem Fehler \TeX{} bzw.\
+\LaTeX{} mit~{\tt x} und nicht mit~{\tt q} ab.
+
+Bevor Sie einen Fehler melden, vergewissern Sie sich bitte, da"s der
+Fehler tats"achlich durch das Makropaket "`german"' und nicht durch
+eine fehlerhafte Eingabe Ihrerseits oder einen Folgefehler eines zuvor
+aufgetretenen Fehlers verursacht wird. Sehen Sie bitte auch in der
+Protokolldatei nach, ob diese eventuell Hinweise auf die Fehlerursache
+gibt. Sehr h"aufig gibt es Fehler in Zusammenhang mit Konstanten in
+hexadezimaler Schreibweise, die zur Fehlermeldung "`{\tt Missing
+number, treated as zero}"' f"uhren. Dieser "`Fehler"' ist bekannt und
+ist in dieser Anleitung in Abschnitt~\ref{sec:fehler}
+% auf Seite~\pageref{sec:fehler}
+beschrieben.
+
+
+% \condbreak{.2\textheight} -- bedingtes \newpage
+\vspace{0pt plus.2\textheight}
+\pagebreak[3]
+\vspace{0pt plus-.2\textheight}
+
+\section{Installation}
+
+F"ur die Benutzung der Pakete "`german"' und "`ngerman"' ben"otigen
+Sie folgende Dateien:
+%
+\begin{enumerate}\sloppy
+\item {\tt german.sty} und {\tt ngerman.sty}, die Makropakete selbst;
+\item {\tt ghyph31.tex}, die deutschen Trennmuster
+ f"ur die alte Rechtschreibung (nur mit {\tt german.sty}) in
+ der z.\,Z.\ aktuellen Version~3.1a vom 13.~Februar 1994;\\
+ {\em Vorsicht\/}: Auf der CD TeX\,Live\,3 hei"st diese Datei
+ {\tt dehyphen.tex};
+\item {\tt gnhyph01.tex}, die deutschen Trennmuster
+ f"ur die neue Recht\-schreibung (nur mit {\tt ngerman.sty});
+\item wahlweise weitere Dateien mit Trennmustern f"ur andere
+ Sprachen;
+\item evtl. {\tt hyphxmpl.cfg}, eine Beispieldatei f"ur die
+ Konfiguration der Trennmuster.
+\end{enumerate}
+
+
+\subsection{Vorbereitungen f"ur Benutzer}\label{sec:benutzerinit}
+
+Als gew"ohnlicher \TeX- bzw.\ \LaTeX-Benutzer m"ussen Sie nur daf"ur
+sorgen, da"s die Dateien {\tt german.sty} und {\tt ngerman.sty}
+in der neuesten Version vorhanden sind und geladen werden k"onnen.
+Dazu sind diese Dateien einfach in ein Verzeichnis zu kopieren,
+in dem \TeX{} nach Makrodateien sucht.
+
+Erscheint beim Laden des Makropakets die
+Meldung\label{sec:languageundef}
+%
+\begin{quote}\small
+\verb:\language number for German undefined, default 255 used.:
+\end{quote}
+%
+so haben Sie die deutschen Trennmuster nicht korrekt installiert und
+erhalten eventuell fehlerhafte Trennungen, oder es wird nicht
+getrennt. Wie Sie die Trennmuster installieren m"ussen, erfahren Sie
+im n"achsten Abschnitt.
+
+M"oglicherweise hat Ihre Plain-\TeX- oder \LaTeX-Version eines der
+Makropakete "`german"' oder "`ngerman"' bereits vorgeladen,
+d.\,h., Sie m"ussen es nicht explizit als \LaTeXe-Paket bzw.\ als
+Style-Option deklarieren oder die Makro\-datei laden. Sie sollten
+dies dennoch {\it nicht\/} ausnutzen: Wenn Sie Ihre Dokumente
+weitergeben wollen, vermeiden Sie dadurch un"-n"otige Probleme und
+R"uck"-fragen. Am besten "andern Sie Ihre Installation so ab, da"s
+"`german"' {\it nicht\/} vorgeladen wird, da Sie mit einem
+vorgeladenen Makropaket zu anderen \TeX-Installationen i.\,d.\,R.
+inkompatibel sind.
+
+\subsection{Vorbereitungen f"ur \protect\TeX-Administratoren}
+
+Damit Sie die Pakete "`german"' und "`ngerman"' den \TeX-Benutzern zur
+Ver"-f"ugung stellen, m"ussen diese, falls noch nicht getan,
+% ausgepackt und
+installiert werden. Au"serdem m"ussen Sie alle Format"-dateien
+mit den deutschen Trennmustern so erstellen, da"s die Makropakete
+erkennen k"onnen, wie auf diese Trennmuster umgeschaltet wird.
+Andernfalls wird nicht mehr oder falsch getrennt!
+
+\subsubsection{Installation der Makropakete}
+
+
+Die Dateien {\tt german.sty} und {\tt ngerman.sty}, sollten Sie in
+ein Verzeichnis kopieren, in dem \TeX\ nach Makrodateien sucht (Bsp:
+{\tt{}.../texmf/""tex/""generic/""german/}). "Altere
+Versionen dieser Dateien in weiteren Verzeichnissen, die
+\TeX\ durchsucht, sollten Sie l"oschen.
+
+Bitte lesen Sie nun den n"achsten Abschnitt, da es sehr
+wahrscheinlich ist, da"s die Trennmuster in Ihren bisher
+verwendeten Formatdateien nicht korrekt oder nicht
+vollst"andig installiert wurden. Ist dies der Fall, wird in
+allen Dokumenten, die diese Pakete verwenden, nicht mehr
+automatisch getrennt!
+
+\subsubsection{Installation der Trennmuster}
+
+\TeX\ kann ab Version~3.0 in einer einzigen Formatdatei
+mehrere verschiedene Trennmuster halten.
+%,so da"s mehrsprachige Dokumente mit korrekter Trennung m"oglich sind.
+Zur Auswahl der Trennmuster einer
+Sprache dient eine ganze Zahl von 0--255, die der Sprache beim Installieren der
+Trennmuster zugeordnet worden sein mu"s.
+
+Beim Laden eines Satzes von Trennmustern w"ahrend der Installation
+(Ini\TeX-Lauf) erfolgt die Zuordnung der Trennmuster zu einer
+Sprache durch Zuweisung der f"ur diese Sprache ge"-w"ahlten Zahl an
+das spezielle \TeX-Register \CS{language}. Ebenso werden sp"ater beim
+"Uber"-setzen eines Dokuments die zu verwendenden Trennmuster durch
+Zuweisung der Zahl an \CS{language} wieder aktiviert. Achtung: Weist
+man \CS{language} beim "Uber"-setzen eines Dokuments einen Wert zu,
+f"ur den Ini\TeX{} keine Trennmuster geladen hatte, so findet {\it keine\/}
+automatische Silbentrennung statt.
+
+Wie werden nun die Nummern von 0--255 an die einzelnen Sprachen
+vergeben? Als Quasi-Standard f"ur die Vergabe der Nummern hat sich
+mittlerweile das im {\it
+ Babel-System\/}~\cite{Braams91,Goossens94a,Goossens94b} verwendete
+Schema herausgebildet.
+Dabei wird jede Sprache deklariert und an diese eine Nummer in
+aufsteigender Folge von~0 an vergeben. Wichtig dabei ist, da"s die
+jeweils zugeordnete Nummer in einer {\it control sequence\/}
+\mbox{\CS{l@}\(\langle\)Sprache\(\rangle\)} abgespeichert wird.
+So kann man sp"ater auf die Sprache unter ihrem Namen
+zugreifen, also ohne die Nummer explizit angeben zu m"ussen.
+
+Der Code zum Laden der Trennmuster und zum Zuordnen der Sprachnamen
+befindet sich in einer Makrodatei, die f"ur das
+aktuelle \LaTeXe{} beispielsweise {\tt hyphen.cfg} hei"st.
+Sie mu"s normalerweise neu erstellt oder zumindest angepa"st werden,
+um festzulegen, welche Sprachen unterst"utzt werden sollen.
+
+Mit dem Babel-Paket wird eine besondere Version dieser Datei
+ausgeliefert, die die Information "uber die zu ladenden Sprachen einer
+weiteren Konfigurationsdatei {\tt language.dat} entnimmt, die ihrerseits
+einfacher aufgebaut und leichter zu bearbeiten ist.
+
+Unabh"angig davon, welche
+der beiden Methoden zur Konfiguration benutzt wird, kann das damit erzeugte
+Format sowohl mit Babel als auch mit dem Paket "`german"' benutzt werden.
+Die Version 3.6h des Babel-Pakets selbst
+kennt allerdings noch keine Option f"ur "`Deutsch mit neuer Rechtschreibung"'.
+
+Gehen Sie zum Konfigurieren der Sprachunterst"utzung wie folgt vor:
+
+\paragraph{Schritt 1\protect\(^*\protect\):}
+Sie verwenden den Konfigurationsmechanismus des Babel-Pakets;
+dies ist standardm"a"sig z.\,B. mit teTeX oder dem Web2c-\TeX{} der
+CD TeX\,Live der Fall.
+In diesem Fall m"ussen in der Konfigurationsdatei {\tt language.dat}
+die folgenden Zeilen (neben evtl. weiteren) eingetragen sein:
+\begin{quote}\small
+\begin{verbatim}
+ german ghyph31.tex
+ ngerman gnhyph01.tex
+\end{verbatim}
+\end{quote}
+Damit wird die Zuordnung von Sprachnamen und Trenn\-muster\-dateien
+festgelegt.
+Evtl. fehlende Eintr"age sind am Ende der Datei zu erg"anzen.
+(Mit der TeX\,Live-CD ist der Dateiname {\tt ghyph31.tex}
+durch {\tt dehyphen.tex} zu ersetzen.)
+
+%Bitte beachten Sie, da"s innerhalb eines Dokuments nur
+%{\em entweder} die vom Babel-Paket
+%zur Verf"ugung gestellten Sprachanpassungen (einschl. "`german"')
+%{\em oder} das Paket "`german"' benutzt werden sollen;
+%ihre gleichzeitige Verwendung kann zu Problemen f"uhren!
+
+"Uberspringen Sie
+nun die Schritte 1 und 2. Falls in Ihrem \TeX-System {\em nicht} der
+Babel-Mechanismus zur Konfiguration der Trennmuster benutzt wird,
+dann lesen Sie bitte weiter:
+
+\paragraph{Schritt 1:}
+Sie ben"otigen zum Laden der Trennmusterdateien f"ur verschiedene
+Sprachen eine Makrodatei, die (leider) je nach verwendetem
+Format einen unterschiedlichen Dateinamen besitzt. Den Namen dieser
+Datei k"onnen Sie der Tabelle in Schritt~\(2\) entnehmen, die Datei
+selbst sollte folgenden Inhalt haben:
+%
+\begin{quote}\small
+\begin{verbatim}
+%% Konfigurationsdatei -- Trennmuster: `hyphen.cfg'
+\message{== Loading hyphenation patterns:}
+
+%% american english
+\chardef\l@USenglish=\language
+%% british english als "Dialekt"
+\chardef\l@english=\l@USenglish
+\input hyphen
+
+%% german
+\newlanguage\l@german \language=\l@german
+%% oesterreichisch als "Dialekt":
+\chardef\l@austrian=\l@german
+\input ghyph31
+
+%% new german
+\newlanguage\l@ngerman \language=\l@ngerman
+%% oesterreichisch (neu) als "Dialekt"
+\chardef\l@naustrian=\l@ngerman
+\input gnhyph01
+
+%% weitere Sprachen nach folgendem Schema:
+% \newlanguage\l@SPRACHE \language=\l@SPRACHE
+% \chardef\l@DIALEKT=\l@SPRACHE
+% \input SPRACHhyphen
+
+%% Default-Trennmuster: USenglish
+\language=\l@USenglish \lefthyphenmin=2 \righthyphenmin=3
+\message{done.}
+\endinput
+\end{verbatim}
+\end{quote}
+%
+In dem gezeigten Beispiel werden die
+US-eng\-li\-schen Trennmuster, die "`alten"' und die "`neuen"'
+deutschen Trennmuster geladen, wobei f"ur die britisch-englische und
+f"ur die "oster"-reichische "`Sprache"' Synonyme deklariert werden.
+Eine Datei mit genau diesem Inhalt wird unter dem Namen
+\begin{quote}
+ {\tt hyphxmpl.cfg}
+\end{quote}
+zusammen mit dem Makropaket "`german"' verteilt.
+Wollen Sie f"ur weitere Sprachen Trennmuster laden,
+%-- beispielsweise existieren solche f"ur britisch-englische Silbentrennung --
+sollten
+Sie in der Lage sein, die dazu notwendigen Zeilen anhand des
+auskommentierten Schemas im gezeigten Beispiel zu
+vervoll"-st"andigen.
+
+Es ist wichtig, da"s Sie die beiden Parameter \CS{left\-hyphen\-min}
+und \CS{right\-hyphen\-min}, die die Mindest"-l"ange der nicht
+trennbaren Wortpr"afixe und \mbox{-suffixe} angeben, am Ende der Datei
+mit passenden Werten f"ur diejenige Sprache
+vorbesetzen, mit der \TeX{} startet. Ansonsten erhalten Sie eventuell
+Trennungen, bei denen einzelne Zeichen am Wortanfang oder \mbox{-ende}
+abgetrennt werden. Es ist jedoch {\em nicht\/} notwendig, diese
+beiden Parameter f"ur jede zu ladende Trennmusterdatei zu setzen, da
+\TeX\ die Parameterwerte sowieso nicht mit den Trennmustern abspeichert.
+
+
+\paragraph{Schritt 2:}
+Entscheiden Sie sich, f"ur welches \TeX-Format Sie eine neue
+Formatdatei erstellen wollen. Je nach zu erzeugendem Format hat die
+in Schritt~\(1\) gezeigte Konfigurationsdatei einen anderen Namen:
+%
+\begin{quote}
+\begin{tabular}{@{}ll@{}}
+\qquad {\it Format} & {\it Dateiname} \\[3pt]
+\LaTeXe{} (ab 1.~Dezember 1994) & {\tt hyphen.cfg}\\
+\LaTeXe{} (1.~Juni 1994) & {\tt lthyphen.cfg} \\
+\LaTeX 2.09 (ab Dezember 1991) & {\tt lhyphen.tex} \\
+\LaTeX 2.09 (vor Dezember 1991) & {\tt hyphen.tex} \\
+Plain-\TeX & {\tt hyphen.tex}
+\end{tabular}
+\end{quote}
+%
+Geben Sie der in Schritt~\(1\) erstellten Datei (oder dem
+Beispiel {\tt hyphxmpl.cfg}) den entsprechenden
+Dateinamen aus dieser Tabelle.
+
+{\it Zu Plain-\TeX{} und den "alteren \LaTeX-Versionen:\/} Da die
+US-englischen Trennmuster, die als Mindestausstattung jeder
+Installation beiliegen, den selben von Donald E.\ Knuth vergebenen
+Namen {\tt hyphen.tex} haben, m"us\-sen Sie diese Trennmusterdatei
+f"ur Plain-\TeX\ und die "alteren \LaTeX~2.09-Versionen in {\tt
+ushyphen.tex} umbenennen, um Namens"-kollisionen zu vermeiden.
+Vergessen Sie in diesem Fall nicht, auch in der Konfigurationsdatei
+den Namen {\tt hyphen.tex} durch {\tt ushyphen.tex} zu ersetzen!
+
+\paragraph{Schritt 3:}
+Bevor Sie nun mit Ini\TeX\ eine Formatdatei erstellen, sollten Sie
+sich vergewissern, da"s Ihre \TeX-Version gen"ugend Platz f"ur die
+Trennmuster reserviert.
+
+Um beispielsweise die amerikanischen und die beiden deutschen
+Trennmusterdateien zu laden, ben"otigen Sie einen "`Trie"'-Wert, der
+mindestens \(21547\) {\tt trie\_size} und \(625\) {\tt
+trie\_op\_size} Platz bietet. Wollen Sie Trennmuster f"ur weitere
+Sprachen, wie beispielsweise britisches Englisch, dazuladen, m"ussen
+diese Werte er"-h"oht werden. Vergessen Sie sp"ater nicht, da"s Sie
+auch bei der "Uber"-setzung der Dokumente entsprechend mehr Platz
+f"ur die Trennmuster be"-n"otigen.
+
+Ob Sie diese Werte in Ihrer \TeX-Installation "andern m"ussen, und
+wenn ja, wie, entnehmen Sie bitte der zugeh"origen
+Dokumentation.
+H"aufig kann man die
+Gr"o"se der Trennmustertabelle "uber Umgebungsvariablen, spezielle
+Konfigurationsdateien oder Optionen in der Kommandozeile festlegen.
+
+Mit emTeX beispielsweise mu"s die Voreinstellung f"ur {\tt trie\_size}
+"uber die Option {\tt -mt} erh"oht werden, wenn die o.\,g. drei
+Trennmusterdateien gleichzeitig verf"ugbar sein sollen:
+\begin{quote}
+ \begin{tabular}{ll}
+ Format erzeugen: & {\tt -mt27000} \\
+ \TeX-Lauf: & {\tt -mt23000}
+ \end{tabular}
+\end{quote}
+
+
+\paragraph{Schritt 4:}
+Erzeugen Sie durch Aufruf von Ini\TeX\ aus der Datei, die die Makros
+f"ur das \TeX-Format, z.\,B. \LaTeX, ent"-h"alt, die Formatdatei.
+%
+\iffalse
+Zum Beispiel wird die \LaTeXe-Formatdatei unter {\sc Unix} durch den
+Aufruf
+%
+\begin{quote}\small
+ \verb:initex latex.ltx:
+\end{quote}
+%
+erzeugt.
+\fi
+% Unix ist kein gutes Beispiel, weil ausgerechnet das verbreitete
+% teTeX ein Konfigurationsskript hat, so dass IniTeX normalerweise
+% nie manuell aufgerufen werden muss.
+%
+Genaueres dar"uber, wie Sie eine Formatdatei erstellen, entnehmen
+Sie bitte der zu Ihrem \TeX-System geh"orenden Beschreibung.
+
+W"ahrend Ini\TeX\ abl"auft,
+sollten Sie darauf achten, da"s auch die oben
+angegebene Konfigurationsdatei und die Trennmusterdateien eingelesen
+werden. Wenn dies nicht geschieht, haben Sie einen falschen Namen
+f"ur die Konfigurationsdatei ge"-w"ahlt. "Uber"-pr"ufen Sie nochmals
+den Dateinamen und ziehen Sie die Format"-dokumentation zu Rate.
+
+Bricht Ini\TeX\ beim Laden der Trennmusterdateien mit der
+Fehlermeldung
+%
+\begin{quote}\small
+ {\tt \TeX\ capacity exceeded, sorry
+ [pattern memory=}{\it x}{\tt ]}
+\end{quote}
+%
+ab, so haben Sie {\tt trie\_size} zu klein gew"ahlt, bei
+%
+\begin{quote}\small
+ {\tt \TeX\ capacity exceeded, sorry
+ [pattern memory ops=}{\it x}{\tt ]}
+\end{quote}
+%
+wurde {\tt trie\_op\_size} zu klein gew"ahlt. Falls dies bei Ihrer
+\TeX-Implemen"-tierung m"og"-lich ist, sollten Sie in diesen F"allen
+die Tabellen entsprechend ver"-gr"o"sern (siehe Schritt~3).
+Ansonsten k"onnen Sie nicht alle in Ihrer Konfigurationsdatei
+angegebenen Trennmusterdateien in einer einzigen Formatdatei
+verwenden.
+
+\paragraph{Schritt~5:}
+Wenn alles ohne Probleme durchlief, sollte zum Schlu"s eine Datei mit
+Endung~{\tt .fmt} und eine Protokolldatei mit Endung~{\tt .log}
+erstellt worden sein. Kopieren Sie beide Dateien in das Verzeichnis,
+wo Ihre \TeX-Implementierung nach Formatdateien sucht, falls
+dieser Schritt nicht automatisch erfolgt. Die Protokolldatei sollten
+Sie nicht l"oschen, da Sie anhand dieser Datei noch Monate sp"ater
+nachvollziehen k"onnen, wie Sie diese Formatdatei erstellt haben.
+
+Als Kontrolle, welche Trennmuster f"ur welche Sprachen geladen wurden,
+k"onnen Sie das Ende der Protokolldatei betrachten. Sie sollten beim
+Erstellen eines \LaTeXe-Formates ungef"ahr folgende Zeilen erhalten:
+%
+\begin{quote}\small
+\begin{verbatim}
+This is emTeX (tex386), Version 3.14159 [4b] (INITEX) ...
+**latex.ltx
+(latex.ltx (texsys.cfg)
+...
+(e:/texmf/tex/latex/local/hyphen.cfg
+== Loading hyphenation patterns:
+(e:/texmf/tex/generic/hyphen/hyphen.tex)
+\l@german=\language1
+
+(e:/texmf/tex/generic/hyphen/ghyph31.tex
+German Hyphenation Patterns `ghyphen' Version 3.1a <94/02/13>)
+\l@ngerman=\language2
+
+(e:/texmf/tex/generic/hyphen/gnhyph01.tex
+New German Hyphenation Patterns `gnhyph01' Rev. 22) done.)
+...
+Beginning to dump on file latex.fmt
+...
+14 hyphenation exceptions
+Hyphenation trie of length 21547 has 625 ops out of 750
+ 237 for language 2
+ 207 for language 1
+ 181 for language 0
+No pages of output.
+\end{verbatim}
+\end{quote}
+%
+Wie Sie in der vorletzten und den vorhergehenden Zeilen sehen, enth"alt die
+Formatdatei Trennmuster f"ur drei Sprachen, denen die Nummern \(0\)
+bis~\(2\) zugewiesen wurden. Zusammen be"-n"o"-tigen Sie
+\(\mbox{\tt trie\_size}=21547\) und \(\mbox{\tt trie\_op\_size}=625\)
+von \(750\)~vorhandenen Pl"atzen im "`Trie"'-Bereich. Au"serdem
+wurden mit \CS{hyphenation} zus"atzlich \(14\)~Trennungsausnahmen
+geladen. Laden Sie andere Trennmuster, unterscheiden sich Ihre Werte
+nat"urlich von den hier gezeigten Werten.
+
+\vspace{\baselineskip}
+
+In der Konfigurationsdatei, in der die Trennmuster geladen werden,
+werden die den Sprachen zugeordneten Nummern in den {\it control
+sequences\/} \mbox{\CS{l@}\(\langle\)Sprache\(\rangle\)}
+abgespeichert. Wird sp"ater beim "Uber"-setzen eines Dokuments auf
+eine Sprache gewechselt, f"ur die keine {\it control sequence\/}
+definiert wurde, so verwenden die Pakete "`german"' und "`ngerman"' die
+folgenden Default-Werte:
+%
+\begin{quote}\small
+\begin{tabular}{@{}lcl@{}}
+\multicolumn{1}{@{}c}{\it Sprache~}&\it Wert&\it oder,
+ falls gesetzt, Wert der Sprache\\[3pt]
+ \tt USenglish & 255 & \tt english\\
+ \tt english & 255 & \tt USenglish\\
+ \tt german & 255 & \tt austrian\\
+ \tt austrian & 255 & \tt german\\
+ \tt ngerman & 255 & \tt naustrian\\
+ \tt naustrian & 255 & \tt ngerman\\
+ \tt french & 255
+\end{tabular}
+\end{quote}
+%
+In "alteren Versionen der Style-Option "`german"' wurden den Sprachen
+Werte zwischen \(0\) und~\(5\) zugewiesen. Ab Version~2.5a wird der
+Wert~\(255\) verwendet, um die Trennung f"ur alle undefinierten Sprachen
+zu unterbinden. Dies funktioniert in den meisten F"allen, da im
+allgemeinen f"ur den Wert~\(255\) keine Trennmuster geladen werden.
+
+
+\section{Sonstiges}
+
+\subsection{Geschichtliches}
+
+Die Style-Option "`german"', die das Erstellen deutschsprachiger
+Texte mit \TeX\ vereinfacht, wurde von Dr.\ H.\ Partl (Technische
+Universit"at Wien) realisiert und zusammengestellt. Sie war als
+"`rasche L"osung"' entstanden, die den Vorteil hat, da"s sie keine
+"Anderungen an der \TeX-Software, den Schriftdateien und den
+Trennmustern erfordert, sondern direkt auf die Originalversion von
+\TeX\ aufgesetzt werden kann~\cite{Partl87,Partl88}. Diese "`rasche
+L"osung"' hat sich be"-w"ahrt und besitzt heutzutage ein weites
+Verbreitungsgebiet im deutschsprachigen Raum und dar"uberhinaus.
+
+Folgende Personen haben durch Ideen und Code-Beispiele zum Erfolg der
+Style-Option "`german"' beigetragen (die Liste erhebt keinen Anspruch
+auf Voll"-st"andigkeit): W.~Appelt, F.~Hommes und andere
+(Gesellschaft f"ur Mathematik und Datenverarbeitung St.~Augustin),
+T.~Hofmann ({\sc Ciba-Geigy} Basel), N.~Schwarz (Universit"at
+Bochum), J.~Schrod (TH Darmstadt), D.~Armbruster (Universit"at
+Stuttgart), R.~Sch\"opf (Universit"at Mainz, Universit"at Heidelberg,
+Zuse-Zentrum f"ur Informationsverarbeitung Berlin), F.~Mittelbach
+(Universit"at Mainz, EDS R"usselsheim), J.~Knappen (Universit"at
+Mainz), P.~Breitenlohner (Max-Planck-Institut M\"unchen),
+H.~Oberdiek (Universit"at Freiburg) und viele
+andere.
+
+F"ur die Anpassung an die neue Rechtschreibung
+war W.~Schmidt verantwortlich.
+
+Seit Version~2.3e vom 31.~Juli 1991 werden die Pakete "`german"' und "`ngerman"'
+von B.~Raichle (Universit"at Stuttgart) gepflegt und weiterentwickelt.
+
+
+
+\subsection{Verf"ugbarkeit der Makropakete}
+
+Die Makropakete "`german"' und "`ngerman"' kann man, wie fast jede andere
+\TeX-Soft\-ware, vom {\it Comprehensive \TeX\ Archive Network}, kurz
+\mbox{CTAN}, erhalten. Dieses Netzwerk besteht z.\,Z.\ aus den
+ftp-Servern {\tt ftp.dante.de}, {\tt ftp.tex.ac.uk} und {\tt ctan.tug.org},
+wobei auf
+jedem dieser Ser\-ver der gleiche Inhalt zu finden ist.
+\mbox{CTAN} dient als sogenannter "`Back\-bone"', d.\,h.\ das
+komplette Archiv oder Teile davon werden von diesen Servern auf vielen
+weiteren Ser\-ver "`gespiegelt"' vorgehalten, so da"s Sie die f"ur Sie
+g"unstigste Zugriffs"-m"oglichkeit w"ahlen k"onnen. Au"serdem ist der
+Inhalt von \mbox{CTAN} von mehreren Anbietern auch auf CD-ROM
+er"-h"altlich.
+
+Die Pakete, die zugeh"orige Dokumentation und die
+deutschen Trennmuster finden Sie auf \mbox{CTAN} in den
+Verzeichnissen
+\begin{quote}
+\begin{verbatim}
+tex-archive/language/german/
+tex-archive/language/hyphenation/
+\end{verbatim}
+\end{quote}
+
+Die Mitgliedschaft in DANTE~e.V\negthinspace.\ bietet eine weitere
+M"og"-lichkeit an die \TeX-Soft\-ware
+und viele Kontakte zu anderen \TeX-Anwendern zu gelangen.
+Informationen "uber DANTE~e.V\negthinspace.\ erhalten Sie von
+%
+\begin{quote}
+ DANTE, Deutschsprachige Anwendervereinigung
+ \TeX\ e.V\negthinspace. \\
+ Postfach 10\,18\,40 \\
+ 69008 Heidelberg \\
+ Federal Republic of Germany\\[4pt]
+ Tel.: +49 6221 2\,97\,66\\
+ Fax: +49 6221 16\,79\,06\\
+ E-Mail: {\tt dante@dante.de}\\[4pt]
+ {\sc www}: {\tt http://www.dante.de/}\\
+ ftp: {\tt ftp://ftp.dante.de/tex-archive/usergrps/dante/}
+\end{quote}
+
+
+\subsection{\protect\TeX~2.x vs.\ \protect\TeX~3.x und die
+ Style-Option "`german"'}
+
+Seit Oktober~1987 ist \TeX\ in der Version~\(3.x\) verf"ugbar. Da
+diese Version gegen"-"uber \TeX~\(2.x\) einige Erweiterungen besitzt,
+soll hier kurz auf die wichtigsten "Anderungen in der Style-Option
+"`german"' eingegangen werden.
+
+\TeX\ Version~3 f"uhrte neue {\it control sequences\/} f"ur neue
+Primitive und interne Register ein. Darunter f"allt das in "alteren
+Versionen der Style-Option "`german"' verwendete Makro
+\CS{set\-language}, das ab Version~2.3 in \CS{select\-language}
+umbenannt wurde. Da \CS{set\-language} ein \TeX~3-Primitiv ist und
+deshalb keine auf"-w"arts"-kompatible Definition angeboten werden
+kann, mu"s in "alteren Texten der alte Makroname durch den neuen Namen
+ersetzt werden.
+
+Zu \TeX{}s internen Registern kamen u.\,a.\ \CS{language},
+\CS{left\-hyphen\-min} und \CS{right\-hyphen\-min} hinzu, um
+Trennmuster f"ur mehr als eine Sprache unter"-st"utzen zu k"on\-nen.
+Diese drei Register bestimmen die zu verwendenden Trennmuster und die
+Mindest"-l"an"-ge der nicht trennbaren Wort"-pr"a"-fixe und
+\mbox{-suffixe}. Der "`normale"' \TeX-Benutzer sollte diese Register
+zum Wechsel der Trennmuster nie direkt "andern, sondern sollte dazu
+das \CS{select\-language}-Makro verwenden. Ab Version~2.4a der
+Style-Option "`german"' werden f"ur die Sprachen {\tt german} und
+{\tt austrian} zu"-s"atzlich \CS{french\-spacing} und die Werte f"ur
+\CS{left\-hyphen\-min} und \CS{right\-hyphen\-min} auf zwei gesetzt.
+
+
+\subsection{"Anderungen seit Version~2.0 (Oktober 1987)}
+
+Zus"atzlich zu den in fr"uheren Abschnitten erw"ahnten "Anderungen
+kommen folgende hinzu:
+
+\begin{itemize}\tolerance=9999\hbadness=2500
+\item In Versionen vor~2.2 fehlen die Befehle \verb:"S:, \verb:"CK:,
+ \verb:"FF: f"ur Gro"sbuchstaben und die entsprechenden Befehle f"ur
+ die Konsonanten L, M, N, P und~T.
+\item In Versionen bis~2.2 gab es die undokumentierten Makros
+ \CS{original\-@dospecials} und \CS{original\-@sanitize}, die die
+ urspr"unglichen Definitionen von \CS{do\-special} und \CS{@sanitize}
+ enthielten, und \CS{german\-@dospecials}, \CS{german\-@sanitize},
+ die zu"-s"atzlich das Double\-quote~(\verb:":) enthielten. Diese
+ Makros werden von einigen "`fremden"' Makros benutzt, obwohl sie
+ undokumentiert und nur zur internen Verwendung bestimmt waren.
+\item Bis Version~2.3e wurden bei Verwendung von~\verb:"|: zur
+ Verhinderung von Ligaturen keine weiteren Trennstellen im Wort
+ gefunden.
+\item Ab Version~2.3e werden die etwas tieferen Umlautakzente durch
+ ein ge"-"an"-der"-tes Makro erzeugt, das schneller ist und zu
+ kleineren \verb:dvi:-Dateien f"uhrt. Au"serdem werden jetzt bis auf
+ die Z"ah\-ler"-allokationen alle Definitionen und Zuweisungen lokal
+ aus\-ge\-f"uhrt.
+\item In Version~2.4a wurden durch zu"-s"atzliche \CS{/}-Anweisungen
+ "Uberschneidungen der "offnenden An"-f"uh\-rungs"-zeichen mit
+ nachfolgenden Zeichen bei Verwendung der
+ Com\-pu\-ter-Modern-Schriften f"ur viele F"alle verhindert.
+ Undefinierte \verb:"x:-Befehle f"uhren jetzt zu einer Fehlermeldung
+ -- dies f"uhrt oft dazu, da"s viele einfache Tippfehler schon beim
+ "Ubersetzen aufgedeckt werden. Die Befehle \verb:"z:, \verb:"Z:,
+ \verb:"~: und \verb:"=: kamen neu dazu.
+\item Version~2.5a ent"-h"alt Anpassungen an \LaTeXe{} zur Verwendung
+ von Schriften mit Kodierung {\tt OT1} und~{\tt T1}. Die Befehle
+ \verb:"r: und~\verb:"R: kamen hinzu. Die Defaults f"ur
+ "`undefinierte"' Sprachen sind jetzt~\(255\) mit entsprechenden
+ Warnungen, um die Benutzer zu zwingen, beim Laden der Trennmuster
+ gleich die verwendete \CS{language}-Nummer zu sichern (z.\,B.\ mit
+ dem Babel-System oder einer von Hand geschriebenen
+ Konfigurationsdatei). Intern wurden, neben der Verwendung von {\it
+ docstrip}, kleinere Optimierungen ausgef"uhrt.
+\item Bis Version~2.5b wird bei \verb:"ff: die ff-Ligatur verhindert,
+ obwohl diese bei Ausfall des dritten~"`\mbox{f}"' stehen sollte.
+ Diese "Anderung ab Version~2.5c kann zu gering"-f"ugig anderen
+ Trennungen im direkt auf \verb:"ff: folgenden Wortteil f"uhren.
+\item Version~2.5c f"ugt das explizite Kerning der oberen deutschen
+ Anf"uhrungszeichen~"' f"ur T1-kodierte Schriften nicht mehr ein, da
+ die EC-Schriften (und die DC-Schriften ab Version~1.2 als deren
+ Testversion) diese Anf"uhrungszeichen etwas weiter nach links
+ plazieren, so da"s es sonst zu "Uber"-schneidungen kommt.
+\item Version~2.5d erlaubt bei T1-kodierten Schriften das dort
+ notwendige Kerning der Anf"uhrungszeichen sowohl bei \CS{glqq},
+ \CS{grqq}, \CS{flqq} und \CS{frqq} als auch bei \verb:"`:,
+ \verb:"':, \verb:"<: und~\verb:">:.
+\item Mit Version~2.5e wird zus"atzlich das Paket "`ngerman"'
+ eingef"uhrt. Die Implementierung des undokumentierten Befehls
+ \verb:\iflanguage: wird dahingehend ge"andert, da"s in seinen
+ "`then"'- und "`else"'"~Argumenten auch Makros verwendet werden k"onnen,
+ deren Parameter erst hinter dem \verb:\iflanguage:-Befehl folgen.
+ Das erm"oglicht Konstrukte wie
+ \verb:Sto\iflanguage{german}{"}{f}ffetzen:.
+\end{itemize}
+
+
+
+\begin{thebibliography}{99}\tolerance=2000\hbadness=2000
+\bibitem[Duden, Bd.~1]{Duden} {\sc Duden},
+ Rechtschreibung der deutschen Sprache und der
+ Fremd"-w"orter. Hrsg.\ von der {\sc Duden}-Redaktion.
+ Auf der Grundlage der amtlichen Rechtschreibregeln.
+ Mannheim; Wien; Z"urich: Bibliographisches Institut,
+ 19.~Auf"|lage, 1986.
+\bibitem[Partl87]{Partl87} Hubert Partl,
+ {\it Ein "`Minimal Subset"' f"ur einheitliche deutsche
+ \TeX-Befehle}, Vortrag und Diskussion beim 6.~Treffen der
+ deutschen \TeX-""Interessenten in M"unster (1987).
+ Anm.: ver"offentlicht in einer Datei namens {\tt germdoc.tex},
+ mittlerweile ersetzt durch das Ihnen vorliegende
+ Dokument "`Kurzbeschreibung -- {\tt (n)german.sty}"'.
+\bibitem[Partl88]{Partl88} Hubert Partl,
+ German \TeX, {\em TUGboat\/} 9(1):70--72, 1988.
+\bibitem[Braams91]{Braams91} Johannes Braams,
+ Babel, a multilingual style-option system for use with \LaTeX's
+ standard document styles,
+ {\it TUGboat\/} 12(2):291--301, Juni 1991.
+\bibitem[Goossens94a]{Goossens94a} Michel Goossens, Frank Mittelbach und
+ Alexander Samarin, {\it The \LaTeX\ Companion},
+ Addison-Wesley, Reading, 2.~Auf"|lage, 1994.
+\bibitem[Goossens94b]{Goossens94b} Michel Goossens, Frank Mittelbach und
+ Alexander Samarin, {\it Der \LaTeX-Begleiter},
+ Addison-Wesley, Bonn, 1.~Auf"|lage, 1994.
+ Anm.: "uber"-arbeitete, deutsche "Uber"-setzung
+ von~\cite{Goossens94a}.
+\end{thebibliography}
+
+\end{document}
diff --git a/language/german/german.MISSING b/language/german/german.MISSING
new file mode 100644
index 0000000000..acfad9e270
--- /dev/null
+++ b/language/german/german.MISSING
@@ -0,0 +1,10 @@
+If you need the style option/package "german.sty", you can find the
+newest version on CTAN in
+
+ tex-archive/languages/german/
+
+
+The participating hosts in the Comprehensive TeX Archive Network
+(CTAN) are:
+ ftp.dante.de (Germany)
+ ftp.tex.ac.uk (England)
diff --git a/language/german/german.dtx b/language/german/german.dtx
new file mode 100644
index 0000000000..50500e75a0
--- /dev/null
+++ b/language/german/german.dtx
@@ -0,0 +1,2331 @@
+% \iffalse meta-comment
+%<*!hyphcfg>
+%<*!driver>
+% \begin{macrocode}
+%
+% Copyright (C) 1987-1990 by H.Partl
+% Copyright (C) 1991-1997 by B.Raichle and DANTE e.V.
+% Copyright (C) 1998 by B.Raichle
+% All rights reserved.
+%
+% Please read the documentation file `gerdoc.tex' for more
+% information of how to use this macro file and how to install
+% the pattern files necessary for german hyphenation.
+%
+% \end{macrocode}
+%
+% INSTALLATION GUIDE:
+%
+% The distribution of the `german' package consists of a set of
+% files, which are packed and documented in _one_ `docstrip archive
+% file' called `german.dtx'. This archive file can be unpacked to
+% create the necessary files containing the macros, implementation
+% documentation, and other files.
+%
+% To unpack this archive file you need:
+%
+% * `german.ins' (containing docstrip installation instructions)
+%
+% * `german.dtx' (it is the file you are currently reading)
+%
+% * `docstrip.tex' version 2.4 or newer
+% (You can find this file in the LaTeX2e release;
+% `docstrip' can be used with plainTeX, too!)
+%
+% Then run `german.ins' through plainTeX or LaTeX to unpack the
+% archive file:
+%
+% tex german.ins
+% or
+% latex german.ins
+%
+% This will create a set of files which contain the macro code or
+% code to produce the implementation documentation of the `german'
+% bundle of files.
+%
+% --------------- start of docstrip archive file ------------------
+%
+% To get the formatted code documentation do the following steps
+%
+% latex german.dtx
+% latex german.dtx
+% makeindex -s gind.ist german.idx
+% makeindex -s gglo.ist -o german.gls german.glo
+% latex german.dtx
+%
+%
+%</!driver>
+%<*driver>
+\ifx\documentclass\undefined % LaTeX2e or 2.09?
+ \documentstyle[newdoc,german]{article}
+ \ifx\LaTeXe\undefined
+ \newcommand{\LaTeXe}{%
+ \mbox{\LaTeX\kern.15em\(2_{\textstyle\varepsilon}\)}}\fi
+ \newcommand{\emph}[1]{{\em #1}}
+ \newcommand{\textit}[1]{{\it #1}}
+ \newcommand{\textbf}[1]{{\bf #1}}
+ \newcommand{\texttt}[1]{{\tt #1}}
+ \newcommand{\cs}[1]{{\tt\symbol{92}#1}}
+ \MakeShortverb{\|}\CodelineIndex
+\else
+ \documentclass[a4paper]{ltxdoc}
+ \usepackage{german}
+ \EnableCrossrefs
+ %\DisableCrossrefs % Say \DisableCrossrefs if index is ready
+ \CodelineIndex \RecordChanges
+\fi
+\begin{document}
+\setcounter{StandardModuleDepth}{0}
+\DocInput{german.dtx}
+\PrintIndex \PrintChanges
+\end{document}
+%</driver>
+%<*!driver>
+%
+% \fi
+% \CheckSum{2166}
+%
+% \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 \~}
+%
+% \DoNotIndex{\',\(,\),\-,\.,\/,\{,\},\^,\`,\|,\ ,\@,\x,\Z}
+% \DoNotIndex{\@M,\@m,\m@ne,\z@,\z@skip,\@ne,\tw@,sixt@@n}
+% \DoNotIndex{\count@,\dimen@,\advance,\day,\month,year,\relax}
+% \DoNotIndex{\begin,\end,\bgroup,\egroup,\begingroup,\endgroup}
+% \DoNotIndex{\bf,\em,\it,\rm,\tt,\textbf,\textit,\texttt,\emph}
+% \DoNotIndex{\expandafter,\noexpand,\string,\the,\ifhmode,\ifmmode}
+% \DoNotIndex{\ifcase,\or,\else,\fi,\if,\ifdim,\ifnum,\ifx}
+% \DoNotIndex{\do,\afterassignment,\number,\escapechar,\space}
+% \DoNotIndex{\def,\edef,\let,\newcommand,\undefined,\active}
+% \DoNotIndex{\accent,\box,\dp,\ht,\wd,\char,\chardef,\discretionary}
+% \DoNotIndex{\catcode,\csname,\endcsname,\hbox,\hskip,\kern}
+% \DoNotIndex{\font,\fontdimen,\scriptscriptstyle,\textstyle}
+% \DoNotIndex{\lccode,\lowercase,\sfcode,\spacefactor,\penalty}
+% \DoNotIndex{\mathchar,\mathchardef,\mathaccent,\varepsilon,\m@th}
+% \DoNotIndex{\empty,\@empty,\leavevmode,\makeatletter,\mbox}
+% \DoNotIndex{\errhelp,\errmessage,\message,\wlog,\write,\immediate}
+% \DoNotIndex{\lower,\raise,\sfcode,\spacefactor,\setbox,\toks}
+% \DoNotIndex{\documentclass,\documentstyle,\LaTeX,\LaTeXe,\TeX}
+% \DoNotIndex{\ProvidesPackage,\usepackage,\CodelineIndex,\cs}
+% \DoNotIndex{\input,\endinput,\DocInput}
+%
+%
+% \title{Die Makropakete "`german"' und "`ngerman"' f"ur \LaTeXe, \LaTeX~2.09,
+% Plain-\TeX{} und andere darauf basierende Formate}
+% \date{8.~Juli 1998}
+% \author{Bernd Raichle \\
+% E-mail: \texttt{raichle@Informatik.Uni-Stuttgart.DE}}
+% \maketitle
+%
+% Dieses Dokument beschreibt Interna, Einschr"ankungen und einige
+% Tricks und Kniffe, die bei der Implementierung der Makropakete
+% "`german"' und "`ngerman"' verwendet werden.
+% Wie diese Pakete installiert
+% und verwendet werden, ist in der "`Kurzbeschreibung --
+% \texttt{german.sty} (Version~2.5)"' zu finden. Diese ist in der
+% Datei \texttt{gerdoc.tex} zu finden, die mit der Datei
+% \texttt{german.dtx} bzw. den Makropaketen mitgeliefert wird
+% und ist f"ur den Endanwender gedacht.
+%
+% Das vorliegende Dokument ist \emph{nicht} f"ur den Endanwender
+% gedacht. Es beschreibt die Implementierung und ist zum einen f"ur
+% den zuk"unftige Verwalter dieser Pakete gedacht, zum anderen
+% f"ur alle Makro-Schreiber, die Ideen und Verbesserungsvorschl"age
+% direkt am Code austesten wollen.
+%
+% Der Code der beiden Pakete "`german"' und "`ngerman"' ist weitgehend
+% identisch. Wo im folgenden nur von "`german"' die Rede ist, sind
+% \emph{beide} Pakete gemeint; auf Unterschiede wird stets explizit
+% hingewiesen. Mit |<old>| gekennzeichnete Codezeilen geh"oren zu
+% "`german"', mit |<new>| gekennzeichnete zu "`ngerman"'.
+%
+% \changes{2.5e (beta 1)}{98/05/05}{Es kann wahlweise "`german"' oder "`ngerman"'
+% erzeugt werden, indem \textsc{DocStrip} mit den Optionen \texttt{old}
+% oder \texttt{new} aufgerufen wird.}
+% \StopEventually{}
+%
+% \tableofcontents
+%
+% \ifx\emergencystretch\undefined \else
+% \setlength{\emergencystretch}{2em}
+% \fi
+% \hbadness=2000
+%
+% \section{Identifikation des Pakets}
+%
+% Damit diese Datei problemlos mehrmals eingelesen werden kann, wird
+% hier getestet, ob die Datei bereits geladen wurde. Dadurch wird
+% verhindert, da"s Makros, Z"ahler, etc.\ noch einmal und damit
+% unn"otig definiert werden und in einigen F"allen auch
+% zus"atzliche Ressourcen belegen. Damit auch Nutzer mit
+% vorgeladenen, alten "`german"'-Versionen in den Genu"s dieser
+% neuen Version kommen, wird nicht wie in "alteren Versionen die
+% Existenz der Anweisung Befehl |\mdqon| "uberpr"uft, sondern auf
+% eine Versionsnummer abgetestet. Diese Versionsnummer besteht aus
+% der Jahreszahl und einer pro Jahr fortlaufenden Nummer.
+%
+% Die \textit{control sequence} f"ur die Versionsnummer sollte mit
+% keinem anderen Paket kollidieren. Daher wird der Pr"afix
+% \texttt{grmn@} bzw. \texttt{ngrm@} im Namen verwendet. Da AMS-\TeX{} ein aktives
+% At-Zeichen verwendet, wird dieses hier explizit mit |\string|
+% deaktiviert, bis wir den |\catcode| "andern.
+%
+% \changes{2.5c}{96/02/26}{Total falsche Logik zur Verhinderung
+% mehrmaligen Lesen des Styles korrigiert, \cs{ifdim} durch
+% \cs{ifnum} ersetzt, \cs{grmn@VersionNo} mu"s mit \cs{csname}
+% erzeugt werden, da \cs{catcode} des At-Zeichens noch unbekannt
+% ist, Versionsnummer sollte in allen F"allen gesetzt werden.}
+% \changes{2.5c}{96/04/21}{Mit AMS-\TeX{} aktives At-Zeichen
+% in \cs{grmn@VersionNo} explizit mit \cs{string} deaktivieren
+% (found by \texttt{Michael.Schgraffer@uibk.ac.at}, 95/10/10).}
+% \changes{2.5e (beta 2)}{98/05/12}{Abgefragte Versionsnummer korrigiert;
+% 9805 statt 9701)}
+% \begin{macrocode}
+%<old>\expandafter\ifx\csname grmn\string @VersionNo\endcsname\relax
+%<new>\expandafter\ifx\csname ngrm\string @VersionNo\endcsname\relax
+\else
+%<old> \ifnum\number\csname grmn\string @VersionNo\endcsname<9806\relax
+%<new> \ifnum\number\csname ngrm\string @VersionNo\endcsname<9806\relax
+%<old> \else \germanTeX \expandafter\expandafter\expandafter\endinput
+%<new> \else \ngermanTeX \expandafter\expandafter\expandafter\endinput
+ \fi\fi
+% \end{macrocode}
+%
+% Ist "`german"' noch nicht geladen oder wurde bisher eine "altere
+% Version verwendet, so wird der Rest dieser Datei abgearbeitet.
+% Zuerst wird die Versionsnummer gesetzt. Da diese gr"o"ser als 255
+% ist, wird dazu |\mathchardef| verwendet.
+% \begin{macrocode}
+%<old>\expandafter\mathchardef\csname grmn\string @VersionNo\endcsname
+%<new>\expandafter\mathchardef\csname ngrm\string @VersionNo\endcsname
+=9806\relax % = v2.5e
+% \end{macrocode}
+%
+%
+% Die Style-Option "`german"' soll sowohl von Plain-\TeX\ als auch
+% von den unterschiedlichen \LaTeX-Versionen verwendet werden
+% k"onnen. Deshalb wird f"ur die Ausgabe das Primitiv |\message|
+% verwendet.
+% \changes{2.5e (beta 2)}{98/05/12}{Meldungen korrigiert und vereinfacht.}
+%
+% \begin{macrocode}
+\message{v2.5e 1998-07-08}
+% \end{macrocode}
+%
+% F"ur \LaTeXe\ wird die Style-Option als Paket deklariert. Da
+% andere Style-Optionen den Befehl |\ProvidesPackage| meist nur auf
+% \texttt{undefined} abtesten, wird hier eine auf den ersten Blick
+% komisch anmutende Konstruktion mit einer Gruppe verwendet. Sie
+% verhindert aber, da"s ein vorher undefiniertes |\ProvidesPackage|
+% danach die Bedeutung |\relax| hat. Dieser Gruppierungstrick wird
+% noch einige Male verwendet.
+%
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
+%<old> \ProvidesPackage{german}[1998/07/08 v2.5e %
+%<new> \ProvidesPackage{ngerman}[1998/07/08 v2.5e %
+ Support for writing german texts (br)]
+\fi
+% \end{macrocode}
+%
+% Da diese Datei auch mit einem simplen |\input| geladen werden
+% kann, andererseits aber auf interne Befehle zugegriffen werden
+% mu"s, wird der \textit{category code} des Zeichens~\texttt{@}
+% gerettet, bevor er auf "`letter"' ge"andert wird.
+%
+% \begin{macrocode}
+\chardef\atcode=\catcode`\@
+\catcode`\@=11 % \makeatletter
+% \end{macrocode}
+%
+%
+% \section{Kompatibilit"atsmakros}
+%
+% \subsection{Low-Level-Makros}
+%
+% Einige Makros aus dem \LaTeX-Format sind sehr hilfreich und werden,
+% falls sie nicht definiert wurden, hier definiert.
+% \changes{2.5c}{95/01/24}{Im Makro \cs{@ifundefined} wurde in den
+% Namen der beiden Hilfsmakros in v2.5a/b das \texttt{dq}
+% vergessen.}
+% \begin{macrocode}
+\expandafter\ifx\csname @ifundefined\endcsname\relax
+ \def\@ifundefined#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\grmn@dqfirst\else\expandafter\grmn@dqsecond\fi}
+\fi
+% \end{macrocode}
+% Die Makros |\grmn@dqfirst|\label{grmndqfirst} und |\grmn@dqsecond|
+% werden sp"ater nochmals verwendet.
+% \begin{macrocode}
+\def\grmn@dqfirst#1#2{#1}
+\def\grmn@dqsecond#1#2{#2}
+% \end{macrocode}
+%
+% \subsection{Kompatibilit"atsmakros f"ur NFSS, Version~2}
+%
+% Das neue Schriftauswahlschema~NFSS hat in Version~2 den neuen
+% Schriftparameter |\fontencoding|. NFSS~2 wurde offiziell im
+% ersten \LaTeXe-Release vom 1.~Juni 1994 eingef"uhrt, jedoch im
+% n"achsten Release vom 1.~Dezember 1995 durch Fehlerberichtigungen,
+% Erweiterungen und neu eingef"uhrte Befehle verbessert.
+%
+% Im folgenden wird angenommen, da"s NFSS~2 vorhanden ist, wenn der
+% Befehl |\DeclareTextSymbol| definiert ist.
+%
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+% \end{macrocode}
+%
+% \subsubsection{Makros f"ur Textzeichen -- ohne NFSS~2}
+%
+% Der symbolische Name |\SS| f"ur ein SS mu"s f"ur \LaTeX~2.09 und
+% Plain-\TeX{} definiert werden, falls er noch nicht bekannt ist.
+% \changes{2.5d}{97/04/13}{F"ur \texttt{\symbol{`\"}S} wird
+% \cs{SS} verwendet, das in \LaTeXe{} bereits definiert ist.}
+% \begin{macrocode}
+\@ifundefined{SS}{\def\SS{SS}}{}
+% \end{macrocode}
+%
+%
+% Die nachfolgenden Abschnitte beschreiben die notwendigen
+% Deklarationen f"ur NFSS~2.
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \subsubsection{Deklarationsmakros}
+%
+% Die neueren NFSS~2-Versionen haben einige Befehle, die f"ur Symbole
+% und Akzentmakros Defaultwerte f"ur diejenigen Schriften deklarieren,
+% f"ur die keine expliziten Symboldeklarationen angegeben wurden.
+% Diese Befehle werden f"ur "altere NFSS~2-Versionen in einer sehr
+% stark vereinfachten Realisierung nachfolgend definiert.
+% \emph{In diesen Definitionen werden einige Interna aus
+% \LaTeXe/NFSS~2 verwendet, so da"s dieser Teil der Style-Option
+% zuk"unftig m"oglicherweise zu Fehlern f"uhren kann! Dieser Teil ist
+% als schlechtes Beispiel zu betrachten -- es zeigt, wie man solche
+% Dinge m"oglichst nicht realisieren sollte. Jedoch sind diese
+% Definitionen notwendig, damit diese Style-Option auch mit diesen
+% "alteren Versionen laufen kann.}
+% \textbf{Es ist daher immer ratsam, eine alte \LaTeXe-Release durch
+% die neueste Version zu ersetzen.}
+% Aus diesem Grund wird hier ein Hinweis f"ur den Benutzer dieses
+% alten Release ausgegeben. In der n"achsten Version wird
+% German-Style abbrechen oder den sehr viel einfacheren Code
+% f"ur \LaTeX~2.09 verwenden.
+%
+% \changes{2.5c}{96/04/28}{Warnung und Hinweis auf Update bei
+% Benutzung der veralteten \LaTeXe-Release vom Juni~1994.}
+% \begin{macrocode}
+% \changes{2.5e (beta 1) }{98/05/04}{Formulierung ge"andert.}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvideTextCommandDefault\endcsname\relax
+ \immediate\write17{}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{%
+!! Dies ist eine zu alte LaTeX2e-Version, die nicht}
+ \immediate\write17{%
+!! alle fuer german/ngerman notwendigen Deklarationen}
+ \immediate\write17{%
+!! zur Verfuegung stellt. Dennoch koennen Sie diese}
+ \immediate\write17{%
+!! Pakete, eventuell mit kleinen Fehlern, verwenden.}
+ \immediate\write17{!!}
+ \immediate\write17{%
+!! Bitte installieren Sie eine neuere LaTeX2e-Version,}
+ \immediate\write17{%
+!! da zukuenftige Versionen der Pakete diese}
+ \immediate\write17{%
+!! LaTeX2e-Version nicht mehr unterstuetzen werden!}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{}
+\fi
+% \end{macrocode}
+%
+% Weiterhin wird angenommen, da"s der Befehl |\providecommand|
+% verf"ugbar ist. Dieser Befehl k"onnte in einer zuk"unftigen
+% NFSS~2-Version, die f"ur Plain-\TeX\ angepa"st wurde, nicht mehr
+% verf"ugbar sein.
+%
+% |\UseTextSymbol{|\meta{encoding}|}{|\meta{symbol}|}| schaltet die
+% angegebene Schriftkodierung zur Ausgabe dieses Zeichens um.
+% \begin{macrocode}
+\@ifundefined{UseTextSymbol}{%
+ \def\UseTextSymbol#1#2{{\fontencoding{#1}\selectfont #2}}
+}{}
+% \end{macrocode}
+%
+% |\UseTextAccent{|\meta{encoding}|}{|\meta{accent}|}{|\meta{base}|}|
+% verwendet das Akzentzeichen aus der Schrift mit der angegebenen,
+% eventuell vom aktuellen Wert abweichenden Kodierung.
+% \begin{macrocode}
+\@ifundefined{UseTextAccent}{%
+ \def\UseTextAccent#1#2#3{%
+ {\let\@curr@enc\f@encoding
+ \fontencoding{#1}\selectfont
+ #2{\fontencoding\@curr@enc\selectfont #3}}}%
+}{}
+% \end{macrocode}
+%
+% |\ProvideTextCommand{|\meta{csname}|}{|\meta{encoding}|}[|^^A
+% \meta{number}|][|\meta{default}|]{|\meta{definition}|}| definiert
+% einen Befehl, der nur f"ur die angegebene Kodierung verwendet wird,
+% falls dieser Befehl noch nicht f"ur diese Kodierung definiert
+% wurde.
+% \begin{macrocode}
+\@ifundefined{ProvideTextCommand}{%
+ \def\ProvideTextCommand#1#2{%
+ %%% misses \RobustTextCommand{#1}{...etc.etc...}!!
+ \expandafter\providecommand\csname #2\string#1\endcsname}%
+}{}
+% \end{macrocode}
+%
+% |\ProvideTextCommandDefault{|\meta{command}|}{|\meta{definition}|}|
+% definiert nun eine Defaultdefinition f"ur alle Kodierungen, f"ur
+% die keine explizite Definition angegeben wurde. Leider w"urde eine
+% einigerma"sen komplette Realisierung einer Re-Implementierung der
+% neueren NFSS~2-Versionen entsprechen, so da"s hier einfach nur eine
+% Definition f"ur die Kodierung~\glq U\grq{} get"atigt wird, die f"ur
+% unbekannte Kodierungen verwendet wird.
+% \begin{macrocode}
+\@ifundefined{ProvideTextCommandDefault}{%
+ \def\ProvideTextCommandDefault#1{%
+ \ProvideTextCommand{#1}{U}}%
+}{}
+% \end{macrocode}
+%
+% Mit |\DeclareTextCompositeCommand{|\meta{command}|}{|^^A
+% \meta{encoding}|}{|\meta{char}|}{|\meta{definition}|}| kann f"ur die
+% Umlaut- und Trema-Kombinationen sehr bequem eine Definition
+% angegeben werden. Bevor hier f"ur die "alteren NFSS~2-Versionen
+% eine eigene L"osung "`gestrickt"' wird, verl"a"st sich die
+% nachfolgende Definition auf einige \LaTeXe/NFSS~2-Interna!
+% \begin{macrocode}
+\@ifundefined{DeclareTextCompositeCommand}{%
+ \def\DeclareTextCompositeCommand#1#2#3#4{%
+ % define a `dummy' text composite
+ \DeclareTextComposite{#1}{#2}{#3}{`\Z}%
+ % then redefine this command including the new command
+ \expandafter\def\csname\expandafter\string\csname
+ #2\endcsname\string#1-\string#3\endcsname##1##2{#4}}%
+}{}
+% \end{macrocode}
+%
+% Damit ist gesichert, da"s bei Vorliegen von \LaTeXe/NFSS~2 die
+% wichtigsten Deklarationen unabh"angig von der \LaTeXe-Version
+% verf"ugbar sind. Dies vereinfacht die nachfolgenden Deklarationen.
+%
+% \subsubsection{Makros f"ur Textzeichen}
+%
+% Neben den zuvor aufgezeigten Makros definieren die neueren
+% NFSS~2-Versionen noch symbolische Namen f"ur viele der in den
+% Schriften vorhandenen Lettern. Im folgenden werden zum einen f"ur
+% die "alteren Versionen die anschlie"send verwendeten symbolischen
+% Namen nachdefiniert und zum anderen werden Definitionen, die in
+% "alteren \LaTeXe/NFSS~2-Versionen fehlen, f"ur die
+% Kodierung~\texttt{OT1} und Defaults f"ur einige Lettern
+% nachgereicht.
+%
+% \paragraph{Spezielle Behandlung von Babel~v3.5:}
+%
+% Babel Version~3.5 definiert f"ur Nicht-\LaTeXe-Formate die
+% wichtigsten NFSS~2-Anweisung zur Deklaration der symbolischen Namen.
+% Dadurch meint der Code des German-Style, da"s selbst f"ur diese
+% Formate ein vollst"andiges \LaTeXe{} mit NFSS~2 vorl"age. Leider
+% fehlten in "alteren Babel-Versionen wichtige Standarddeklarationen,
+% was zur Folge hat, da"s es bei deren Verwendung zu Fehlern wie
+% z.\,B.\ Endlosschleifen kommen kann. Eine Endlosschleife wird dabei
+% durch Deklaration eines Defaults mit
+% \cs{Provide\-Text\-Command\-Default} verursacht, wenn das Symbol
+% bisher noch nicht deklariert wurde. In Babel Version~3.6
+% werden daher jetzt die Symbole \cs{ss}, \cs{i},
+% \cs{textquotedblright} und \cs{textquoteright} deklariert, die in
+% Version~3.5 fehlten.
+%
+% In den folgenden Deklarationen werden NFSS~2-Interna verwendet:
+% Es wird beispielsweise angenommen, da"s die Existenz des Makros
+% \texttt{\symbol{`\\}OT1\symbol{`\\}ss} -- ein Makro! -- anzeigt,
+% da"s \cs{ss} f"ur NFSS~2 deklariert wurde. Ist dies f"ur die vier
+% Symbole \cs{ss}, \cs{i}, \cs{textquotedblright} und
+% \cs{textquoteright} der Fall, werden sie hier nachdeklariert.
+% Dabei wird dies in der Protokolldatei vermerkt, um eventuell
+% diese Ursache f"ur auftretende Fehler leichter erkennen zu k"onnen.
+% \cs{textquotedblright} und \cs{textquoteright} werden sp"ater noch
+% deklariert, so da"s dies hier noch nicht notwendig ist.
+%
+% \changes{2.5d}{97/04/13}{Die fehlenden Deklarationen f"ur \cs{ss} und
+% \cs{i}, werden f"ur Babel~v3.5, falls ben"otigt, nachdeklariert.
+% F"ur \cs{textquotedblright} und \cs{textquoteright} hier nicht
+% notwendig, da dies hier ein paar Zeilen sp"ater gemacht wird.}
+% \begin{macrocode}
+\@ifundefined{OT1\string\ss}{%
+%<old> \wlog{german: Re-declaration of \string\ss\space for OT1!}%
+%<new> \wlog{ngerman: Re-declaration of \string\ss\space for OT1!}%
+ \DeclareTextSymbol{\ss}{OT1}{25}}{}
+\@ifundefined{OT1\string\i}{%
+%<old> \wlog{german: Re-declaration of \string\i\space for OT1!}%
+%<new> \wlog{ngerman: Re-declaration of \string\i\space for OT1!}%
+ \DeclareTextSymbol{\i}{OT1}{16}}{}
+% \end{macrocode}
+%
+% \paragraph{Defaults f"ur Symbole:}
+%
+% F"ur die Makros |\"|, |\ss|, |\i| und |\SS| sollte ein Default
+% definiert sein.
+% \changes{2.5d}{97/04/13}{F"ur \texttt{\symbol{`\"}S} wird
+% \cs{SS} verwendet, das in \LaTeXe{} bereits definiert ist.}
+% \begin{macrocode}
+\ProvideTextCommandDefault{\"}{\UseTextAccent{OT1}{\"}}
+\ProvideTextCommandDefault{\ss}{\UseTextSymbol{OT1}\ss}
+\ProvideTextCommandDefault{\i}{\UseTextSymbol{OT1}\i}
+\ProvideTextCommandDefault{\SS}{SS}
+% \end{macrocode}
+%
+% Dann sollte auch sichergestellt sein, da"s symbolische Namen f"ur
+% die Zeichen definiert sind, die in den Makros f"ur die
+% Anf"uhrungszeichen verwendet werden. Die Defaults werden jeweils
+% aus den Schriften in Kodierung~\texttt{OT1} genommen.
+%
+% Zuerst die Zeichen f"ur die Anf"uhrungszeichen "`\ldots"' und
+% \glq\ldots\grq:
+% \begin{macrocode}
+\@ifundefined{textquotedblleft}{%
+ \ProvideTextCommandDefault{\textquotedblleft}{%
+ \UseTextSymbol{OT1}\textquotedblleft}%
+ \DeclareTextSymbol{\textquotedblleft}{OT1}{92}%
+% \end{macrocode}
+% (oder |\DeclareTextCommand{\textquotedblleft}{OT1}{``}|)
+% \begin{macrocode}
+ \DeclareTextSymbol{\textquotedblleft}{T1}{16}%
+}{}
+\@ifundefined{textquotedblright}{%
+ \ProvideTextCommandDefault{\textquotedblright}{%
+ \UseTextSymbol{OT1}\textquotedblright}%
+ \DeclareTextSymbol{\textquotedblright}{OT1}{`\"}%
+% \end{macrocode}
+% (oder |\DeclareTextCommand{\textquotedblright}{OT1}{''}|)
+% \begin{macrocode}
+ \DeclareTextSymbol{\textquotedblright}{T1}{17}%
+ %% \DeclareTextSymbol{\textquotedbl}{T1}{`\"}%
+}{}
+\@ifundefined{textquoteleft}{%
+ \ProvideTextCommandDefault{\textquoteleft}{%
+ \UseTextSymbol{OT1}\textquoteleft}%
+ \DeclareTextSymbol{\textquoteleft}{OT1}{`\`}%
+ \DeclareTextSymbol{\textquoteleft}{T1}{`\`}%
+}{}
+\@ifundefined{textquoteright}{%
+ \ProvideTextCommandDefault{\textquoteright}{%
+ \UseTextSymbol{OT1}\textquoteright}%
+ \DeclareTextSymbol{\textquoteright}{OT1}{`\'}%
+ \DeclareTextSymbol{\textquoteright}{T1}{`\'}%
+}{}
+\@ifundefined{quotesinglbase}{%
+ \DeclareTextSymbol{\quotesinglbase}{T1}{13}}{}
+\@ifundefined{quotedblbase}{%
+ \DeclareTextSymbol{\quotedblbase}{T1}{18}}{}
+% \end{macrocode}
+% Danach die Anf"uhrungszeichen in franz"osischer Form ">\ldots"< und
+% \frq\ldots\flq:
+% \begin{macrocode}
+\@ifundefined{guillemotleft}{%
+ \DeclareTextSymbol{\guillemotleft}{T1}{19}}{}
+\@ifundefined{guillemotright}{%
+ \DeclareTextSymbol{\guillemotright}{T1}{20}}{}
+\@ifundefined{guilsinglleft}{%
+ \DeclareTextSymbol{\guilsinglleft}{T1}{14}}{}
+\@ifundefined{guilsinglright}{%
+ \DeclareTextSymbol{\guilsinglright}{T1}{15}}{}
+% \end{macrocode}
+%
+% Damit sind die wichtigsten Makros so definiert, da"s die
+% nachfolgenden Definitionen nur noch wenige F"alle unterscheiden
+% m"ussen und damit "ubersichtlicher definiert werden k"onnen.
+%
+% Die nun folgenden Definitionen sind nicht nur f"ur NFSS~2
+% verwendbar, so da"s das \texttt{if}-NFSS~2 vorl"aufig beendet werden
+% kann.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \section{Low-Level-Befehle f"ur die Style-Option}
+%
+% Die Style-Option verwendet Low-Level-Befehle zur Implementierung
+% von An"-f"uhrungs"-zeichen, der Umlaute u.\,a. Einige dieser
+% Befehle sind auch f"ur Benutzer verf"ugbar.
+%
+% \subsection{Verschiedenes}
+%
+% \LaTeX\ verwendet den Befehl |\protect|, um \emph{fragile}
+% Kommandos zu sch"utzen. Dieser Befehl mu"s f"ur Plain-\TeX\
+% nachdefiniert werden. Folgendes Code-St"uck definiert diesen
+% Befehl als |\relax|, falls er noch undefiniert ist,
+% andernfalls wird |\protect| nicht ge"andert.
+% \begin{macrocode}
+\expandafter\let\expandafter\protect\csname protect\endcsname
+% \end{macrocode}
+%
+% Mit |\allowhyphens| kann man \TeX\ signalisieren, da"s ein
+% trennbarer Wortteil endet (durch den |\penalty1000|- oder
+% |\nobreak|-Befehl) und ein neuer beginnt (durch den |\hskip|-Befehl,
+% der \textit{glue} ein"-f"ugt). Dieser Trick ist in Anhang~D des
+% \TeX{}book beschrieben, die Interna dazu in Anhang~H.
+%\begin{verbatim}
+%\def\allowhyphens{\nobreak \hskip 0pt plus 0pt\relax}
+%\end{verbatim}
+% entspricht der nachfolgenden Definition:
+% \begin{macrocode}
+\def\allowhyphens{\penalty\@M \hskip\z@skip}
+% \end{macrocode}
+%
+% Neben den Umlauten mu"s auch daf"ur gesorgt werden, da"s am und nach
+% dem Buchstaben~{\ss} getrennt werden kann, \TeX{} also diesen Letter
+% als Wortbestandteil erkennt. Dazu mu"s dem Letter ein
+% Lowercase-Code |\lccode| gr"o"ser als Null zugewiesen sein.
+% |\ss|~entspricht f"ur Schriften in Kodierung~\texttt{OT1} dem
+% Letter auf Position~|^^Y|. Um W"orter mit diesem Letter komplett
+% trennbar zu machen, reicht es daher aus, wenn man den |\lccode|
+% dieser Letter auf einen Wert ungleich Null setzt. F"ur ein |\ss|
+% aus anderen Schriften mu"s dies in der entsprechenden Makrodatei
+% getan werden, in dem die Schrift und der Befehl~|\ss| redefiniert
+% wird.
+% \begin{macrocode}
+\lccode`\^^Y=`\^^Y
+% \end{macrocode}
+%
+% \subsection{Anf"uhrungszeichen}
+%
+% Die deutschen Anf"uhrungszeichen werden f"ur Schriften, die keine
+% geeigneten Lettern besitzen, durch Box-Manipulationen aus den im
+% englischsprachigen Raum gebr"auchlichen Anf"uhrungszeichen erzeugt.
+%
+% |\set@low@box| verschiebt das Zeichen im Argument, normalerweise ``
+% bzw.\ '', auf die H"ohe des Kommas in dieser Schrift. Achtung: Da
+% das Makro den Inhalt der Box 0, 2 und ein L"angenregister "andert,
+% sollte dieses Makro nur innerhalb einer Gruppe aufgerufen werden.
+% \begin{macrocode}
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
+ \setbox\z@\hbox{\dimen@\ht\z@ \advance\dimen@ -\ht\tw@
+ \lower\dimen@\box\z@}%
+ \ht\z@\ht\tw@ \dp\z@\dp\tw@}
+% \end{macrocode}
+%
+% Normalerweise wird der aktuelle |\spacefactor| nicht durch
+% An"-f"uhrungs"-zeichen ge"-"andert, so da"s bei aktiviertem
+% |\nonfrenchspacing| nach einem Satzzeichen und direkt nachfolgenden
+% Anf"uhrungszeichen ein gr"o"serer Wortzwischenraum gelassen wird.
+% Da \TeX\ den |\spacefactor| nach einem Box-Befehl auf~1000 setzt,
+% mu"s man diesen Wert von Hand vorher retten und danach wieder
+% setzen, um dieses Verhalten nicht zu "andern.
+% \begin{macrocode}
+\def\save@sf@q#1{{\ifhmode
+ \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode #1\@SF}}
+% \end{macrocode}
+%
+% \subsection{Umlaute}
+%
+% Wird ein Umlaut mit Hilfe des |\accent|-Primitivs erzeugt, werden
+% bei den meisten Schriften die Umlautpunkte zu hoch gesetzt. Die
+% Umlautpunkte entsprechen dadurch eher einem Trema. Das Makro
+% |\umlaut| ersetzt das \TeX-Primitiv, um Umlaute mit etwas tieferen
+% Umlautpunkten zu erzeugen. Die Funktionsweise beruht auf dem
+% folgenden kleinen Trick: Das |\accent|-Primitiv hat die Eigenschaft,
+% die aktuelle \textit{x-height} und die Gr"o"se des Buchstabens zu
+% verwenden, um die vertikale Positionierung und in Abh"angigkeit
+% des \textit{slant} der Schrift die horizontale Verschiebung der
+% Punkte zu bestimmen. Um die Punkte etwas tiefer zu setzen, kann
+% nun entweder die H"ohe des Buchstabens verkleinert oder die
+% \textit{x-height} der Schrift tempor"ar vergr"o"sert werden. Da das
+% |\accent|-Primitiv keine Box als Argument erlaubt, wird der zweite
+% Weg gew"-"ahlt. Dabei mu"s beachtet werden, da"s "Anderungen der
+% |\fontdimen| immer global ausgef"uhrt werden, so da"s man den
+% urspr"unglichen Wert retten und danach wieder explizit
+% zur"uckschreiben mu"s!
+% \changes{2.5c}{95/01/24}{Abfrage auf L"angenregister \cs{grmnU@D}
+% hatte wegen eines At-Zeichens zuviel auf \cs{grmn@U@D} getestet.}
+% \begin{macrocode}
+\expandafter\ifx\csname grmnU@D\endcsname\relax
+ \csname newdimen\endcsname\grmnU@D
+\fi
+\def\newumlaut#1{{\grmnU@D 1ex%
+ {\setbox\z@\hbox{\char127}\dimen@-.45ex\advance\dimen@\ht\z@
+ \ifdim 1ex<\dimen@ \fontdimen5\font\dimen@ \fi}%
+ \accent127\fontdimen5\font\grmnU@D #1}\allowhyphens}
+% \end{macrocode}
+%
+% F"ur Tremata wird das urspr"ungliche |\accent|-Primitive verwendet.
+% Da die Style-Option das |\"|-Makro "andert, mu"s hier die originale
+% Definition selbst verwendet werden, wobei durch das |\allowhyphens|
+% nach dem Akzentprimitiv die Trennung im Rest des Wortes wieder
+% erlaubt ist. F"ur \LaTeXe\ kann durch die ge"anderten Interna das
+% |\"|-Makro direkt verwendet werden, wobei auch hier ein
+% |\allowhyphens| die Trennung im nachfolgenden Wortteil wieder
+% erlaubt.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def\highumlaut#1{{\accent127 #1}\allowhyphens}
+\else
+ \def\highumlaut#1{\"{#1}\allowhyphens}
+\fi
+% \end{macrocode}
+%
+% \subsection{Aktivierter Double\-quote}
+%
+% Die Style-Option "`german"' verwendet ein aktiviertes
+% Doublequote-Zeichen. Mit den Makros |\mdqon| und |\mdqoff| werden
+% hierzu Befehle zum Hin- und Herschalten definiert.
+% \begin{macrocode}
+\def\mdqon{\catcode`\"\active}
+\def\mdqoff{\catcode`\"12\relax}
+% \end{macrocode}
+%
+% Der Mechanismus der die Double\-quote-Eingabe\-notation realisiert,
+% verwendet folgende weitere symbolische Namen f"ur Makros und
+% spezielle Zeichen.
+% \changes{2.5d}{97/04/12}{"Uberbleibsel \cs{@UMLAUT}-Definition
+% als \cs{\protect\dq} aus Vor-NFSS2-Zeiten entfernt.}
+% \changes{2.5d}{97/04/13}{\cs{@SS} in \cs{@MATHss} umbenannt.}
+% \changes{2.5d}{97/05/01}{In \cs{@MATHss} ein eigentlich
+% "uberfl"ussiges \cs{mathord} eingef"ugt, das aber daf"ur sorgt,
+% da"s Leerzeichen danach nicht ignoriert werden.}
+% \begin{macrocode}
+\begingroup \mdqoff
+\def\x{\endgroup
+ \def\@MATHUMLAUT{\ddot}% = \mathaccent"707F
+ \def\@MATHss{\mathord{\mathchar"7019}}% TODO: correct?
+ \def\dq{"}}% TODO: or \textquotedbl?
+\x
+% \end{macrocode}
+%
+% Da das Zeichen aktiviert wird, mu"s es f"ur bestimmte Kontexte
+% explizit wieder deaktiviert werden. Plain-\TeX\ und \LaTeX\
+% verwenden f"ur Umgebungen, wie \texttt{verbatim}, die Befehle
+% |\dospecials| und |\@sanitize|, die Listen mit diesen speziellen
+% Zeichen darstellen. Der Double\-quote wird an diese Listen
+% angeh"angt.
+% \begin{macrocode}
+\begingroup
+ \def\do{\noexpand\do\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\dospecials{\dospecials\do\"}}%
+\x
+% \end{macrocode}
+% |\@sanitize| ist nur f"ur \LaTeX\ definiert, so da"s dessen
+% Existenz explizit abgefragt wird.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \begingroup
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\@sanitize{\@sanitize\@makeother\"}}%
+ \x
+\fi
+% \end{macrocode}
+%
+% \subsection{Kompatibilit"at mit "alteren Versionen}
+%
+% "Altere Versionen der Style-Option "`german"' definieren die
+% Befehle |\3| und |\ck|, die nicht mehr verwendet werden sollten.
+% Damit alte Dokumente mit diesen Kommandos nicht ge"andert werden
+% m"ussen, existieren diese Befehle auch noch f"ur Version~2.x.
+% In "`ngerman"' wird |\ck| so definiert, da"s ein "`ck"' mit Trennstelle
+% davor erzeugt wird; au"erdem wird eine Warnung ausgegeben.
+% \changes{2.5e (beta 1)}{98/05/04}{ge"anderte Definition von \cs{ck}
+% in "`ngerman"'}
+% \begin{macrocode}
+\let\grmn@original@three=\3 % \3 may be defined or undefined.
+%<*old>
+\def\ck{\penalty\@M\discretionary{k-}{}{c}k\allowhyphens}
+%</old>
+%<*new>
+\def\ck{%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\string\ck}{ck}%
+ \fi
+ \penalty\@M\-\allowhyphens ck}
+%</new>
+% \end{macrocode}
+%
+%
+% \section{Anf"uhrungszeichen}
+%
+% Die Makros |\glqq|, |\grqq|, |\glq|, |\grq|, |\flqq|, |\frqq|,
+% |\flq| und |\frq| f"ur die Anf"uhrungzeichen k"onnen mit NFSS
+% Version~2 (also mit \LaTeXe) abh"angig von der Kodierung der
+% Schrift definiert werden.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+% \end{macrocode}
+%
+% \subsection{\ldots~ohne NFSS Version~2}
+%
+% Ohne NFSS Version~2 werden die Makros aus den "`alten"' Versionen
+% dieser Style-Option verwendet. Da diese Makros auf alle Zeichen
+% "uber symbolische Befehle oder Ligaturen zugreifen, sollten die
+% Ergebnisse f"ur die meisten Schriften korrekt sein, jedoch wird
+% wegen der nicht expandierbaren Tokens in den Makros kein Kerning
+% zwischen dem Anf"uhrungszeichen und umgebenden Text durchgef"uhrt
+% (und keine Ligaturen gebildet, auch wenn diese in bisher keiner
+% mir bekannten und f"ur \TeX{} verf"ugbaren Schrift vorhanden sind).
+%
+% Zuerst einmal die Makros f"ur die Anf"uhrungszeichen "`\ldots"' und
+% \glq\ldots\grq. Die Namen |\@glqq|, |\@grqq|, etc.\ der zu
+% sch"utzenden internen Makros aus "alteren Version des German-Style
+% werden eigentlich nicht mehr ben"otigt, werden hier aber zur
+% Kompatibilit"at dennoch definiert.
+% \changes{2.5d}{97/04/13}{Verwende Trick von \LaTeXe{} mit
+% dem Leerzeichen im Namen des zu sch"utzenden Makros.}
+% \begin{macrocode}
+\expandafter\def\csname glqq \endcsname{%
+ \save@sf@q{\set@low@box{''\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glqq{\noexpand\protect
+ \expandafter\noexpand\csname glqq \endcsname}
+\let\@glqq=\glqq
+\expandafter\def\csname grqq \endcsname{%
+ \save@sf@q{\kern-.07em``\kern.07em}}% ('')
+\edef\grqq{\noexpand\protect
+ \expandafter\noexpand\csname grqq \endcsname}
+\let\@grqq=\grqq
+\expandafter\def\csname glq \endcsname{%
+ \save@sf@q{\set@low@box{'\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glq{\noexpand\protect
+ \expandafter\noexpand\csname glq \endcsname}
+\let\@glq=\glq
+\expandafter\def\csname grq\endcsname{%
+ \save@sf@q{\kern-.0125em`\kern.07em}}
+\edef\grq{\noexpand\protect
+ \expandafter\noexpand\csname grq \endcsname}
+\let\@grq=\grq
+% \end{macrocode}
+% Danach folgen die Definitionen f"ur die franz"osische Form der
+% Anf"uhrungszeichen "<\ldots"> und {\flq}\ldots{\frq}. Da die
+% Definition auch f"ur Plain-\TeX\ verwendbar sein soll, k"onnte man
+% das Aussehen durch eine etwas andere Definition noch verbessern.
+% Auch hier werden die Namen der zu sch"utzenden internen Makros aus
+% "alteren Version obwohl nicht notwendig zur Kompatibilit"at
+% definiert.
+% \changes{2.5c}{96/02/26}{Im Code f"ur die franz"osischen
+% Anf"uhrungszeichen \cs{m@th} eingef"ugt.}
+% \changes{2.5c}{96/04/28}{Die Boxen f"ur \cs{flqq}, \cs{frqq},
+% \cs{flq} und \cs{frq} werden mit \cs{raise.2ex} etwas zu tief
+% gesetzt, deshalb wird jetzt \cs{raise.27ex} aus
+% \texttt{french.sty} verwendet.}
+% \changes{2.5d}{97/04/13}{Verwende Trick von \LaTeXe{} mit
+% dem Leerzeichen im Namen des zu sch"utzenden Makros.}
+% \changes{2.5d}{97/05/01}{In \cs{flqq} und \cs{frqq} um \cs{ll}
+% bzw.\ \cs{gg} ein \cs{mathrel} eingef"ugt (klammern oder ein
+% ein leeres Klammerpaar danach w"urde Abst"ande "andern).
+% Damit kann das leere Klammerpaar in dern entsprechenden
+% Doublequote-Notation f"ur die franz"osischen Anf"uhrungszeichen
+% entfernt werden.}
+% \begin{macrocode}
+\expandafter\def\csname flqq \endcsname{%
+ \relax\ifmmode \mathrel{\ll}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\edef\flqq{\noexpand\protect
+ \expandafter\noexpand\csname flqq \endcsname}
+\let\@flqq=\flqq
+\expandafter\def\csname frqq \endcsname{%
+ \relax\ifmmode \mathrel{\gg}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+\edef\frqq{\noexpand\protect
+ \expandafter\noexpand\csname frqq \endcsname}
+\let\@frqq=\frqq
+\expandafter\def\csname flq \endcsname{%
+ \relax\ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\edef\flq{\noexpand\protect
+ \expandafter\noexpand\csname flq \endcsname}
+\let\@flq=\flq
+\expandafter\def\csname frq \endcsname{%
+ \relax\ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+\edef\frq{\noexpand\protect
+ \expandafter\noexpand\csname frq \endcsname}
+\let\@frq=\frq
+% \end{macrocode}
+% Leider verhindert das |\nobreak| in |\allowhyphens| eine Trennung
+% an einem Wortzwischenraum, der nach dem Anf"uhrungszeichen folgen
+% kann. Da die obige Definition sowohl f"ur ">\ldots"< als auch f"ur
+% "<\ldots"> verwendbar sein mu"s, kann man ohne weitere Tricks
+% nichts an dieser Einschr"ankung "andern.
+%
+%
+% Die nachfolgenden Abschnitte beschreiben die notwendigen
+% Definitionen f"ur NFSS~2.
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \subsection{\ldots~mit NFSS Version~2}
+%
+% Das Makro |\glqq| entspricht dem in neueren \LaTeXe-Releases
+% definiertem Symbol |\quotedblbase|. Die Definitionen dieses
+% Symbols werden auch f"ur die \texttt{OT1}-kodierten Schriften
+% erweitert, so da"s man eine relativ einfache Definition erh"alt.
+% \begin{macrocode}
+\DeclareRobustCommand{\glqq}{%
+ \ifmmode\hbox{\quotedblbase}\else\quotedblbase\fi}
+\ProvideTextCommandDefault{\quotedblbase}{%
+ \UseTextSymbol{OT1}\quotedblbase}
+\ProvideTextCommand{\quotedblbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquotedblright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+% \end{macrocode}
+%
+% Leider existiert f"ur |\grqq| kein entsprechendes Pendant, so da"s
+% man hier auf die "`alte"' Version zur"uckgreifen mu"s. Jedoch wird
+% f"ur \texttt{T1}-kodierte Schriften keine \cs{kern}-Anweisungen
+% eingef"ugt, da diese insbesondere bei den EC-Fonts und dessen
+% Testversionen ab DC-Fonts Version~1.2 das Anf"uhrungszeichen zu
+% weit nach links plazieren und dieses dadurch den davorstehenden
+% Letter "uber"-schreiben k"onnte.
+% \changes{2.5c}{96/02/26}{F"ur \texttt{T1}-kodierte Schriften,
+% insbesondere den DC-Fonts~v1.2 d"urfen bei \cs{grqq} keine
+% expliziten \cs{kern} eingef"ugt werden. Deshalb separate
+% Deklarationen f"ur T1- und OT1-kodierte Schriften.}
+% \begin{macrocode}
+\ProvideTextCommand{\grqq}{T1}{\textquotedblleft}
+\ProvideTextCommand{\grqq}{OT1}{%
+ \save@sf@q{\kern-.07em%
+ \ifmmode\hbox{\textquotedblleft}\else\textquotedblleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grqq}{\UseTextSymbol{OT1}\grqq}
+% \end{macrocode}
+% Entsprechend werden die Symbole |\glq| und |\grq| definiert\,\ldots
+% \begin{macrocode}
+\DeclareRobustCommand{\glq}{%
+ \ifmmode\hbox{\quotesinglbase}\else\quotesinglbase\fi}
+\ProvideTextCommandDefault{\quotesinglbase}{%
+ \UseTextSymbol{OT1}\quotesinglbase}
+\ProvideTextCommand{\quotesinglbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquoteright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+% \end{macrocode}
+% \changes{2.5c}{96/04/27}{F"ur \texttt{T1}-kodierte Schriften
+% bin ich mir momentan nicht sicher, ob f"ur \cs{grq} explizite
+% \cs{kern} eingef"ugt werden sollten; die DC-Fonts~v1.2 haben
+% Kerning f"ur ein als schlie"sendes Quote verwendetes Backquote,
+% deshalb kein \cs{kern}.}
+% \begin{macrocode}
+\ProvideTextCommand{\grq}{T1}{\textquoteleft}
+\ProvideTextCommand{\grq}{OT1}{%
+ \save@sf@q{\kern-.0125em%
+ \ifmmode\hbox{\textquoteleft}\else\textquoteleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grq}{\UseTextSymbol{OT1}\grq}
+% \end{macrocode}
+% \ldots\,und auch die franz"osische Form der Anf"uhrungszeichen.
+% \changes{2.5c}{96/02/26}{Im Code f"ur die franz"osischen
+% Anf"uhrungszeichen \cs{m@th} eingef"ugt.}
+% \changes{2.5c}{96/04/28}{Die Boxen f"ur \cs{flqq}, \cs{frqq},
+% \cs{flq} und \cs{frq} werden mit \cs{raise.2ex} etwas zu tief
+% gesetzt, deshalb wird jetzt \cs{raise.27ex} aus
+% \texttt{french.sty} verwendet.}
+% \changes{2.5d}{97/05/01}{\cs{mathrel} bzw.\ \cs{mathbin} in
+% \cs{flqq}, \cs{frqq}, \cs{flq} und \cs{frq} eingef"ugt.}
+% \begin{macrocode}
+\DeclareRobustCommand{\flqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotleft}}\else\guillemotleft\fi}
+\ProvideTextCommandDefault{\guillemotleft}{%
+ \UseTextSymbol{OT1}\guillemotleft}
+\ProvideTextCommand{\guillemotleft}{OT1}{%
+ \ifmmode \ll \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\DeclareRobustCommand{\frqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotright}}\else\guillemotright\fi}
+\ProvideTextCommandDefault{\guillemotright}{%
+ \UseTextSymbol{OT1}\guillemotright}
+\ProvideTextCommand{\guillemotright}{OT1}{%
+ \ifmmode \gg \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareRobustCommand{\flq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglleft}}\else\guilsinglleft\fi}
+\ProvideTextCommandDefault{\guilsinglleft}{%
+ \UseTextSymbol{OT1}\guilsinglleft}
+\ProvideTextCommand{\guilsinglleft}{OT1}{%
+ \ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\DeclareRobustCommand{\frq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglright}}\else\guilsinglright\fi}
+\ProvideTextCommandDefault{\guilsinglright}{%
+ \UseTextSymbol{OT1}\guilsinglright}
+\ProvideTextCommand{\guilsinglright}{OT1}{%
+ \ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+% \end{macrocode}
+%
+% Damit w"aren die Makros f"ur die Anf"uhrungszeichen definiert
+% und die Unterscheidung mit/ohne NFSS Version~2 wird f"ur's erste
+% nicht mehr ben"otigt.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%
+% \section{Anpassung der Umlautmakros}
+%
+% Wie schon bei der Definition des Befehls |\umlaut| erw"ahnt,
+% mu"s das Akzentmakro f"ur die Umlaute angepa"st werden.
+%
+% Um sp"ater zwischen der Original- und der neuen Definition
+% umschalten zu k"onnen, werden die internen Umschaltbefehle
+% |\umlauthigh| und |\umlautlow| definiert. Da NFSS Version~2
+% schon wieder eine Sonderrolle -- im positiven Sinne -- spielen
+% mu"s, ist wieder eine Unterscheidung der Versionen n"otig.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+% \end{macrocode}
+%
+% F"ur Versionen ohne NFSS Version~2 wird relativ einfach zwischen
+% den beiden Versionen gewechselt. Wenn man Schriften mit ge"anderten
+% Kodierungen verwenden will, mu"s dieses Makro ebenso angepa"st
+% werden.
+% \begin{macrocode}
+\def\umlauthigh{\def\"##1{{\accent127 ##1}}}
+\def\umlautlow{\def\"{\protect\newumlaut}}
+% \end{macrocode}
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% F"ur NFSS Version~2 ist das ganze etwas komplizierter.
+% Da die Befehle |\DeclareText...| nicht mehr nach der Pr"aambel
+% verwendet werden d"urfen, wird der neue symbolische Name
+% |\grmn@OTumlaut| f"ur das Umlautmakro f"ur Schriften in
+% Kodierung~\texttt{OT1} definiert. Beim Umschalten wird dann die
+% Definition dieses Makro ver"andert.
+% \begin{macrocode}
+\def\umlauthigh{\def\grmn@OTumlaut##1{{\accent 127 ##1}}}
+\def\umlautlow{\def\grmn@OTumlaut{\protect\newumlaut}}
+\umlauthigh
+% \end{macrocode}
+% F"ur Schriften in Kodierung \texttt{OT1} und~\texttt{T1} werden hier
+% Standarddefinitionen angegeben, in der das neue Makro verwendet
+% wird.
+% \begin{macrocode}
+\DeclareTextAccent{\"}{T1}{4}
+\DeclareTextAccent{\"}{OT1}{127}
+\DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+\DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+\DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+\DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+\DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+\DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+\DeclareTextComposite{\"}{T1}{a}{228}
+% \end{macrocode}
+%
+% Da diese Definitionen in einer "alteren Patch-Datei am Beginn eines
+% Dokuments ge"andert werden, werden diese "Anderungen einfach
+% nochmals mit den oben angegebenen Anweisungen "uberschrieben,
+% obwohl dies eigentlich nur f"ur diese veraltete \LaTeXe-Version
+% mit dieser Patch-Datei notwendig w"are. Dies sollte in einer
+% der n"achsten Version des German-Style entfernt werden!
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname AtBeginDocument\endcsname\relax \else
+ \AtBeginDocument{%
+ \DeclareTextAccent{\"}{T1}{4}% % from `ltpatch.tex'
+ \DeclareTextAccent{\"}{OT1}{127}% % from `ltpatch.tex'
+ % \DeclareTextCommand{\"}{OT1}{\newumlaut}% from `ltpatch.tex'
+ % % has to be removed
+ \DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+ \DeclareTextComposite{\"}{T1}{a}{228}% % from `ltpatch.tex'
+ }
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%
+% \section{Mechanismus f"ur Doublequote-Notation}
+%
+% Die Eingabenotation |"x| f"ur Umlaute, spezielle Trennungen
+% u.\,a., die die Style-Option "`german"' anbietet, wird durch den
+% \textit{active character} Double\-quote realisiert. Dieses aktive
+% Zeichen liest das folgende Token als sein Argument und entscheidet
+% abh"angig von diesem Argument, welche Kommandos zur Realisierung
+% verwendet werden sollen.
+%
+% Nach dieser Beschreibung scheint die Makrodefinition, die diesem
+% aktiven Zeichen zugewiesen wird, relativ einfach zu realisieren zu
+% sein:
+%\begin{verbatim}
+%\catcode`\"=\active
+%\def "#1{\ifx#1a\newumlaut{a}\else ...etc.etc... \fi}
+%\end{verbatim}
+% Leider gibt es bei dieser einfachen Implementierung einige
+% Fehlerm"oglichkeiten: Zum einen "uberliest \TeX\ vor jedem nicht
+% begrenztem Argument eines Makros alle Leerzeichen, so da"s die
+% beiden Eingaben |" a| und~|"a| nicht unterscheidbar sind.
+% Zum zweiten erzeugen die Gruppenklammern |{| und~|}|
+% als Argument Fehler, da bei einer "offnenden Klammer eine komplette
+% Liste gelesen wird und eine schlie"sende Klammer zu einem Fehler
+% f"uhrt.
+%
+% Will man diese Probleme mit der etwas "`schlaueren"' L"osung
+%\begin{verbatim}
+%\catcode`\"=\active
+%\def "{\afterassignment\do@activedq \let\next= }
+%\def\do@activedq{\ifx\next\bgroup \def\next{\dq\bgroup}\else
+% \ifx\next\egroup \def\next{\dq\egroup}\else
+% \expandafter\ifx\space\next \def\next{\dq\space}\else
+% \ifx a\next \def\next{\newumlaut{a}}\else
+% ...etc.etc... \fi\fi\fi...\fi \next}
+%\end{verbatim}
+% vermeiden, handelt man sich ein anderes, schwerwiegenderes Problem
+% ein: In \TeX\ kann man ganzzahlige Konstanten auch in hexadezimaler
+% Notation eingeben. Dazu wird einfach der hexadezimalen Zahl ein
+% normales Double\-quote-Zeichen vorangestellt (Bsp.: |"FF| f"ur die
+% Konstante~255). Mit der "`schlaueren"' L"osung meldet \TeX\ jedoch
+% beim Einlesen aller hexadezimalen Konstanten bei aktiviertem
+% Double\-quote eine fehlende Zahl. Der Grund ist einfach:
+% Primitive, wie |\afterassignment| oder |\futurelet|, sind
+% nicht expandierbar und nichtexpandierbare Token beenden das
+% Scan\-nen einer Zahl.
+%
+% Um diesen schwerwiegenden Nachteil der "`schlaueren"' L"osung
+% zu vermeiden (die "ahnlich in Version~2.3c/d verwendet wurde, wobei
+% schon in den Versionen 2.2--2.3b ein |\protect| mit Bedeutung
+% |\relax| diesen Fehler erzeugt hat), mu"s man wohl oder "ubel die
+% erste L"osung verwenden und deren Nachteile in Kauf nehmen.
+%
+% Auf einen anderen Punkt mu"s auch geachtet werden: Damit \TeX\ f"ur
+% die resultierenden Umlaute und An"-f"uhrungs"-zeichen ein Kerning
+% durch"-f"uhrt und Ligaturen bildet, d"urfen vor und nach diesen
+% Zeichen keine nichtexpandierbaren Token, wie Gruppenklammern,
+% |\relax|, etc., in der Eingabe "`stehenbleiben"'. Dies mu"s
+% insbesondere auch f"ur die F"alle gelten, in denen der
+% Double\-quote eine hexadezimale Konstante einleitet!
+%
+%
+% \subsection{Fehler bei undefinierten
+% \protect\texttt{\char34x}-Kombinationen}
+%
+% F"ur Argumente des Double\-quote-Makros, f"ur die keine Bedeutung
+% definiert wurde, sollte eine Fehlermeldung an den Benutzer
+% ausgegeben werden. Dies verhindert zum einen, da"s einfache
+% Tippfehler "uber"-sehen werden, zum anderen gibt es in sp"ateren
+% Versionen, in denen f"ur weitere Argumente Bedeutungen definiert
+% werden, weniger Fehler in alten Dokumenten.
+%
+% Mit dem (undokumentierten) Befehl |\dqwarninglevel| kann festgelegt
+% werden, bei welchen Befehlen Warnungen ausgegeben werden:
+% 0~bedeutet momentan keine Warnung, 1~nur f"ur undefinierte
+% Kombinationen (Default) und 2~auch Warnungen f"ur die Befehle f"ur
+% drei gleiche Konsonanten.
+%
+% Es bietet sich an, den Level~2 daf"ur zu verwenden, vor
+% durch die Rechtschreibreform obsolet gewordenen Befehlen zu
+% warnen, n"amlich Dreier"=Kombinationen und zus"atzlich die
+% Befehle zur |ck|"~Trennung: |"ck| und |\ck|.
+% \changes{2.5e (beta 1)}{98/05/04}{Level~2 f"ur neue Rechtschreibung.}
+% \begin{macrocode}
+\def\dqwarninglevel#1{\chardef\grmn@dqwarninglevel=#1\relax}
+%<old> \dqwarninglevel{1}
+%<new> \dqwarninglevel{2}
+% \end{macrocode}
+%
+% Neuere \LaTeX-Versionen verwenden den in \TeX~3 vorhandenen
+% Parameter |\inputlineno|, um mit jeder Fehlermeldung auch die
+% Zeilennummer auszugeben. Da dies allgemein sinnvoll ist, wird das
+% dazu benutzte \LaTeX-Makro definiert, falls es bei Verwendung von
+% Plain-\TeX\ oder einer alten \LaTeX-Version noch nicht definiert
+% ist und \TeX~3 verwendet wird (|\inputlineno| mu"s existieren
+% und einen positiven Wert haben).
+% \changes{2.5d}{97/05/01}{\cs{@empty} ist in Plain-\TeX{} nicht
+% definiert, daher \cs{on@line} besser direkt definieren.}
+% \begin{macrocode}
+\expandafter\ifx\csname on@line\endcsname\relax
+ \ifx\inputlineno\undefined \def\on@line{}%
+ \else
+ \ifnum\inputlineno<\z@ \def\on@line{}%
+ \else \def\on@line{ on input line \the\inputlineno}%
+\fi\fi\fi
+% \end{macrocode}
+%
+% F"ur die Ausgabe von Warnungen und Fehlermeldungen werden
+% weitere Makros definiert.
+% \changes{2.5e (beta 1)}{98/05/04}{Neue Warnbefehle nur f"ur "`ngerman"'.}
+% \begin{macrocode}
+\def\grmn@dq@error#1{%
+ \errhelp{Use `` for a simple double quote character.}%
+%<old> \errmessage{german: The command \dq\string#1 is undefined}}
+%<new> \errmessage{ngerman: The command \dq\string#1 is undefined}}
+\def\grmn@dq@warning#1{%
+ \immediate\write\sixt@@n
+%<old> {german: \dq\string#1 is possibly wrong\on@line.}}
+%<new> {ngerman: \dq\string#1 is possibly wrong\on@line.}}
+% \end{macrocode}
+% Der Befehl |\grmn@dq@warning@obsolete| l"ot den
+% |\grmn@dq@warning|"~Befehl nur in den F"allen ab, bei denen
+% der "`Warning"=Level"' auf zwei steht, also bei denen der Anwender
+% auf den veralteten Befehl hingewiesen werden soll.
+% Da der erste Parameter sowohl ein Befehlsname |\ck| als auch eine
+% |"|"~Kombination sein kann, mu"s der Aufrufer daf"ur Sorge tragen,
+% da"s die Parameter richtig geschrieben werden k"onnen. Als
+% Beispiel sollte |"f| als |\dq f| und |\ck| als |\string\ck|
+% "ubergeben werden).
+% \begin{macrocode}
+%<*new>
+\def\grmn@dq@warning@obsolete#1#2{%
+ \immediate\write\sixt@@n
+ {ngerman: #1 is now obsolete, please use #2 instead\on@line.}}
+%</new>
+% \end{macrocode}
+% F"ur die Dreier"=Kombinationen sind die |"|"~Befehle
+% "uberfl"ussig geworden. Das Makro, abgeleitet aus
+% |\grmn@dqdisc|, gibt daher eine Warnung aus und
+% setzt die Buchstaben. Da drei gleiche Buchstaben nach dem
+% zweiten getrennt werden d"urfen, wird die entsprechende
+% Trennhilfe eingef"ugt (|"-|).
+% \begin{macrocode}
+%<*new>
+\def\grmn@dqobsolete@three#1{#1#1%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\dq#1#1}{#1#1#1}%
+ \fi
+ \penalty\@M\-\allowhyphens}
+%</new>
+% \end{macrocode}
+% Dasselbe wird nun f"ur die Kombination |"ck| gemacht,
+% wobei hier die Trennhilfe vor den Buchstaben |ck| wie
+% im |\ck|"~Befehl gesetzt wird.
+% \begin{macrocode}
+%<*new>
+\def\grmn@dqobsolete@ck#1#2{%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\dq#1#2}{#1#2}%
+ \fi
+ \penalty\@M\-\allowhyphens#1}
+%</new>
+% \end{macrocode}
+%
+%
+% \subsection{Definition der Double\-quote-Befehle}
+%
+% Jeder definierte Double\-quote-Befehl wird in einem eigenen Makro
+% abgelegt, in dessen Name das Argument, also das einzelne Zeichen
+% nach dem Double\-quote, als Schl"ussel verwendet wird.
+%
+% Das Makro |\grmn@dq@macro| hat zwei Argumente und erzeugt unter
+% Verwendung des zweiten Arguments diesen Makronamen. Das erste
+% Argument, ein einzelnes Token, wird vor diesen Makronamen gesetzt.
+% Diese zuerst etwas komisch anmutende Kombination von Argumenten
+% verhindert, da"s bei der Verwendung dieses Makros Unmengen von
+% \cs{expandafter}-Anweisungen notwendig werden. Der Befehl
+% \cs{string} verhindert, da"s aktive Zeichen als Argumente
+% (z.\,B.\ eine Tilde) Fehler erzeugen.
+% \begin{macrocode}
+\def\grmn@dq@macro#1#2{%
+ \expandafter#1\csname @grmn@@\string #2dq\endcsname}
+% \end{macrocode}
+%
+% Neue Befehlskombinationen k"onnen mit dem Befehl |\def@dqmacro|
+% definiert werden. Argument~1 ist dabei das Zeichen im Befehl,
+% Argument 2 und~3 die Expansionen, die jeweils f"ur Text- und
+% Mathematik"-modus verwendet werden sollen.
+% \begin{macrocode}
+\def\def@dqmacro#1#2#3{%
+ \grmn@dqredefcheck{#1}%
+ \grmn@dq@macro\def{#1}{{#2}{#3}}}
+% \end{macrocode}
+%
+% Ein Synonym f"ur einen schon zuvor definierten Befehl kann man mit
+% |\let@dqmacro| definieren.
+% \begin{macrocode}
+\def\let@dqmacro#1#2{\begingroup
+ \grmn@dqredefcheck{#1}%
+ \edef\x{\endgroup \let
+ \grmn@dq@macro\noexpand{#1}\grmn@dq@macro\noexpand{#2}}%
+ \x}
+% \end{macrocode}
+%
+% Wird ein zuvor definierter Befehl erneut definiert oder
+% umdefiniert, sollte dies zumindest in der Protokolldatei erscheinen,
+% um gemeldete Fehler, die darauf zur"uckzuf"uhren sind, einfacher
+% erkennen zu k"onnen. Hier wird f"ur das Makro |\grmn@dqredefcheck|,
+% das diese Zeile in die Protokolldatei schreibt, ein Dummy definiert,
+% die sp"ater durch die end"-g"ultige Makrodefinition ersetzt wird.
+% \begin{macrocode}
+\def\grmn@dqredefcheck#1{}
+% \end{macrocode}
+%
+%
+% \subsection{Makros f"ur den aktiven Double\-quote}
+%
+% Das Makro |\@active@dq| wird sp"ater an das aktive
+% Double\-quote-Zeichen gebunden. Dieses liest das n"achste Zeichen
+% (mit den zuvor schon genannten Einschr"ankungen), pr"uft ab, ob
+% hier"-f"ur eine Bedeutung definiert wurde und gibt in diesem Falle
+% einen Fehler aus.
+% \begin{macrocode}
+\def\@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\relax
+ \ifnum\grmn@dqwarninglevel>\z@ \grmn@dq@error{#1}\fi
+ \expandafter\grmn@@normal@dq
+ \else
+ \expandafter\grmn@@active@dq
+ \fi {#1}}
+% \end{macrocode}
+%
+% Leitet der Double\-quote eine hexadezimale Konstante ein, folgt
+% also eine Ziffer oder ein Gro"sbuchstabe im Bereich~\mbox{A--F}, so
+% soll "`nichts"' unternommen werden. Um diese speziellen Befehle zu
+% erkennen, werden den zugeordneten \emph{control sequences} sp"ater
+% die Bedeutung eines |\noexpand| zugeordnet.
+% \changes{2.5b}{95/01/20}{Einziger Bugfix f"ur v2.5a: In
+% \cs{grmn@@active@dq} wurde \cs{grmn@@normal@dq} (expandiert zu
+% zwei einfachen Quotes) statt \cs{grmn@normal@dq} (expandiert zu
+% einem Double\-quote) aufgerufen, so da"s es zu Fehlern bei
+% Hexzahlen kam.}
+% \begin{macrocode}
+\def\grmn@@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\noexpand
+ \expandafter\grmn@normal@dq
+ \else
+ \expandafter\grmn@@@active@dq
+ \fi {#1}}
+% \end{macrocode}
+%
+% F"ur die F"alle, in denen Anf"uhrungszeichen erzeugt werden sollen,
+% werden zwei weitere Befehle aufgerufen: |\grmn@normal@dq| wird f"ur
+% die hexadezimalen Konstanten verwendet, in denen ein Double\-quote
+% ben"otigt wird. |\grmn@@normal@dq| wird dagegen im Fehlerfalle
+% verwendet und gibt zwei einzelne Quotes aus, um Endlosschleifen bei
+% der Expansion zu vermeiden.
+% \begin{macrocode}
+\def\grmn@@normal@dq#1{``#1}
+\def\grmn@normal@dq#1{\dq #1}
+% \end{macrocode}
+%
+%
+% \subsection{Sch"utzen von zerbrechlichen Bedeutungen}
+%
+% Da die Double\-quote-Befehle auch zu zerbrechlichen Bedeutungen
+% expandieren k"onnen, mu"s ein |\protect| o.\,"a.\ so
+% eingef"ugt werden, da"s einerseits keine nicht expandierbaren Token
+% eingef"ugt werden. Andererseits kann, wie im Falle einer Tilde,
+% auch das Argument selbst expandierbar sein und mu"s zum mehrfachem
+% Lesen und Schreiben entsprechend gesch"utzt werden. (Beispielsweise
+% wird der Inhalt von \LaTeX{}s \texttt{aux}-Datei wieder in die
+% \texttt{toc}-Datei geschrieben, bevor diese end"-g"ultig eingelesen
+% wird.)
+%
+% Aufgrund letzterem folgt jetzt ein Hack mit \textit{category codes},
+% um beim Schreiben auf eine Datei keine zus"atzlichen Zeichen
+% ein"-f"ugen zu m"ussen, wie dies noch in Version~2.4a gemacht
+% wurde.
+%
+% Im folgenden ben"otigt dieser Hack geschweifte Klammern mit
+% \textit{category code} "`other"'. Als tempor"arer Ersatz f"ur
+% die \TeX-Klammern werden die runden Klammern verwendet. Au"serdem
+% wird der in \LaTeXe\ verwendete Trick mit einem Leerzeichen im
+% Makronamen verwendet, um diese speziellen Klammern f"ur "`interne"'
+% Expansionen, wie beim Primitiv |\marks|, wieder korrekt
+% einlesen zu k"onnen.
+% \begin{macrocode}
+\begingroup
+ \catcode`\(=1\lccode`\(=`\{\catcode`\{=12
+ \catcode`\)=2\lccode`\)=`\}\catcode`\}=12
+ \catcode`\ =11\relax% <= do not delete this and the
+\lowercase(\endgroup% <=== following percent characters!
+% \end{macrocode}
+%
+% Zuerst wird das m"oglicherweise expandierbare Argument durch den
+% Befehl |\string| vor Expansion beim Schreiben auf eine Datei
+% oder Erzeugen eines Mark gesch"utzt. Ist das Argument leer, so
+% wird die nachfolgende geschweifte Klammer zu einer Klammer mit
+% \textit{category code} "`other"'. Hierin liegt der Grund, wieso
+% f"ur diese Definitionen die \textit{category codes} der
+% geschweiften Klammern ge"-"andert wurden.
+% \begin{macrocode}
+\def\grmn@@@active@dq#1(%
+\expandafter\grmn@@@@active@dq\expandafter{\string#1})%
+% \end{macrocode}
+%
+% Nachdem das Argument gesch"utzt wurde, wird f"ur die F"alle, in
+% denen |\protect| eine besondere Bedeutung hat, dieses
+% eingef"ugt. Hat das |\protect| "`nur"' die Bedeutung eines
+% |\relax| oder eines leeren Makros, so wird es nicht
+% eingef"ugt, um Kerning und Ligaturbildung nicht zu verhindern.
+%
+% Die Makros \verb*:\active@dq : und \verb*:\dq@prtct :, die ein
+% Leerzeichen im Namen haben, sind die "`internen"' Versionen des
+% aktiven Double\-quote-Makros und eines Makros, das das Argument
+% sch"utzt. Werden diese auf eine Datei geschrieben und wieder
+% eingelesen, so werden beim Lesen die entsprechenden Makros ohne
+% diese Leerzeichen am Ende des Namens expandiert.
+% \begin{macrocode}
+\def\grmn@@@@active@dq(%
+\ifx\protect\relax\else\ifx\protect\empty\else%
+\expandafter\expandafter\expandafter\protect%
+\fi\fi%
+\active@dq \dq@prtct )%
+% \end{macrocode}
+%
+% Zuerst zum einfacheren Makropaar \verb*:\dq@prtct : und
+% |\dq@prtct|, das das nachfolgende Argument beim wiederholten
+% Einlesen von und Schreiben auf eine Datei sch"utzen soll. Beim
+% Wiedereinlesen, bei dem das Makro |\dq@prtct| verwendet wird, sollen
+% alle Zeichen (normalerweise nur Leerzeichen, in seltenen F"allen
+% aber auch die Zeichen des Makros |\dq@prtct|) bis zur "offnenden
+% Klammer ignoriert werden. Anschlie"send soll dieses Argument wieder
+% gesch"utzt werden, wobei gleich noch ein |\dq@prtct| vorangestellt
+% wird, um das Argument bei einem erneuten Schreiben wiederum zu
+% sch"utzen.
+% \begin{macrocode}
+\def\dq@prtct#1#(\@dq@prtct)%
+\def\@dq@prtct#1(\string\dq@prtct{\string#1})%
+% \end{macrocode}
+% Das Makro \verb*:\dq@prtct : k"onnte auf den ersten Blick einfacher
+% definiert werden, da das Argument schon zuvor in
+% |\grmn@@@active@dq| gesch"utzt wurde. Jedoch kann der Fall
+% auftreten, da"s zuerst (mit |\protect|\(=\)|\relax|) expandiert und
+% dann erst auf eine Datei geschrieben wird. Da auch in diesen
+% F"allen zumindest die Zeichenkette |\dq@prtct| in diese Datei
+% geschrieben werden mu"s, wird dies hier einfach getan\ldots
+% \begin{macrocode}
+\def\dq@prtct #1{#2}(\string\dq@prtct{\string#2})%
+% \end{macrocode}
+%
+% Jetzt folgt noch das Makropaar \verb*:\active@dq : und
+% |\active@dq|. F"ur die interne Variante \verb*:\active@dq : dieses
+% Paars mu"s die zuvor eingef"ugte Zeichenkette |\dq@prtct| "uberlesen
+% und die geschweiften Klammern mit \textit{category code} "`other"'
+% durch "`richtige"' Klammern ersetzt werden.
+% \begin{macrocode}
+\def\active@dq #1{#2}(\grmn@active@@dq(#2))%
+% \end{macrocode}
+%
+% Da die ge"anderten \textit{category codes} nicht mehr ben"otigt
+% werden, wird das Argument des |\lowercase|-Befehl beendet und
+% die Gruppe mit diesen "Anderungen geschlossen.
+% \begin{macrocode}
+)%
+% \end{macrocode}
+%
+% Wird |\active@dq| von einer Datei eingelesen, m"ussen alle Token
+% bis zur "offnenden Klammer (z.\,B.\ die Zeichenkette |\dq@prtct|)
+% "uber"-lesen werden. Anschlie"send kann der Doublequote-Mechanismus
+% "`angeschmissen"' werden, als ob ein normales Double\-quote gelesen
+% worden w"are. Wir k"onnten auch |\grm@active@@dq| aufrufen, was
+% jedoch den Nachteil h"atte, da"s nicht erneut Tokens gesch"utzt
+% werden, falls dies notwendig sein m"u"ste.
+% \changes{2.5c}{96/04/21}{In \cs{active@dq}, das nur in einer
+% wiedereingelesen Datei auftauchen sollte, das urspr"ungliche
+% \cs{grmn@active@@dq} durch \cs{@active@dq} ersetzt, um
+% Protection-Mechanismus erneut zu durchlaufen.}
+% \begin{macrocode}
+\def\active@dq#1#{\@active@dq}%
+% \end{macrocode}
+%
+% Zum Schlu"s bleibt nur noch die Auswahl der f"ur diese
+% Double\-quote-Kombination abgelegte Definition abh"angig vom
+% momentanen Modus.
+% \begin{macrocode}
+\def\grmn@active@@dq#1{%
+ \csname grmn@dq\ifmmode second\else first\fi
+ \expandafter\expandafter\expandafter\expandafter
+ \grmn@dq@macro\endcsname{#1}}
+% \end{macrocode}
+% Die Makros |\grmn@dqfirst| und |\grmn@dqsecond|, die hier verwendet
+% werden, sind schon zuvor in Abschnitt~\ref{grmndqfirst} definiert
+% worden.
+%
+%
+% \subsection{Liste der Standard-Doublequote-Befehle}
+%
+% Bisher melden alle |"x|-Befehle einen Fehler, da noch kein
+% einziger Double\-quote-Befehl definiert wurde. Da zumindest die
+% Double\-quote-Kombinationen, die eine hexadezimale Konstante
+% darstellen k"onnten, "`durchgelassen"' werden sollten, werden diese
+% als erste definiert. Wie schon in den zuvor beschriebenen Makros
+% erl"autert, wird den zugeordneten \textit{control sequences} die
+% Bedeutung eines |\noexpand| zugeordnet, um diese spezielle
+% Bedeutung zu markieren.
+% \begin{macrocode}
+\grmn@dq@macro\let{0}=\noexpand
+\let@dqmacro{1}{0}\let@dqmacro{2}{0}\let@dqmacro{3}{0}
+\let@dqmacro{4}{0}\let@dqmacro{5}{0}\let@dqmacro{6}{0}
+\let@dqmacro{7}{0}\let@dqmacro{8}{0}\let@dqmacro{9}{0}
+\let@dqmacro{A}{0}\let@dqmacro{B}{0}\let@dqmacro{C}{0}
+\let@dqmacro{D}{0}\let@dqmacro{E}{0}\let@dqmacro{F}{0}
+% \end{macrocode}
+% Einige der gerade definierten Kombinationen werden sp"ater
+% redefiniert. Darunter fallen die folgenden Gro"sbuchstaben: A, C,
+% E und~F, denen dann die Bedeutungen Umlaut-A,
+% \mbox{CK/K-K}-Trennung, Trema-E und \mbox{FF/FF-F}-Trennung
+% zugewiesen wird. Deshalb kann es zu Problemen mit hexadezimalen
+% Konstanten im Bereich |"A0|--|"FF| kommen.
+%
+% In "alteren Versionen der Style-Option "`german"' konnte man mit
+% |"{}| ein normales Double\-quote erzeugen. Dies sollte aus
+% Kompatibilit"at zu "alteren Texten, die dies ausnutzen, auch
+% weiterhin m"oglich sein, auch wenn dies der Grund f"ur die zuvor
+% beschriebenen Tricks mit den "Anderungen der \textit{category
+% codes} ist.
+% \changes{2.5d}{97/05/01}{Leeres Klammerpaar nach \cs{dq} f"ur
+% \texttt{\protect\dq\symbol{`\{}\symbol{`\}}} entfernt.}
+% \changes{2.5d}{97/05/01}{Leeres Klammerpaar nach \cs{dq} f"ur
+% \texttt{\protect\dq\symbol{`\{}\symbol{`\}}} wieder eingef"ugt,
+% da es dadurch mehrfach gelesen und geschrieben werden kann.}
+% \begin{macrocode}
+\def@dqmacro{}{\dq{}}{\dq{}}
+% \end{macrocode}
+%
+% Die Definition der Kombinationen, die Umlaute erzeugen, ist
+% entsprechend einfach,
+% \changes{2.5d}{97/04/12}{"Uberbleibsel \cs{@UMLAUT} aus
+% Vor-NFSS2-Zeiten durch \cs{\protect\dq} ersetzt.}
+% \begin{macrocode}
+\def@dqmacro{a}{\"a}{\@MATHUMLAUT a}
+\def@dqmacro{o}{\"o}{\@MATHUMLAUT o}
+\def@dqmacro{u}{\"u}{\@MATHUMLAUT u}
+\def@dqmacro{A}{\"A}{\@MATHUMLAUT A}
+\def@dqmacro{O}{\"O}{\@MATHUMLAUT O}
+\def@dqmacro{U}{\"U}{\@MATHUMLAUT U}
+% \end{macrocode}
+% genauso wie diejenige f"ur den Buchstaben~\ss. Leider verhindert
+% das leere Klammerpaar nach dem Token |\ss| in dieser Definition, die
+% f"ur Plain-\TeX\ notwendig ist, da"s nach dem~\ss\ Ligaturen
+% gebildet werden oder Kerning eingef"ugt werden kann. Dies soll in
+% der n"achsten Version verbessert werden.
+% \changes{2.5d}{97/04/13}{\cs{@SS} in \cs{@MATHss} umbenannt.}
+% \changes{2.5d}{97/04/13}{F"ur \LaTeXe{} werden die leeren
+% Klammerpaare nach \cs{ss} und \cs{@MATHss} entfernt.}
+% \changes{2.5d}{97/04/13}{F"ur \texttt{\symbol{`\"}S} wird
+% \cs{SS} verwendet, das in \LaTeXe{} bereits definiert ist
+% (Hinweis von Jaakob Kind
+% \texttt{j.kind@stochastik.rwth-aachen.de}, August 1996).}
+% \changes{2.5d}{97/05/01}{Expansion von \cs{@MATHss} ist nach
+% Einf"ugung eines \cs{mathord} ok, daher leeres Klammerpaar
+% auch f"ur \LaTeX~2.09 und Plain-\TeX{} entfernt.}
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def@dqmacro{s}{\ss{}}{\@MATHss}
+\else
+ \def@dqmacro{s}{\ss}{\@MATHss}
+\fi
+\def@dqmacro{S}{\SS}{\SS}
+\let@dqmacro{z}{s}
+\def@dqmacro{Z}{SZ}{SZ}
+% \end{macrocode}
+% Spezielle Kombinationen f"ur Tremata sind, bis auf die Ausnahme
+% des~"`i"' ohne \mbox{I-Punkt}, ebenso einfach\ldots
+% \begin{macrocode}
+\def@dqmacro{e}{\highumlaut e}{\@MATHUMLAUT e}
+\def@dqmacro{E}{\highumlaut E}{\@MATHUMLAUT E}
+\def@dqmacro{i}{\highumlaut{\i}}{\@MATHUMLAUT\imath}
+\def@dqmacro{I}{\highumlaut I}{\@MATHUMLAUT I}
+% \end{macrocode}
+% \ldots\,wie die Definitionen f"ur die Anf"uhrungszeichen. Die hier
+% eigentlich f"ur Plain-\TeX\ notwendigen leeren Klammerpaare, die
+% Kerning und Ligaturbildung verhindern, konnten entfernt werden,
+% nachdem sichergestellt ist, da"s nach vollst"andiger Expansion der
+% Makros am Ende keine \textit{control sequence} verbleibt.
+% \changes{2.5d}{97/04/13}{F"ur \LaTeXe{} werden die leeren
+% Klammerpaare nach \cs{glqq}, \cs{grqq}, \cs{flqq} und
+% \cs{frqq} entfernt.}
+% \changes{2.5d}{97/05/01}{Leere Klammernpaare ebenso f"ur
+% \LaTeX~2.09 und Plain-\TeX{} entfernen, nachdem daf"ur gesorgt
+% wurde, da"s bei vollst"andiger Expansion am Ende keine cs
+% verbleibt.}
+% \begin{macrocode}
+\def@dqmacro{`}{\glqq}{\glqq}
+\def@dqmacro{'}{\grqq}{\grqq}
+\def@dqmacro{<}{\flqq}{\flqq}
+\def@dqmacro{>}{\frqq}{\frqq}
+% \end{macrocode}
+%
+% Bei den Definitionen der Trennhilfen mu"s nur auf die
+% Einschr"ankungen des Mathematik"-modus geachtet werden.
+% \begin{macrocode}
+\def@dqmacro{-}{\penalty\@M\-\allowhyphens}%
+ {\penalty\@M\-\allowhyphens}
+\def@dqmacro{|}{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \allowhyphens}{}
+\def@dqmacro{"}{\hskip\z@skip}{\hskip\z@skip}
+% \end{macrocode}
+% \begin{macrocode}
+\def@dqmacro{~}{\leavevmode\hbox{-}}{-}
+\def@dqmacro{=}{\penalty\@M-\hskip\z@skip}%
+ {\penalty\@M-\hskip\z@skip}
+% \end{macrocode}
+%
+% Die restlichen Standard-Doublequote-Befehle werden je nach alter und
+% neuer Rechtschreibung verschieden definiert.
+%
+% Mit "`german"' sollen
+% Dreifachkonsonanten nur im Fall der Silbentrennung erzeugt werden:
+% Um die Definitionen f"ur die Ausnahmen der Silbentrennung zu
+% vereinfachen, wird das Makro |\grmn@dqdisc| verwendet, das die
+% gemeinsamen Code-Teile enth"alt.
+% \begin{macrocode}
+%<*old>
+\def\grmn@dqdisc#1#2{\penalty\@M
+ \ifnum\grmn@dqwarninglevel>\@ne \grmn@dq@warning{#1}\fi
+ \discretionary{#2-}{}{#1}\allowhyphens}
+% \end{macrocode}
+% Auch bei diesen Definitionen mu"s der Mathematikmodus separat
+% gehandhabt werden. Wie man hier bemerken sollte, liest das
+% Double\-quote-Makro nur das n"achste Zeichen und pr"uft nicht nach,
+% ob nach der Kombination~|"c| auch ein~\texttt{k} folgt. Dies
+% ist bis auf die Kombination~|"f| f"ur die meisten Schriften
+% nicht notwendig, da in diesen keine Ligaturen definiert sind.
+% \begin{macrocode}
+\def@dqmacro{c}{\grmn@dqdisc ck}{c}
+\def@dqmacro{C}{\grmn@dqdisc CK}{C}
+% \end{macrocode}
+% \begin{macrocode}
+\def@dqmacro{l}{\grmn@dqdisc l{ll}}{l}
+\def@dqmacro{L}{\grmn@dqdisc L{LL}}{L}
+\def@dqmacro{m}{\grmn@dqdisc m{mm}}{m}
+\def@dqmacro{M}{\grmn@dqdisc M{MM}}{M}
+\def@dqmacro{n}{\grmn@dqdisc n{nn}}{n}
+\def@dqmacro{N}{\grmn@dqdisc N{NN}}{N}
+\def@dqmacro{p}{\grmn@dqdisc p{pp}}{p}
+\def@dqmacro{P}{\grmn@dqdisc P{PP}}{P}
+\def@dqmacro{r}{\grmn@dqdisc r{rr}}{r}
+\def@dqmacro{R}{\grmn@dqdisc R{RR}}{R}
+\def@dqmacro{t}{\grmn@dqdisc t{tt}}{t}
+\def@dqmacro{T}{\grmn@dqdisc T{TT}}{T}
+\def@dqmacro{F}{\grmn@dqdisc F{FF}}{F}
+% \end{macrocode}
+%
+% \changes{2.5c}{96/04/21}{Bei \texttt{{\protect\dq}ff} sollte
+% ff-Ligatur nicht unterdr"uckt werden (Bugfix von Joachim Schrod,
+% ehemals f"ur Version 2.4, jedoch hier mit dem Trick des
+% initialisierten \cs{grmn@dqnextff} erg"anzt).}
+% \changes{2.5d}{97/04/13}{Fehler f"ur \texttt{{\protect\dq}f}, falls
+% danach kein weiteres~f folgt, beseitigt (Hinweis von Carsten
+% J"ager \texttt{jaeger@Physiology.RWTH-Aachen.DE}, M"arz 1997).}
+%
+% In den meisten Schriften ist f"ur \texttt{ff} eine Ligatur
+% definiert, die auch in Wortfugen bei Ausfall des
+% dritten~\glq f\grq{} verwendet werden sollte. Die hier verwendeten
+% Makros sind zerbrechlich (\emph{fragile}, jedoch mit einer nicht
+% ganz sauberen Abhilfe, siehe unten), was aber nur in
+% nicht-\LaTeX-basierten Formaten zu Problemen f"uhren wird. F"ur
+% diese Formate mu"s |\protect| in Primitiven wie |\edef|, |\write|,
+% |\mark|, etc.\ entsprechend definiert werden!
+% \begin{macrocode}
+\def@dqmacro{f}{\grmn@dqdiscff}{f}
+\def\grmn@dqdiscff{\penalty\@M
+ \ifnum\grmn@dqwarninglevel>\@ne \grmn@dq@warning f\fi
+ \afterassignment\grmn@dqinsertff \let\grmn@dqnextff= }
+\def\grmn@dqinsertff{%
+ \if f\grmn@dqnextff
+ \expandafter\grmn@dqfirst\else\expandafter\grmn@dqsecond\fi
+ {\relax\discretionary{ff-}{f}{ff}\allowhyphens}{f\grmn@dqnextff}}
+% \end{macrocode}
+%
+% F"ur die zuvor schon erw"ahnten F"alle, in denen |\protect| nicht
+% entsprechend definiert wird, initialisieren wir |\grmn@dqnextff| auf
+% den typischen Wert~\glq f\grq. Da die Makros f"ur die ff-Ligatur
+% entsprechend definiert sind, vermeiden wir, wenn auch etwas
+% kryptisch, in den Nur-Expansions"-f"allen eine Fehlermeldung und
+% erhalten meist auch eine ff-Ligatur. Dazu haben wir au"serdem noch
+% im Makro |\grmn@dqinsertff| ein |\relax| f"ur |\afterassignment| in
+% den nur-expandierten Makrotext vor das |\discretionary| eingef"ugt.
+% \begin{macrocode}
+\let\grmn@dqnextff=f
+%</old>
+% \end{macrocode}
+%
+% Mit "`ngerman"' sollen die Makros dasjenige Ergebnis erzugen,
+% das offenbar gemeint ist, aber es soll gleichzeitig eine Warnung ins
+% Protokoll geschrieben werden:
+% \changes{2.5e (beta 1)}{98/05/04}{Die Befehle f"ur Dreifachkonsonanten
+% werden in "`ngerman"' sinnvoll definiert.}
+% \begin{macrocode}
+%<*new>
+\def@dqmacro{c}{\grmn@dqobsolete@ck ck}{c}
+\def@dqmacro{C}{\grmn@dqobsolete@ck CK}{C}
+\def@dqmacro{l}{\grmn@dqobsolete@three l}{l}
+\def@dqmacro{L}{\grmn@dqobsolete@three L}{L}
+\def@dqmacro{m}{\grmn@dqobsolete@three m}{m}
+\def@dqmacro{M}{\grmn@dqobsolete@three M}{M}
+\def@dqmacro{n}{\grmn@dqobsolete@three n}{n}
+\def@dqmacro{N}{\grmn@dqobsolete@three N}{N}
+\def@dqmacro{p}{\grmn@dqobsolete@three p}{p}
+\def@dqmacro{P}{\grmn@dqobsolete@three P}{P}
+\def@dqmacro{r}{\grmn@dqobsolete@three r}{r}
+\def@dqmacro{R}{\grmn@dqobsolete@three R}{R}
+\def@dqmacro{t}{\grmn@dqobsolete@three t}{t}
+\def@dqmacro{T}{\grmn@dqobsolete@three T}{T}
+\def@dqmacro{F}{\grmn@dqobsolete@three F}{F}
+\def@dqmacro{f}{\grmn@dqobsolete@three f}{f}
+%</new>
+% \end{macrocode}
+%
+%
+% \subsection{Definition der Double\-quote-Befehle (cont.)}
+%
+% Wie schon bei der vorl"aufigen Definition des Makros
+% |\grmn@dqredefcheck| er"-w"ahnt, sollten alle weiteren
+% Definitionen von Double\-quote-Befehlen zumindest in der
+% Protokolldatei erscheinen. Dann k"onnen von Benutzer gemeldete
+% Fehler, wenn auch die Protokolldatei mitgeschickt wird, schneller
+% eingegrenzt werden. Deshalb wird dieses Makro hier so definiert,
+% da"s es bei jeder Verwendung von |\def@dqmacro| und |\let@dqmacro|
+% eine Zeile in die Protokolldatei schreibt -- mit Informationen,
+% welche Kombination definiert wird und ob eine alte Definition
+% "uber"-schrieben wird.
+% \changes{2.5d}{97/05/01}{\cs{immediate}\cs{write}\cs{m@ne} durch
+% \cs{wlog} ersetzt.}
+% \begin{macrocode}
+\def\grmn@dqredefcheck#1{%
+%<old> \wlog{german: \grmn@dq@macro\ifx{#1}\relax \else re\fi
+%<new> \wlog{ngerman: \grmn@dq@macro\ifx{#1}\relax \else re\fi
+ defining dq-command for `\string#1'\on@line.}}%
+% \end{macrocode}
+%
+%
+% \section{Unterst"utzung f"ur Dokumente in verschiedenen Sprachen}
+%
+% Die Style-Option "`german"' unterst"utzt die Einbindung von
+% Textteilen in deutscher Sprache in Dokumente, die auch in englisch
+% oder franz"osisch geschrieben sind. Die folgenden Befehle sind
+% dagegen nur bedingt f"ur "`mehrsprachige"' Texte geeignet, in denen
+% zwei oder mehr Sprachen gleichrangig gesetzt werden.
+%
+%
+% \subsection{Datumsangaben}
+% \begin{macrocode}
+%<old>\def\month@german{\ifcase\month \or
+%<new>\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}
+%<old>\def\dategerman{\def\today{\number\day.~\month@german
+%<new>\def\datengerman{\def\today{\number\day.~\month@ngerman
+ \space\number\year}}
+%<old>\def\dateaustrian{\def\today{\number\day.~\ifnum 1=\month
+%<new>\def\datenaustrian{\def\today{\number\day.~\ifnum 1=\month
+%<old> J\"anner\else \month@german\fi \space\number\year}}
+%<new> J\"anner\else \month@ngerman\fi \space\number\year}}
+% \end{macrocode}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% \subsection{Textteile in "Uberschriften, etc.}
+%
+% Ab der \LaTeX~2.09-Release vom Dezember~1991 sind alle konstanten
+% Textteile in den Standard-Styles und Style-Optionen durch Makros
+% |\...name| ersetzt, so da"s man mit einigen Einschr"ankungen
+% durch Redefinition dieser Makros eine Sprachanpassung erreichen
+% kann. Will man diese Anpassung auch bei eigenen Styles und
+% Style-Optionen erreichen, so sollte man die entsprechenden
+% Textteile durch die entsprechenden Makros ersetzen, wobei man
+% eine Default-Definition dieser Makros mitliefern sollte.
+%
+% Als Beispiel mu"s die Definition
+%\begin{verbatim}
+%\def\tableofcontents{\section*{Contents%
+% \@mkboth{CONTENTS}{CONTENTS}}%
+% \@starttoc{toc}}
+%\end{verbatim}
+% die in den alten \LaTeX-Releases vor Dezember~1991 in
+% \texttt{article.sty} zu finden ist, durch
+%\begin{verbatim}
+%\def\contentsname{Contents}
+%\def\tableofcontents{\section*{\contentsname
+% \@mkboth{\uppercase{\contentsname}}%
+% {\uppercase{\contentsname}}}%
+% \@starttoc{toc}}
+%\end{verbatim}
+% ersetzt werden, um die englische "Uberschrift "`Contents"' f"ur
+% das Inhaltsverzeichnis entsprechend anpassen zu k"onnen.
+%
+% F"ur die Standard-Klassen und Pakete von \LaTeXe\ wurde dies von
+% Anfang an gemacht, so da"s hier keine "Anderungen notwendig sind.
+%
+% Die folgenden Makros |\captions|\meta{Sprache} definieren alle in
+% den \LaTeX-Standard-Klassen und \mbox{-Paketen} verwendeten
+% Textteile.
+% \begin{macrocode}
+%<old>\def\captionsgerman{%
+%<new>\def\captionsngerman{%
+ \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}}
+%<old>\let\captionsaustrian=\captionsgerman
+%<new>\let\captionsnaustrian=\captionsngerman
+% \end{macrocode}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \begin{macrocode}
+\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}}%
+% \end{macrocode}
+%
+% \subsection{Weitere sprachabh"angige Parameter}
+%
+% Die Sprache eines Dokuments bestimmt neben den Datumsangaben und
+% den Textteilen in "Uberschriften auch noch weitere Parameter, wie
+% z.\,B.\ ob nach einem Satzzeichen, wie Punkten und Kommas, ein
+% gr"o"serer Wortzwischenraum eingef"ugt werden soll. Au"serdem
+% sollten auch die den Trennmustern zugeordneten Parameter
+% \texttt{\string\left\-hyphen\-min} und
+% \texttt{\string\right\-hyphen\-min} auf entsprechende Werte gesetzt
+% werden.
+%
+% Nach der neuen Rechtschreibung w"are |\lefthyphenmin=1| zul"assig.
+% Dies wird allerdings von den Trennmustern \texttt{gnhyph01.tex}
+% nicht unterst"utzt.
+%
+% \changes{2.5c}{96/04/28}{\cs{(no)extras(US)english} als
+% expandierbare Makros statt als \cs{relax} definiert, damit
+% k"onnen diese Makros einfacher erg"anzt werden.}
+% \begin{macrocode}
+\def\extrasUSenglish{}
+\let\noextrasUSenglish=\extrasUSenglish
+\let\extrasenglish=\extrasUSenglish
+\let\noextrasenglish=\extrasenglish
+% \end{macrocode}
+% \changes{2.5c}{96/02/26}{Explizite Zuweisung an \cs{uchyph}
+% hinzugef"ugt (found by R. Wonneberger, David M. Jones,
+% 93/02/11).}
+% \begin{macrocode}
+%<old>\def\extrasgerman{\frenchspacing \uchyph\@ne
+%<new>\def\extrasngerman{\frenchspacing \uchyph\@ne
+ \lefthyphenmin\tw@ \righthyphenmin\tw@}
+%<old>\def\noextrasgerman{%
+%<new>\def\noextrasngerman{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi
+ \uchyph\the\uchyph\relax
+ \lefthyphenmin\the\lefthyphenmin
+ \righthyphenmin\the\righthyphenmin}
+%<old>\let\extrasaustrian=\extrasgerman
+%<new>\let\extrasnaustrian=\extrasngerman
+%<old>\let\noextrasaustrian=\noextrasgerman
+%<new>\let\noextrasnaustrian=\noextrasngerman
+% \end{macrocode}
+% \begin{macrocode}
+\def\extrasfrench{\frenchspacing}
+\def\noextrasfrench{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi}
+% \end{macrocode}
+%
+%
+% \subsection{Default-Werte f"ur Trennmusterwerte deklarieren}
+%
+% Jeder Sprache und deren zugeordnetem Satz von Trennmustern sollte
+% eine Nummer f"ur den \TeX-Parameter |\language| beim Erzeugen
+% der Formatdatei zugewiesen worden sein. Diese Nummer ist f"ur
+% jede Sprache in der \textit{control sequence}
+% |\l@|\(\langle\)Sprache\(\rangle\) abgespeichert.
+%
+% Die Style-Option "`german"' verwendet die Sprachen
+% \texttt{USenglish}, \texttt{english}, \texttt{german},
+% \texttt{austrian} und \texttt{french}. Sind f"ur diese Sprachen
+% keine Nummern abgespeichert worden, werden diese hier als Dialekt
+% einer schon definierten Sprache oder als~\(255\) definiert, so da"s
+% nicht getrennt wird.
+%
+% Ist f"ur \texttt{german} bzw.\ dessen "`Dialekt"' \texttt{austrian}
+% kein Wert definiert, wird eine entsprechende Meldung auf dem
+% Benutzerterminal ausgegeben. F"ur die anderen Sprache erscheint
+% diese Meldung nur in der Protokolldatei.
+%
+% "`german"' und "`ngerman"' unterscheiden sich
+% durch die Bezeichner f"ur die jeweils unterst"utzten die Sprachen:
+% F"ur die neue Rechtschreibung
+% werden \texttt{ngerman} und \texttt{naustrian} an Stelle von
+% \texttt{german} und \texttt{austrian} verwendet.
+%
+%
+% \begin{macrocode}
+\@ifundefined{l@USenglish}{%
+ \@ifundefined{l@english}{\chardef\l@USenglish=255 }%
+ {\chardef\l@USenglish=\l@english}%
+%<old> \wlog{german -- \string\language\space number for USenglish %
+%<new> \wlog{ngerman -- \string\language\space number for USenglish %
+ undefined, default \number\l@USenglish\space used.}%
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+\@ifundefined{l@english}{%
+ \chardef\l@english=\l@USenglish
+%<old> \wlog{german -- \string\language\space number for UKenglish %
+%<new> \wlog{ngerman -- \string\language\space number for UKenglish %
+ undefined, default \number\l@english\space used.}%
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+%<*old>
+\@ifundefined{l@german}{%
+ \@ifundefined{l@austrian}{%
+ \chardef\l@german=255 %
+ \message{german -- \string\language\space number for German %
+ undefined, default \number\l@german\space used,}%
+ \message{german -- Please read \string"gerdoc.tex\string" how %
+ to install hyphenation patterns.}%
+ }{%
+ \chardef\l@german=\l@austrian
+ \wlog{german -- \string\language\space number for German %
+ undefined, default \number\l@german\space used.}%
+ }%
+}{}
+%</old>
+%<*new>
+\@ifundefined{l@ngerman}{%
+ \@ifundefined{l@naustrian}{%
+ \chardef\l@ngerman=255 %
+ \message{ngerman -- \string\language\space number for ngerman %
+ undefined, default \number\l@ngerman\space used,}%
+ \message{ngerman -- Please read \string"gerdoc.tex\string" how %
+ to install hyphenation patterns.}%
+ }{%
+ \chardef\l@ngerman=\l@naustrian
+ \wlog{ngerman -- \string\language\space number for ngerman %
+ undefined, default \number\l@ngerman\space used.}%
+ }%
+}{}
+%</new>
+% \end{macrocode}
+% \begin{macrocode}
+%<*old>
+\@ifundefined{l@austrian}{%
+ \chardef\l@austrian=\l@german
+ \wlog{german -- \string\language\space number for Austrian %
+ undefined, default \number\l@austrian\space used.}%
+}{}
+%</old>
+%<*new>
+\@ifundefined{l@naustrian}{%
+ \chardef\l@naustrian=\l@ngerman
+ \wlog{ngerman -- \string\language\space number for naustrian %
+ undefined, default \number\l@naustrian\space used.}%
+}{}
+%</new>
+% \end{macrocode}
+% \begin{macrocode}
+\@ifundefined{l@french}{%
+ \chardef\l@french=255
+%<old> \wlog{german -- \string\language\space number for French %
+%<new> \wlog{ngerman -- \string\language\space number for French %
+ undefined, default \number\l@french\space used.}%
+}{}
+% \end{macrocode}
+%
+%
+% \subsection{Wechsel der Trennmuster, Datumsangabe und
+% "Uberschriften}
+%
+% Ein Wechsel der Sprache mit |\selectlanguage{|\meta{Sprache}|}|
+% schaltet einfach die Datumsangabe, Textteile, Trennmuster und
+% andere Parameter f"ur die angegebene \meta{Sprache} um.
+%
+% F"ur die n"achste Version ist endlich eine Anpassung an das
+% Babel-System geplant. Au"serdem fehlen momentan noch
+% Standard-Makros, um die aktuelle Sprache abzufragen und abh"angig
+% von dieser entsprechend reagieren zu k"onnen.
+%
+% Das Makro |\originalTeX| enth"alt alle Anweisungen, um die
+% Parameter"-anpassungen r"uck"-g"angig machen zu k"onnen, die man
+% beim Umschalten auf die momentane Sprache ge"-"andert hat. Dieses
+% Makro mu"s immer expandierbar sein; darf also nicht als |\relax|
+% definiert werden. Zu Beginn sind keine Anweisungen notwendig.
+% (Anmerkung: Wegen Problemen mit dem Paket \texttt{bibgerm}, das
+% einige der internen Makros von "`german"' umdefiniert, wurde der
+% Name des Makros ge"andert -- dies sollte in einer endg"ultigen
+% L"osung wieder verbessert werden, um beispielsweise kompatibel zu
+% Babel zu werden.)
+% \changes{2.5c}{96/02/26}{\cs{grmn@originalTeX} mu"s
+% \cs{original@TeX} hei"sen, damit einige andere Pakete, wie
+% `bibgerm' kompatibel bleiben. `bibgerm' sollte endlich verbessert
+% und "`sauberer"' programmiert werden (die zus"atzlichen Strings
+% kann man auch in die Makros \cs{extras\ldots} einf"ugen).}
+% \changes{2.5c}{96/04/21}{\cs{original@TeX} hei"st in Babel
+% \cs{originalTeX}, das in `german.sty' eine andere Bedeutung
+% hat (TODO).
+% Da ich in \cs{selectlanguage} den Leerzeichen-Trick verwende
+% (um `bibgerman' zu "`hintergehen"'), hei"st \cs{original@TeX}
+% bis zur endg"ultigen L"osung wieder \cs{grmn@originalTeX}.}
+% \begin{macrocode}
+\def\grmn@originalTeX{}
+% \end{macrocode}
+%
+% \changes{2.5c}{96/04/21}{\cs{languagename} neu mit Babels
+% Funktionalit"at eingef"uhrt, Hinweis auf m"ogliche other-Tokens.}
+%
+% Das Makro |\languagename| enth"alt den Namen der momentan
+% eingeschalteten Sprache. Der Name ist eine Folge von
+% Character-Tokens, die entweder einen |\catcode| von 11 (letter) oder
+% 12 (other) besitzen k"onnen. Die Ursache f"ur Other-Tokens ist das
+% Primitiv |\string|, das in |\selectlanguage| verwendet wird, um aus
+% einer als Argument angegebenen \textit{control sequence} das
+% Escape-Zeichen abzuspalten. (Die Dokumentation von Babel~3.5 gibt
+% einen Test der aktuellen Sprache mit |\languagename| an, der wegen
+% der Other-Tokens nicht immer funktionieren wird!)
+%
+% \begin{macrocode}
+\def\languagename{}
+% \end{macrocode}
+%
+% Mit dem Makro |\selectlanguage| wird auf die Sprache umgeschaltet.
+% Dabei werden, nachdem abgefragt wurde, ob die Sprache definiert
+% wurde, zuerst mit |\originalTeX| alle "Anderungen r"uck"-g"angig
+% gemacht, bevor das Datum, die "Uberschriften, sonstige Parameter
+% und die Trennmuster umgeschalten werden.
+% (Anmerkung: |\originalTeX| hei"st im Moment noch
+% |\grmn@originalTeX|, dies mu"s aber noch in der n"achsten Version
+% ge"andert werden, um kompatibler zu Babel zu sein.)
+%
+% \changes{2.5c}{96/04/21}{Der Trick aus \LaTeXe{} mit dem
+% abschlie"senden Leerzeichen im Namen des zu sch"utzenden Makros
+% wird auch f"ur \cs{selectlanguage } verwendet. Da damit die
+% Neudefinition im Paket `bibgerm' wirkungslos wird, verwende ich
+% hier einen tempor"aren Patch (in Form des \cs{bibs\ldots}) f"ur
+% dieses Paket. Besser w"are es aber, wenn `bibgerm' die
+% zus"atzlichen Definitionen an \cs{extras\ldots} anh"angen w"urde.}
+% \begin{macrocode}
+\expandafter\def\csname selectlanguage \endcsname#1{\relax
+ \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
+ \grmn@originalTeX
+ \edef\languagename{#1}%
+ \edef\grmn@originalTeX{\csname noextras#1\endcsname
+ \def\noexpand\grmn@originalTeX{}}%
+ \csname date#1\endcsname
+ \csname captions#1\endcsname
+ \csname extras#1\endcsname\relax
+ % Diese Zeile ist fuer `bibgerm' ...
+ \csname bibs#1\endcsname
+ % ... sie wird in spaeteren `german.sty'-Versionen nicht
+ % mehr vorhanden sein. Also nicht darauf verlassen!
+ \language \csname l@#1\endcsname\relax
+ \fi}
+% \end{macrocode}
+%
+% Das Makro |\selectlanguage| ist \emph{fragile}. Deshalb wird es
+% implizit mit einem |\protect| gesch"utzt. Da dadurch so oder so
+% zwei Makros notwendig sind, k"onnen wir in dieses zweite Makro
+% gleich noch weitere Funktionalit"at stecken (die aber vollst"andig
+% expandierbar sein mu"s!):
+% In "alteren Versionen dieser Style-Option mu"ste man die Sprache als
+% \textit{control sequence}, z.\,B.\ |\german|, eingeben, w"ahrend man
+% in den aktuellen Versionen nur noch den Namen, also |german|,
+% verwenden sollte. Damit beides aus Kompatibilit"ats"-gr"unden
+% m"oglich ist, wird hier einfach die \textit{control sequence}
+% umgewandelt und das Escape-Zeichen, normalerweise ein Back\-slash,
+% mit einem kleinen Kniff entfernt.
+% \changes{2.5c}{96/04/21}{Der Trick aus \LaTeXe{} mit dem
+% abschlie"senden Leerzeichen im Namen des zu sch"utzenden Makros
+% wird auch f"ur \cs{selectlanguage} verwendet.}
+% \begin{macrocode}
+\begingroup\catcode`\ =11\relax% <= do not delete this and the
+\toks0={\endgroup% <=== following percent characters!
+\def\selectlanguage#1{\protect\selectlanguage {%
+\ifnum\escapechar=\expandafter`\string#1\empty%
+\else\string#1\empty\fi}}}%
+\the\toks0\relax%
+% \end{macrocode}
+%
+%
+% In "alteren \texttt{.aux}-Dateien kann immer noch die alte interne
+% Form \cs{p@select\-language} auftauchen. Daher wird diese hier
+% nochmals definiert, um diese eigentlich unn"otigen Fehlermeldungen
+% zu vermeiden. Au"serdem fr"agt \texttt{bibgerm.sty} die Existenz
+% dieses Makros ab und, falls es nicht existiert, definiert
+% \texttt{bibgerm.sty} ein eigenes Makro \cs{select\-language} mit der
+% alten Definition aus \texttt{german.sty} Version~2.3. Dies mu"s
+% auf alle F"alle vermieden werden!
+%
+% \changes{2.5c}{96/04/23}{\cs{p@selectlanguage} aus Kompatibilit"at
+% mit v2.5b und noch "alteren Versionen wieder eingef"uhrt.}
+%
+% \begin{macrocode}
+\def\p@selectlanguage{\selectlanguage}
+% \end{macrocode}
+%
+%
+% \changes{2.5c}{96/04/21}{\cs{iflanguage} neu eingef"uhrt.}
+% \changes{2.5e (beta 1)}{98/05/04}{\cs{iflanguage} ge"andert.}
+%
+% Das Makro |\iflanguage| kann dazu benutzt werden, abh"angig von
+% der aktuellen Sprache Aktionen auszuf"uhren. Das Makro hat drei
+% Argumente. Das erste Argument ist die Sprache in Form einer
+% Folge von Character-Tokens, das zweite und dritte Argument enth"alt
+% die Aktionen, falls dies die aktuelle Sprache ist bzw.\ falls nicht.
+%
+% Mit dem folgenden |\iflanguage| kann man in den "`then"'- und
+% "`else"'"~Argumenten auch Makros verwenden, deren Parameter
+% hinter dem |\iflanguage|-Befehl folgen. Diese Implementation,
+% abgeschaut von |\@ifundefined|, erm"oglicht
+% Konstrukte wie |Sto\iflanguage{german}{"}{f}ffetzen|.
+%
+% |\iflanguage| kann sich in sp"ateren Version noch geringf"ugig
+% "andern, falls dies im Babel-Paket geschehen sollte.
+%
+% \begin{macrocode}
+\def\iflanguage#1{%
+ \ifx\csname l@#1\endcsname\relax
+ \expandafter\grmn@dqsecond
+ \else \ifnum\csname l@#1\endcsname=\language
+ \expandafter\expandafter\expandafter\grmn@dqfirst
+ \else
+ \expandafter\expandafter\expandafter\grmn@dqsecond
+ \fi\fi
+}
+% \end{macrocode}
+%
+%
+% \subsection{Kompatibilit"at mit \protect\TeX~2}
+%
+% In \TeX\ Version 2.x konnte man Trennmuster f"ur nur eine einzige
+% Sprache in einer Format"-datei laden und verwenden. Deshalb fehlen
+% in dieser alten \TeX-Version, die von einigen, wenn auch wenigen
+% Personen immer noch verwendet wird/werden mu"s, die Parameter
+% |\language|, \texttt{\string\left\-hyphen\-min},
+% \texttt{\string\right\-hyphen\-min} und das Primitiv
+% \texttt{\string\set\-language}. Um diese Style-Option mit dieser
+% alten Version verwenden zu k"onnen, werden diese f"ur \TeX\
+% Version~2 einfach ohne Funktionalit"at nachimplementiert.
+%
+% Die Parameter sind einfache Z"ahler, die mit |\newcount| allokiert
+% werden k"onnen und mit sinnvollen, wenn auch nie von \TeX\ selbst
+% verwendete Werten initialisiert werden. Da |\newcount| in
+% Plain-\TeX\ als "`outer"' deklariert ist, mu"s hier der Trick mit
+% |\csname| verwendet werden.
+% \begin{macrocode}
+\expandafter\ifx\csname language\endcsname\relax
+ \csname newcount\endcsname\language
+ \language=0 \fi
+\expandafter\ifx\csname lefthyphenmin\endcsname\relax
+ \csname newcount\endcsname\lefthyphenmin
+ \lefthyphenmin=2 \fi
+\expandafter\ifx\csname righthyphenmin\endcsname\relax
+ \csname newcount\endcsname\righthyphenmin
+ \righthyphenmin=3 \fi
+% \end{macrocode}
+%
+% F"ur das in \TeX~3 neu hinzugekommene Primitiv
+% \texttt{\string\set\-language} k"onnte man eine relativ einfache
+% Definition verwenden. Da jedoch Makros die Existenz dieses Befehls
+% abpr"ufen und es dann mit der Bedeutung, die es in \TeX~3 besitzt,
+% verwenden k"onnten, sollte es das Verhalten, insbesondere dessen
+% Einschr"ankungen, dieses neuen Primitivs nachbilden.
+% Da |\setlanguage| in "alteren Versionen dieser Style-Option zu
+% Wechseln der Sprache verwendet wurde, kann man gleich in der
+% Fehlermeldung auf das neue Makro |\selectlanguage| hinweisen.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%
+% \subsection{Ein-/Ausschalten der deutschen Befehle}
+% \changes{2.5e (beta 3)}{98/05/28}{In {\tt ngerman.sty} wird nun
+% \cs{ngermanTeX} definiert.}
+%
+% \begin{macrocode}
+\begingroup \mdqon
+\def\x{\endgroup
+ \def\originalTeX{\mdqoff \let"\dq \umlauthigh
+ \let\3\grmn@original@three
+ \selectlanguage{USenglish}}%
+%<old> \def\germanTeX{\mdqon \let"\@active@dq \umlautlow
+%<new> \def\ngermanTeX{\mdqon \let"\@active@dq \umlautlow
+ \let\grmn@original@three\3\let\3\ss
+%<old> \selectlanguage{german}}}%
+%<new> \selectlanguage{ngerman}}}%
+\x
+% \end{macrocode}
+%
+% Zum Schlu"s bleibt nur noch das R"ucksetzen des \textit{category
+% codes} des Zeichens~\texttt{@} und das Einschalten der deutschen
+% Befehle, das gleichzeitig die deutschen Trennmuster aktiviert,
+% falls sie geladen wurden.
+% \begin{macrocode}
+\catcode`\@=\atcode % return to previous catcode
+%<old>\germanTeX
+%<new>\ngermanTeX
+% \end{macrocode}
+%
+%\iffalse
+%</!driver>
+%</!hyphcfg>
+%\fi
+%
+% \section{Beispieldatei \texttt{hyphen.cfg} zum Laden der
+% Trennmuster}
+%
+% In \texttt{gerdoc.tex}, der Dokumentation zum German-Style, sind
+% die Schritte zur Installation der Trennmuster genauer erl"autert.
+% Zur Vereinfachung f"ur den Benutzer wird die Beispieldatei
+% \texttt{hyphxmpl.cfg} zur Verf"ugung gestellt, die entweder direkt
+% oder mit wenigen "Anderungen als Datei \texttt{hyphen.cfg}
+% f"ur \LaTeXe{} verwendet werden kann.
+%
+% \begin{macrocode}
+%<+hyphcfg>%% ----------------------------------------------
+%<+hyphcfg>%% Beispielkonfigurationsdatei fuer: `hyphen.cfg'
+%<+hyphcfg>%% Naeheres siehe Dokumentation `gerdoc.tex'.
+%<+hyphcfg>%% Copyleft 1995-1998 by Bernd Raichle.
+%<+hyphcfg>
+%<+hyphcfg>%% Konfigurationsdatei -- Trennmuster: `hyphen.cfg'
+%<+hyphcfg>\message{== Loading hyphenation patterns:}
+%<+hyphcfg>
+%<+hyphcfg>%% american english
+%<+hyphcfg>\chardef\l@USenglish=\language
+%<+hyphcfg>%% british english als "Dialekt"
+%<+hyphcfg>\chardef\l@english=\l@USenglish
+%<+hyphcfg>\input hyphen
+%<+hyphcfg>
+%<+hyphcfg>%% german
+%<+hyphcfg>\newlanguage\l@german \language=\l@german
+%<+hyphcfg>%% oesterreichisch als "Dialekt"
+%<+hyphcfg>\chardef\l@austrian=\l@german
+%<+hyphcfg>\input ghyph31
+%<+hyphcfg>
+%<+hyphcfg>%% new german
+%<+hyphcfg>\newlanguage\l@ngerman \language=\l@ngerman
+%<+hyphcfg>%% oesterreichisch (neu) als "Dialekt"
+%<+hyphcfg>\chardef\l@naustrian=\l@ngerman
+%<+hyphcfg>\input gnhyph01
+%<+hyphcfg>
+%<+hyphcfg>%% weitere Sprachen nach folgendem Schema:
+%<+hyphcfg>% \newlanguage\l@SPRACHE \language=\l@SPRACHE
+%<+hyphcfg>% \chardef\l@DIALEKT=\l@SPRACHE
+%<+hyphcfg>% \input SPRACHhyphen
+%<+hyphcfg>
+%<+hyphcfg>%% Default-Trennmuster: USenglish
+%<+hyphcfg>\language=\l@USenglish \lefthyphenmin=2 \righthyphenmin=3
+%<+hyphcfg>\message{done.}
+% \end{macrocode}
+%
+% Ich hoffe, das Lesen dieses dokumentierten Quellcodes hat einige
+% Einblicke in die Implementierung der Style-Option "`german"'
+% gegeben. Da ich sie haupt"-s"achlich als eigene Ged"achtnisst"utze
+% geschrieben habe, kaum Korrekturen vorgenommen habe, ist sie
+% unvoll"-st"andig, ent"-h"alt viele \mbox{Tipp-}, Ausdrucks- und
+% sonstige Fehler. Man m"oge "uber diese hinwegsehen oder mir
+% entsprechende Korrekturen zukommen lassen. Wichtiger ist mir
+% jedoch, da"s der Makro-Code m"oglichst wenig Fehler enth"alt, soda"s
+% jede Meldung eines Fehlers und jeder Verbesserungsvorschlag immer
+% willkommen ist. Daf"ur schon jetzt meinen Dank!
+% \pagebreak
+%
+% \Finale
+\endinput
+%% End of german.dtx
diff --git a/language/german/german.ins b/language/german/german.ins
new file mode 100644
index 0000000000..c68647ad30
--- /dev/null
+++ b/language/german/german.ins
@@ -0,0 +1,84 @@
+%% german.ins
+%%
+%% Docstrip installation instruction file
+%% for the `german' collection, Version 2.5e of 1998-07-08
+%%
+%% Copyright (C) 1991-1997 by B.Raichle and DANTE e.V.
+%% Copyright (C) 1998,1999 by B.Raichle
+%%
+
+\def\batchfile{german.ins}
+\input docstrip.tex
+
+\expandafter\ifx\csname declarepreamble\endcsname\relax
+ \Msg{==> This file requires docstrip version 2.4}
+ \Msg{==> available from CTAN (e.g. ftp.dante.de) in}
+ \Msg{==> tex-archive/macros/latex/unpacked/docstrip.tex}
+ \Msg{}\expandafter\endinput\fi
+
+\keepsilent
+
+\preamble
+
+This file is part of the `german' collection,
+providing German language support for
+plain TeX or LaTeX version 2e/2.09.
+
+----------- Copyright (C) 1998, 1999 by B.Raichle ----------
+------------------- All rights reserved. -------------------
+Maintained by Bernd Raichle (Uni Stuttgart),
+using ideas by H.Partl (TU Wien, Uni.f.Bodenkultur Wien)
+and many other people.
+
+
+IMPORTANT NOTICE:
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1 of the License, or any later version.
+
+
+Error Reports (in case of UNCHANGED versions) should be sent to:
+
+ Bernd Raichle <raichle@Informatik.Uni-Stuttgart.DE>
+
+\endpreamble
+
+\declarepreamble\emptypreamble
+\endpreamble
+
+\Msg{*** Generating files ***}
+\generate{%
+ \file{german.sty}{\from{german.dtx}{old}}
+ \file{ngerman.sty}{\from{german.dtx}{new}}
+% \file{german.drv}{\from{german.dtx}{driver}}
+ \usepreamble\emptypreamble
+ \file{hyphxmpl.cfg}{\from{german.dtx}{hyphcfg}}%
+}
+\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 german.sty ngerman.sty}
+\Msg{*}
+\Msg{* There exists a separate file `gerdoc.tex' containing}
+\Msg{* the user documentation. Please get this file, run it}
+\Msg{* through LaTeX (LaTeX2e or LaTeX 2.09):}
+\Msg{*}
+\Msg{* \space\space latex gerdoc.tex}
+\Msg{*}
+\Msg{* and follow the instructions how to install the hyphenation}
+\Msg{* patterns when creating format files. The file `hyphxmpl.cfg'}
+\Msg{* can be used as an example for LaTeX2e's `hyphen.cfg' file.}
+\Msg{*}
+\Msg{* (Gurus only!) To produce the implementation documentation you}
+\Msg{* can run the file `german.dtx' through LaTeX:}
+\Msg{* \space\space latex german.dtx}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{************************************************************}
+\endbatchfile
+%%
+%% End of file `german.ins'.
diff --git a/language/german/german.sty b/language/german/german.sty
new file mode 100644
index 0000000000..ef477d2bca
--- /dev/null
+++ b/language/german/german.sty
@@ -0,0 +1,674 @@
+%%
+%% This is file `german.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% german.dtx (with options: `old')
+%%
+%% This file is part of the `german' collection,
+%% providing German language support for
+%% plain TeX or LaTeX version 2e/2.09.
+%%
+%% ----------- Copyright (C) 1998, 1999 by B.Raichle ----------
+%% ------------------- All rights reserved. -------------------
+%% Maintained by Bernd Raichle (Uni Stuttgart),
+%% using ideas by H.Partl (TU Wien, Uni.f.Bodenkultur Wien)
+%% and many other people.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%%
+%%
+%% Error Reports (in case of UNCHANGED versions) should be sent to:
+%%
+%% Bernd Raichle <raichle@Informatik.Uni-Stuttgart.DE>
+%%
+\expandafter\ifx\csname grmn\string @VersionNo\endcsname\relax
+\else
+ \ifnum\number\csname grmn\string @VersionNo\endcsname<9806\relax
+ \else \germanTeX \expandafter\expandafter\expandafter\endinput
+ \fi\fi
+\expandafter\mathchardef\csname grmn\string @VersionNo\endcsname
+=9806\relax % = v2.5e
+\message{v2.5e 1998-07-08}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
+ \ProvidesPackage{german}[1998/07/08 v2.5e %
+ Support for writing german texts (br)]
+\fi
+\chardef\atcode=\catcode`\@
+\catcode`\@=11 % \makeatletter
+\expandafter\ifx\csname @ifundefined\endcsname\relax
+ \def\@ifundefined#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\grmn@dqfirst\else\expandafter\grmn@dqsecond\fi}
+\fi
+\def\grmn@dqfirst#1#2{#1}
+\def\grmn@dqsecond#1#2{#2}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\@ifundefined{SS}{\def\SS{SS}}{}
+\else
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvideTextCommandDefault\endcsname\relax
+ \immediate\write17{}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{%
+!! Dies ist eine zu alte LaTeX2e-Version, die nicht}
+ \immediate\write17{%
+!! alle fuer german/ngerman notwendigen Deklarationen}
+ \immediate\write17{%
+!! zur Verfuegung stellt. Dennoch koennen Sie diese}
+ \immediate\write17{%
+!! Pakete, eventuell mit kleinen Fehlern, verwenden.}
+ \immediate\write17{!!}
+ \immediate\write17{%
+!! Bitte installieren Sie eine neuere LaTeX2e-Version,}
+ \immediate\write17{%
+!! da zukuenftige Versionen der Pakete diese}
+ \immediate\write17{%
+!! LaTeX2e-Version nicht mehr unterstuetzen werden!}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{}
+\fi
+\@ifundefined{UseTextSymbol}{%
+ \def\UseTextSymbol#1#2{{\fontencoding{#1}\selectfont #2}}
+}{}
+\@ifundefined{UseTextAccent}{%
+ \def\UseTextAccent#1#2#3{%
+ {\let\@curr@enc\f@encoding
+ \fontencoding{#1}\selectfont
+ #2{\fontencoding\@curr@enc\selectfont #3}}}%
+}{}
+\@ifundefined{ProvideTextCommand}{%
+ \def\ProvideTextCommand#1#2{%
+ %%% misses \RobustTextCommand{#1}{...etc.etc...}!!
+ \expandafter\providecommand\csname #2\string#1\endcsname}%
+}{}
+\@ifundefined{ProvideTextCommandDefault}{%
+ \def\ProvideTextCommandDefault#1{%
+ \ProvideTextCommand{#1}{U}}%
+}{}
+\@ifundefined{DeclareTextCompositeCommand}{%
+ \def\DeclareTextCompositeCommand#1#2#3#4{%
+ % define a `dummy' text composite
+ \DeclareTextComposite{#1}{#2}{#3}{`\Z}%
+ % then redefine this command including the new command
+ \expandafter\def\csname\expandafter\string\csname
+ #2\endcsname\string#1-\string#3\endcsname##1##2{#4}}%
+}{}
+\@ifundefined{OT1\string\ss}{%
+ \wlog{german: Re-declaration of \string\ss\space for OT1!}%
+ \DeclareTextSymbol{\ss}{OT1}{25}}{}
+\@ifundefined{OT1\string\i}{%
+ \wlog{german: Re-declaration of \string\i\space for OT1!}%
+ \DeclareTextSymbol{\i}{OT1}{16}}{}
+\ProvideTextCommandDefault{\"}{\UseTextAccent{OT1}{\"}}
+\ProvideTextCommandDefault{\ss}{\UseTextSymbol{OT1}\ss}
+\ProvideTextCommandDefault{\i}{\UseTextSymbol{OT1}\i}
+\ProvideTextCommandDefault{\SS}{SS}
+\@ifundefined{textquotedblleft}{%
+ \ProvideTextCommandDefault{\textquotedblleft}{%
+ \UseTextSymbol{OT1}\textquotedblleft}%
+ \DeclareTextSymbol{\textquotedblleft}{OT1}{92}%
+ \DeclareTextSymbol{\textquotedblleft}{T1}{16}%
+}{}
+\@ifundefined{textquotedblright}{%
+ \ProvideTextCommandDefault{\textquotedblright}{%
+ \UseTextSymbol{OT1}\textquotedblright}%
+ \DeclareTextSymbol{\textquotedblright}{OT1}{`\"}%
+ \DeclareTextSymbol{\textquotedblright}{T1}{17}%
+ %% \DeclareTextSymbol{\textquotedbl}{T1}{`\"}%
+}{}
+\@ifundefined{textquoteleft}{%
+ \ProvideTextCommandDefault{\textquoteleft}{%
+ \UseTextSymbol{OT1}\textquoteleft}%
+ \DeclareTextSymbol{\textquoteleft}{OT1}{`\`}%
+ \DeclareTextSymbol{\textquoteleft}{T1}{`\`}%
+}{}
+\@ifundefined{textquoteright}{%
+ \ProvideTextCommandDefault{\textquoteright}{%
+ \UseTextSymbol{OT1}\textquoteright}%
+ \DeclareTextSymbol{\textquoteright}{OT1}{`\'}%
+ \DeclareTextSymbol{\textquoteright}{T1}{`\'}%
+}{}
+\@ifundefined{quotesinglbase}{%
+ \DeclareTextSymbol{\quotesinglbase}{T1}{13}}{}
+\@ifundefined{quotedblbase}{%
+ \DeclareTextSymbol{\quotedblbase}{T1}{18}}{}
+\@ifundefined{guillemotleft}{%
+ \DeclareTextSymbol{\guillemotleft}{T1}{19}}{}
+\@ifundefined{guillemotright}{%
+ \DeclareTextSymbol{\guillemotright}{T1}{20}}{}
+\@ifundefined{guilsinglleft}{%
+ \DeclareTextSymbol{\guilsinglleft}{T1}{14}}{}
+\@ifundefined{guilsinglright}{%
+ \DeclareTextSymbol{\guilsinglright}{T1}{15}}{}
+\fi
+\expandafter\let\expandafter\protect\csname protect\endcsname
+\def\allowhyphens{\penalty\@M \hskip\z@skip}
+\lccode`\^^Y=`\^^Y
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
+ \setbox\z@\hbox{\dimen@\ht\z@ \advance\dimen@ -\ht\tw@
+ \lower\dimen@\box\z@}%
+ \ht\z@\ht\tw@ \dp\z@\dp\tw@}
+\def\save@sf@q#1{{\ifhmode
+ \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode #1\@SF}}
+\expandafter\ifx\csname grmnU@D\endcsname\relax
+ \csname newdimen\endcsname\grmnU@D
+\fi
+\def\newumlaut#1{{\grmnU@D 1ex%
+ {\setbox\z@\hbox{\char127}\dimen@-.45ex\advance\dimen@\ht\z@
+ \ifdim 1ex<\dimen@ \fontdimen5\font\dimen@ \fi}%
+ \accent127\fontdimen5\font\grmnU@D #1}\allowhyphens}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def\highumlaut#1{{\accent127 #1}\allowhyphens}
+\else
+ \def\highumlaut#1{\"{#1}\allowhyphens}
+\fi
+\def\mdqon{\catcode`\"\active}
+\def\mdqoff{\catcode`\"12\relax}
+\begingroup \mdqoff
+\def\x{\endgroup
+ \def\@MATHUMLAUT{\ddot}% = \mathaccent"707F
+ \def\@MATHss{\mathord{\mathchar"7019}}% TODO: correct?
+ \def\dq{"}}% TODO: or \textquotedbl?
+\x
+\begingroup
+ \def\do{\noexpand\do\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\dospecials{\dospecials\do\"}}%
+\x
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \begingroup
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\@sanitize{\@sanitize\@makeother\"}}%
+ \x
+\fi
+\let\grmn@original@three=\3 % \3 may be defined or undefined.
+\def\ck{\penalty\@M\discretionary{k-}{}{c}k\allowhyphens}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\expandafter\def\csname glqq \endcsname{%
+ \save@sf@q{\set@low@box{''\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glqq{\noexpand\protect
+ \expandafter\noexpand\csname glqq \endcsname}
+\let\@glqq=\glqq
+\expandafter\def\csname grqq \endcsname{%
+ \save@sf@q{\kern-.07em``\kern.07em}}% ('')
+\edef\grqq{\noexpand\protect
+ \expandafter\noexpand\csname grqq \endcsname}
+\let\@grqq=\grqq
+\expandafter\def\csname glq \endcsname{%
+ \save@sf@q{\set@low@box{'\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glq{\noexpand\protect
+ \expandafter\noexpand\csname glq \endcsname}
+\let\@glq=\glq
+\expandafter\def\csname grq\endcsname{%
+ \save@sf@q{\kern-.0125em`\kern.07em}}
+\edef\grq{\noexpand\protect
+ \expandafter\noexpand\csname grq \endcsname}
+\let\@grq=\grq
+\expandafter\def\csname flqq \endcsname{%
+ \relax\ifmmode \mathrel{\ll}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\edef\flqq{\noexpand\protect
+ \expandafter\noexpand\csname flqq \endcsname}
+\let\@flqq=\flqq
+\expandafter\def\csname frqq \endcsname{%
+ \relax\ifmmode \mathrel{\gg}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+\edef\frqq{\noexpand\protect
+ \expandafter\noexpand\csname frqq \endcsname}
+\let\@frqq=\frqq
+\expandafter\def\csname flq \endcsname{%
+ \relax\ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\edef\flq{\noexpand\protect
+ \expandafter\noexpand\csname flq \endcsname}
+\let\@flq=\flq
+\expandafter\def\csname frq \endcsname{%
+ \relax\ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+\edef\frq{\noexpand\protect
+ \expandafter\noexpand\csname frq \endcsname}
+\let\@frq=\frq
+\else
+\DeclareRobustCommand{\glqq}{%
+ \ifmmode\hbox{\quotedblbase}\else\quotedblbase\fi}
+\ProvideTextCommandDefault{\quotedblbase}{%
+ \UseTextSymbol{OT1}\quotedblbase}
+\ProvideTextCommand{\quotedblbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquotedblright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+\ProvideTextCommand{\grqq}{T1}{\textquotedblleft}
+\ProvideTextCommand{\grqq}{OT1}{%
+ \save@sf@q{\kern-.07em%
+ \ifmmode\hbox{\textquotedblleft}\else\textquotedblleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grqq}{\UseTextSymbol{OT1}\grqq}
+\DeclareRobustCommand{\glq}{%
+ \ifmmode\hbox{\quotesinglbase}\else\quotesinglbase\fi}
+\ProvideTextCommandDefault{\quotesinglbase}{%
+ \UseTextSymbol{OT1}\quotesinglbase}
+\ProvideTextCommand{\quotesinglbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquoteright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+\ProvideTextCommand{\grq}{T1}{\textquoteleft}
+\ProvideTextCommand{\grq}{OT1}{%
+ \save@sf@q{\kern-.0125em%
+ \ifmmode\hbox{\textquoteleft}\else\textquoteleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grq}{\UseTextSymbol{OT1}\grq}
+\DeclareRobustCommand{\flqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotleft}}\else\guillemotleft\fi}
+\ProvideTextCommandDefault{\guillemotleft}{%
+ \UseTextSymbol{OT1}\guillemotleft}
+\ProvideTextCommand{\guillemotleft}{OT1}{%
+ \ifmmode \ll \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\DeclareRobustCommand{\frqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotright}}\else\guillemotright\fi}
+\ProvideTextCommandDefault{\guillemotright}{%
+ \UseTextSymbol{OT1}\guillemotright}
+\ProvideTextCommand{\guillemotright}{OT1}{%
+ \ifmmode \gg \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+\DeclareRobustCommand{\flq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglleft}}\else\guilsinglleft\fi}
+\ProvideTextCommandDefault{\guilsinglleft}{%
+ \UseTextSymbol{OT1}\guilsinglleft}
+\ProvideTextCommand{\guilsinglleft}{OT1}{%
+ \ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\DeclareRobustCommand{\frq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglright}}\else\guilsinglright\fi}
+\ProvideTextCommandDefault{\guilsinglright}{%
+ \UseTextSymbol{OT1}\guilsinglright}
+\ProvideTextCommand{\guilsinglright}{OT1}{%
+ \ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\def\umlauthigh{\def\"##1{{\accent127 ##1}}}
+\def\umlautlow{\def\"{\protect\newumlaut}}
+\else
+\def\umlauthigh{\def\grmn@OTumlaut##1{{\accent 127 ##1}}}
+\def\umlautlow{\def\grmn@OTumlaut{\protect\newumlaut}}
+\umlauthigh
+\DeclareTextAccent{\"}{T1}{4}
+\DeclareTextAccent{\"}{OT1}{127}
+\DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+\DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+\DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+\DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+\DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+\DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+\DeclareTextComposite{\"}{T1}{a}{228}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname AtBeginDocument\endcsname\relax \else
+ \AtBeginDocument{%
+ \DeclareTextAccent{\"}{T1}{4}% % from `ltpatch.tex'
+ \DeclareTextAccent{\"}{OT1}{127}% % from `ltpatch.tex'
+ % \DeclareTextCommand{\"}{OT1}{\newumlaut}% from `ltpatch.tex'
+ % % has to be removed
+ \DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+ \DeclareTextComposite{\"}{T1}{a}{228}% % from `ltpatch.tex'
+ }
+\fi
+\fi
+\def\dqwarninglevel#1{\chardef\grmn@dqwarninglevel=#1\relax}
+ \dqwarninglevel{1}
+\expandafter\ifx\csname on@line\endcsname\relax
+ \ifx\inputlineno\undefined \def\on@line{}%
+ \else
+ \ifnum\inputlineno<\z@ \def\on@line{}%
+ \else \def\on@line{ on input line \the\inputlineno}%
+\fi\fi\fi
+\def\grmn@dq@error#1{%
+ \errhelp{Use `` for a simple double quote character.}%
+ \errmessage{german: The command \dq\string#1 is undefined}}
+\def\grmn@dq@warning#1{%
+ \immediate\write\sixt@@n
+ {german: \dq\string#1 is possibly wrong\on@line.}}
+\def\grmn@dq@macro#1#2{%
+ \expandafter#1\csname @grmn@@\string #2dq\endcsname}
+\def\def@dqmacro#1#2#3{%
+ \grmn@dqredefcheck{#1}%
+ \grmn@dq@macro\def{#1}{{#2}{#3}}}
+\def\let@dqmacro#1#2{\begingroup
+ \grmn@dqredefcheck{#1}%
+ \edef\x{\endgroup \let
+ \grmn@dq@macro\noexpand{#1}\grmn@dq@macro\noexpand{#2}}%
+ \x}
+\def\grmn@dqredefcheck#1{}
+\def\@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\relax
+ \ifnum\grmn@dqwarninglevel>\z@ \grmn@dq@error{#1}\fi
+ \expandafter\grmn@@normal@dq
+ \else
+ \expandafter\grmn@@active@dq
+ \fi {#1}}
+\def\grmn@@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\noexpand
+ \expandafter\grmn@normal@dq
+ \else
+ \expandafter\grmn@@@active@dq
+ \fi {#1}}
+\def\grmn@@normal@dq#1{``#1}
+\def\grmn@normal@dq#1{\dq #1}
+\begingroup
+ \catcode`\(=1\lccode`\(=`\{\catcode`\{=12
+ \catcode`\)=2\lccode`\)=`\}\catcode`\}=12
+ \catcode`\ =11\relax% <= do not delete this and the
+\lowercase(\endgroup% <=== following percent characters!
+\def\grmn@@@active@dq#1(%
+\expandafter\grmn@@@@active@dq\expandafter{\string#1})%
+\def\grmn@@@@active@dq(%
+\ifx\protect\relax\else\ifx\protect\empty\else%
+\expandafter\expandafter\expandafter\protect%
+\fi\fi%
+\active@dq \dq@prtct )%
+\def\dq@prtct#1#(\@dq@prtct)%
+\def\@dq@prtct#1(\string\dq@prtct{\string#1})%
+\def\dq@prtct #1{#2}(\string\dq@prtct{\string#2})%
+\def\active@dq #1{#2}(\grmn@active@@dq(#2))%
+)%
+\def\active@dq#1#{\@active@dq}%
+\def\grmn@active@@dq#1{%
+ \csname grmn@dq\ifmmode second\else first\fi
+ \expandafter\expandafter\expandafter\expandafter
+ \grmn@dq@macro\endcsname{#1}}
+\grmn@dq@macro\let{0}=\noexpand
+\let@dqmacro{1}{0}\let@dqmacro{2}{0}\let@dqmacro{3}{0}
+\let@dqmacro{4}{0}\let@dqmacro{5}{0}\let@dqmacro{6}{0}
+\let@dqmacro{7}{0}\let@dqmacro{8}{0}\let@dqmacro{9}{0}
+\let@dqmacro{A}{0}\let@dqmacro{B}{0}\let@dqmacro{C}{0}
+\let@dqmacro{D}{0}\let@dqmacro{E}{0}\let@dqmacro{F}{0}
+\def@dqmacro{}{\dq{}}{\dq{}}
+\def@dqmacro{a}{\"a}{\@MATHUMLAUT a}
+\def@dqmacro{o}{\"o}{\@MATHUMLAUT o}
+\def@dqmacro{u}{\"u}{\@MATHUMLAUT u}
+\def@dqmacro{A}{\"A}{\@MATHUMLAUT A}
+\def@dqmacro{O}{\"O}{\@MATHUMLAUT O}
+\def@dqmacro{U}{\"U}{\@MATHUMLAUT U}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def@dqmacro{s}{\ss{}}{\@MATHss}
+\else
+ \def@dqmacro{s}{\ss}{\@MATHss}
+\fi
+\def@dqmacro{S}{\SS}{\SS}
+\let@dqmacro{z}{s}
+\def@dqmacro{Z}{SZ}{SZ}
+\def@dqmacro{e}{\highumlaut e}{\@MATHUMLAUT e}
+\def@dqmacro{E}{\highumlaut E}{\@MATHUMLAUT E}
+\def@dqmacro{i}{\highumlaut{\i}}{\@MATHUMLAUT\imath}
+\def@dqmacro{I}{\highumlaut I}{\@MATHUMLAUT I}
+\def@dqmacro{`}{\glqq}{\glqq}
+\def@dqmacro{'}{\grqq}{\grqq}
+\def@dqmacro{<}{\flqq}{\flqq}
+\def@dqmacro{>}{\frqq}{\frqq}
+\def@dqmacro{-}{\penalty\@M\-\allowhyphens}%
+ {\penalty\@M\-\allowhyphens}
+\def@dqmacro{|}{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \allowhyphens}{}
+\def@dqmacro{"}{\hskip\z@skip}{\hskip\z@skip}
+\def@dqmacro{~}{\leavevmode\hbox{-}}{-}
+\def@dqmacro{=}{\penalty\@M-\hskip\z@skip}%
+ {\penalty\@M-\hskip\z@skip}
+\def\grmn@dqdisc#1#2{\penalty\@M
+ \ifnum\grmn@dqwarninglevel>\@ne \grmn@dq@warning{#1}\fi
+ \discretionary{#2-}{}{#1}\allowhyphens}
+\def@dqmacro{c}{\grmn@dqdisc ck}{c}
+\def@dqmacro{C}{\grmn@dqdisc CK}{C}
+\def@dqmacro{l}{\grmn@dqdisc l{ll}}{l}
+\def@dqmacro{L}{\grmn@dqdisc L{LL}}{L}
+\def@dqmacro{m}{\grmn@dqdisc m{mm}}{m}
+\def@dqmacro{M}{\grmn@dqdisc M{MM}}{M}
+\def@dqmacro{n}{\grmn@dqdisc n{nn}}{n}
+\def@dqmacro{N}{\grmn@dqdisc N{NN}}{N}
+\def@dqmacro{p}{\grmn@dqdisc p{pp}}{p}
+\def@dqmacro{P}{\grmn@dqdisc P{PP}}{P}
+\def@dqmacro{r}{\grmn@dqdisc r{rr}}{r}
+\def@dqmacro{R}{\grmn@dqdisc R{RR}}{R}
+\def@dqmacro{t}{\grmn@dqdisc t{tt}}{t}
+\def@dqmacro{T}{\grmn@dqdisc T{TT}}{T}
+\def@dqmacro{F}{\grmn@dqdisc F{FF}}{F}
+\def@dqmacro{f}{\grmn@dqdiscff}{f}
+\def\grmn@dqdiscff{\penalty\@M
+ \ifnum\grmn@dqwarninglevel>\@ne \grmn@dq@warning f\fi
+ \afterassignment\grmn@dqinsertff \let\grmn@dqnextff= }
+\def\grmn@dqinsertff{%
+ \if f\grmn@dqnextff
+ \expandafter\grmn@dqfirst\else\expandafter\grmn@dqsecond\fi
+ {\relax\discretionary{ff-}{f}{ff}\allowhyphens}{f\grmn@dqnextff}}
+\let\grmn@dqnextff=f
+\def\grmn@dqredefcheck#1{%
+ \wlog{german: \grmn@dq@macro\ifx{#1}\relax \else re\fi
+ defining dq-command for `\string#1'\on@line.}}%
+\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}}
+\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}}%
+\def\extrasUSenglish{}
+\let\noextrasUSenglish=\extrasUSenglish
+\let\extrasenglish=\extrasUSenglish
+\let\noextrasenglish=\extrasenglish
+\def\extrasgerman{\frenchspacing \uchyph\@ne
+ \lefthyphenmin\tw@ \righthyphenmin\tw@}
+\def\noextrasgerman{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi
+ \uchyph\the\uchyph\relax
+ \lefthyphenmin\the\lefthyphenmin
+ \righthyphenmin\the\righthyphenmin}
+\let\extrasaustrian=\extrasgerman
+\let\noextrasaustrian=\noextrasgerman
+\def\extrasfrench{\frenchspacing}
+\def\noextrasfrench{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi}
+\@ifundefined{l@USenglish}{%
+ \@ifundefined{l@english}{\chardef\l@USenglish=255 }%
+ {\chardef\l@USenglish=\l@english}%
+ \wlog{german -- \string\language\space number for USenglish %
+ undefined, default \number\l@USenglish\space used.}%
+}{}
+\@ifundefined{l@english}{%
+ \chardef\l@english=\l@USenglish
+ \wlog{german -- \string\language\space number for UKenglish %
+ undefined, default \number\l@english\space used.}%
+}{}
+\@ifundefined{l@german}{%
+ \@ifundefined{l@austrian}{%
+ \chardef\l@german=255 %
+ \message{german -- \string\language\space number for German %
+ undefined, default \number\l@german\space used,}%
+ \message{german -- Please read \string"gerdoc.tex\string" how %
+ to install hyphenation patterns.}%
+ }{%
+ \chardef\l@german=\l@austrian
+ \wlog{german -- \string\language\space number for German %
+ undefined, default \number\l@german\space used.}%
+ }%
+}{}
+\@ifundefined{l@austrian}{%
+ \chardef\l@austrian=\l@german
+ \wlog{german -- \string\language\space number for Austrian %
+ undefined, default \number\l@austrian\space used.}%
+}{}
+\@ifundefined{l@french}{%
+ \chardef\l@french=255
+ \wlog{german -- \string\language\space number for French %
+ undefined, default \number\l@french\space used.}%
+}{}
+\def\grmn@originalTeX{}
+\def\languagename{}
+\expandafter\def\csname selectlanguage \endcsname#1{\relax
+ \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
+ \grmn@originalTeX
+ \edef\languagename{#1}%
+ \edef\grmn@originalTeX{\csname noextras#1\endcsname
+ \def\noexpand\grmn@originalTeX{}}%
+ \csname date#1\endcsname
+ \csname captions#1\endcsname
+ \csname extras#1\endcsname\relax
+ % Diese Zeile ist fuer `bibgerm' ...
+ \csname bibs#1\endcsname
+ % ... sie wird in spaeteren `german.sty'-Versionen nicht
+ % mehr vorhanden sein. Also nicht darauf verlassen!
+ \language \csname l@#1\endcsname\relax
+ \fi}
+\begingroup\catcode`\ =11\relax% <= do not delete this and the
+\toks0={\endgroup% <=== following percent characters!
+\def\selectlanguage#1{\protect\selectlanguage {%
+\ifnum\escapechar=\expandafter`\string#1\empty%
+\else\string#1\empty\fi}}}%
+\the\toks0\relax%
+\def\p@selectlanguage{\selectlanguage}
+\def\iflanguage#1{%
+ \ifx\csname l@#1\endcsname\relax
+ \expandafter\grmn@dqsecond
+ \else \ifnum\csname l@#1\endcsname=\language
+ \expandafter\expandafter\expandafter\grmn@dqfirst
+ \else
+ \expandafter\expandafter\expandafter\grmn@dqsecond
+ \fi\fi
+}
+\expandafter\ifx\csname language\endcsname\relax
+ \csname newcount\endcsname\language
+ \language=0 \fi
+\expandafter\ifx\csname lefthyphenmin\endcsname\relax
+ \csname newcount\endcsname\lefthyphenmin
+ \lefthyphenmin=2 \fi
+\expandafter\ifx\csname righthyphenmin\endcsname\relax
+ \csname newcount\endcsname\righthyphenmin
+ \righthyphenmin=3 \fi
+\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 \umlauthigh
+ \let\3\grmn@original@three
+ \selectlanguage{USenglish}}%
+ \def\germanTeX{\mdqon \let"\@active@dq \umlautlow
+ \let\grmn@original@three\3\let\3\ss
+ \selectlanguage{german}}}%
+\x
+\catcode`\@=\atcode % return to previous catcode
+\germanTeX
+\endinput
+%%
+%% End of file `german.sty'.
diff --git a/language/german/ngerman.sty b/language/german/ngerman.sty
new file mode 100644
index 0000000000..1fcdcb8da4
--- /dev/null
+++ b/language/german/ngerman.sty
@@ -0,0 +1,680 @@
+%%
+%% This is file `ngerman.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% german.dtx (with options: `new')
+%%
+%% This file is part of the `german' collection,
+%% providing German language support for
+%% plain TeX or LaTeX version 2e/2.09.
+%%
+%% ----------- Copyright (C) 1998, 1999 by B.Raichle ----------
+%% ------------------- All rights reserved. -------------------
+%% Maintained by Bernd Raichle (Uni Stuttgart),
+%% using ideas by H.Partl (TU Wien, Uni.f.Bodenkultur Wien)
+%% and many other people.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%%
+%%
+%% Error Reports (in case of UNCHANGED versions) should be sent to:
+%%
+%% Bernd Raichle <raichle@Informatik.Uni-Stuttgart.DE>
+%%
+\expandafter\ifx\csname ngrm\string @VersionNo\endcsname\relax
+\else
+ \ifnum\number\csname ngrm\string @VersionNo\endcsname<9806\relax
+ \else \ngermanTeX \expandafter\expandafter\expandafter\endinput
+ \fi\fi
+\expandafter\mathchardef\csname ngrm\string @VersionNo\endcsname
+=9806\relax % = v2.5e
+\message{v2.5e 1998-07-08}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
+ \ProvidesPackage{ngerman}[1998/07/08 v2.5e %
+ Support for writing german texts (br)]
+\fi
+\chardef\atcode=\catcode`\@
+\catcode`\@=11 % \makeatletter
+\expandafter\ifx\csname @ifundefined\endcsname\relax
+ \def\@ifundefined#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\grmn@dqfirst\else\expandafter\grmn@dqsecond\fi}
+\fi
+\def\grmn@dqfirst#1#2{#1}
+\def\grmn@dqsecond#1#2{#2}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\@ifundefined{SS}{\def\SS{SS}}{}
+\else
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname ProvideTextCommandDefault\endcsname\relax
+ \immediate\write17{}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{%
+!! Dies ist eine zu alte LaTeX2e-Version, die nicht}
+ \immediate\write17{%
+!! alle fuer german/ngerman notwendigen Deklarationen}
+ \immediate\write17{%
+!! zur Verfuegung stellt. Dennoch koennen Sie diese}
+ \immediate\write17{%
+!! Pakete, eventuell mit kleinen Fehlern, verwenden.}
+ \immediate\write17{!!}
+ \immediate\write17{%
+!! Bitte installieren Sie eine neuere LaTeX2e-Version,}
+ \immediate\write17{%
+!! da zukuenftige Versionen der Pakete diese}
+ \immediate\write17{%
+!! LaTeX2e-Version nicht mehr unterstuetzen werden!}
+ \immediate\write17{%
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
+ \immediate\write17{}
+\fi
+\@ifundefined{UseTextSymbol}{%
+ \def\UseTextSymbol#1#2{{\fontencoding{#1}\selectfont #2}}
+}{}
+\@ifundefined{UseTextAccent}{%
+ \def\UseTextAccent#1#2#3{%
+ {\let\@curr@enc\f@encoding
+ \fontencoding{#1}\selectfont
+ #2{\fontencoding\@curr@enc\selectfont #3}}}%
+}{}
+\@ifundefined{ProvideTextCommand}{%
+ \def\ProvideTextCommand#1#2{%
+ %%% misses \RobustTextCommand{#1}{...etc.etc...}!!
+ \expandafter\providecommand\csname #2\string#1\endcsname}%
+}{}
+\@ifundefined{ProvideTextCommandDefault}{%
+ \def\ProvideTextCommandDefault#1{%
+ \ProvideTextCommand{#1}{U}}%
+}{}
+\@ifundefined{DeclareTextCompositeCommand}{%
+ \def\DeclareTextCompositeCommand#1#2#3#4{%
+ % define a `dummy' text composite
+ \DeclareTextComposite{#1}{#2}{#3}{`\Z}%
+ % then redefine this command including the new command
+ \expandafter\def\csname\expandafter\string\csname
+ #2\endcsname\string#1-\string#3\endcsname##1##2{#4}}%
+}{}
+\@ifundefined{OT1\string\ss}{%
+ \wlog{ngerman: Re-declaration of \string\ss\space for OT1!}%
+ \DeclareTextSymbol{\ss}{OT1}{25}}{}
+\@ifundefined{OT1\string\i}{%
+ \wlog{ngerman: Re-declaration of \string\i\space for OT1!}%
+ \DeclareTextSymbol{\i}{OT1}{16}}{}
+\ProvideTextCommandDefault{\"}{\UseTextAccent{OT1}{\"}}
+\ProvideTextCommandDefault{\ss}{\UseTextSymbol{OT1}\ss}
+\ProvideTextCommandDefault{\i}{\UseTextSymbol{OT1}\i}
+\ProvideTextCommandDefault{\SS}{SS}
+\@ifundefined{textquotedblleft}{%
+ \ProvideTextCommandDefault{\textquotedblleft}{%
+ \UseTextSymbol{OT1}\textquotedblleft}%
+ \DeclareTextSymbol{\textquotedblleft}{OT1}{92}%
+ \DeclareTextSymbol{\textquotedblleft}{T1}{16}%
+}{}
+\@ifundefined{textquotedblright}{%
+ \ProvideTextCommandDefault{\textquotedblright}{%
+ \UseTextSymbol{OT1}\textquotedblright}%
+ \DeclareTextSymbol{\textquotedblright}{OT1}{`\"}%
+ \DeclareTextSymbol{\textquotedblright}{T1}{17}%
+ %% \DeclareTextSymbol{\textquotedbl}{T1}{`\"}%
+}{}
+\@ifundefined{textquoteleft}{%
+ \ProvideTextCommandDefault{\textquoteleft}{%
+ \UseTextSymbol{OT1}\textquoteleft}%
+ \DeclareTextSymbol{\textquoteleft}{OT1}{`\`}%
+ \DeclareTextSymbol{\textquoteleft}{T1}{`\`}%
+}{}
+\@ifundefined{textquoteright}{%
+ \ProvideTextCommandDefault{\textquoteright}{%
+ \UseTextSymbol{OT1}\textquoteright}%
+ \DeclareTextSymbol{\textquoteright}{OT1}{`\'}%
+ \DeclareTextSymbol{\textquoteright}{T1}{`\'}%
+}{}
+\@ifundefined{quotesinglbase}{%
+ \DeclareTextSymbol{\quotesinglbase}{T1}{13}}{}
+\@ifundefined{quotedblbase}{%
+ \DeclareTextSymbol{\quotedblbase}{T1}{18}}{}
+\@ifundefined{guillemotleft}{%
+ \DeclareTextSymbol{\guillemotleft}{T1}{19}}{}
+\@ifundefined{guillemotright}{%
+ \DeclareTextSymbol{\guillemotright}{T1}{20}}{}
+\@ifundefined{guilsinglleft}{%
+ \DeclareTextSymbol{\guilsinglleft}{T1}{14}}{}
+\@ifundefined{guilsinglright}{%
+ \DeclareTextSymbol{\guilsinglright}{T1}{15}}{}
+\fi
+\expandafter\let\expandafter\protect\csname protect\endcsname
+\def\allowhyphens{\penalty\@M \hskip\z@skip}
+\lccode`\^^Y=`\^^Y
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
+ \setbox\z@\hbox{\dimen@\ht\z@ \advance\dimen@ -\ht\tw@
+ \lower\dimen@\box\z@}%
+ \ht\z@\ht\tw@ \dp\z@\dp\tw@}
+\def\save@sf@q#1{{\ifhmode
+ \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode #1\@SF}}
+\expandafter\ifx\csname grmnU@D\endcsname\relax
+ \csname newdimen\endcsname\grmnU@D
+\fi
+\def\newumlaut#1{{\grmnU@D 1ex%
+ {\setbox\z@\hbox{\char127}\dimen@-.45ex\advance\dimen@\ht\z@
+ \ifdim 1ex<\dimen@ \fontdimen5\font\dimen@ \fi}%
+ \accent127\fontdimen5\font\grmnU@D #1}\allowhyphens}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def\highumlaut#1{{\accent127 #1}\allowhyphens}
+\else
+ \def\highumlaut#1{\"{#1}\allowhyphens}
+\fi
+\def\mdqon{\catcode`\"\active}
+\def\mdqoff{\catcode`\"12\relax}
+\begingroup \mdqoff
+\def\x{\endgroup
+ \def\@MATHUMLAUT{\ddot}% = \mathaccent"707F
+ \def\@MATHss{\mathord{\mathchar"7019}}% TODO: correct?
+ \def\dq{"}}% TODO: or \textquotedbl?
+\x
+\begingroup
+ \def\do{\noexpand\do\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\dospecials{\dospecials\do\"}}%
+\x
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \begingroup
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\@sanitize{\@sanitize\@makeother\"}}%
+ \x
+\fi
+\let\grmn@original@three=\3 % \3 may be defined or undefined.
+\def\ck{%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\string\ck}{ck}%
+ \fi
+ \penalty\@M\-\allowhyphens ck}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\expandafter\def\csname glqq \endcsname{%
+ \save@sf@q{\set@low@box{''\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glqq{\noexpand\protect
+ \expandafter\noexpand\csname glqq \endcsname}
+\let\@glqq=\glqq
+\expandafter\def\csname grqq \endcsname{%
+ \save@sf@q{\kern-.07em``\kern.07em}}% ('')
+\edef\grqq{\noexpand\protect
+ \expandafter\noexpand\csname grqq \endcsname}
+\let\@grqq=\grqq
+\expandafter\def\csname glq \endcsname{%
+ \save@sf@q{\set@low@box{'\/}\box\z@\kern-.04em\allowhyphens}}
+\edef\glq{\noexpand\protect
+ \expandafter\noexpand\csname glq \endcsname}
+\let\@glq=\glq
+\expandafter\def\csname grq\endcsname{%
+ \save@sf@q{\kern-.0125em`\kern.07em}}
+\edef\grq{\noexpand\protect
+ \expandafter\noexpand\csname grq \endcsname}
+\let\@grq=\grq
+\expandafter\def\csname flqq \endcsname{%
+ \relax\ifmmode \mathrel{\ll}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\edef\flqq{\noexpand\protect
+ \expandafter\noexpand\csname flqq \endcsname}
+\let\@flqq=\flqq
+\expandafter\def\csname frqq \endcsname{%
+ \relax\ifmmode \mathrel{\gg}\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+\edef\frqq{\noexpand\protect
+ \expandafter\noexpand\csname frqq \endcsname}
+\let\@frqq=\frqq
+\expandafter\def\csname flq \endcsname{%
+ \relax\ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\edef\flq{\noexpand\protect
+ \expandafter\noexpand\csname flq \endcsname}
+\let\@flq=\flq
+\expandafter\def\csname frq \endcsname{%
+ \relax\ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+\edef\frq{\noexpand\protect
+ \expandafter\noexpand\csname frq \endcsname}
+\let\@frq=\frq
+\else
+\DeclareRobustCommand{\glqq}{%
+ \ifmmode\hbox{\quotedblbase}\else\quotedblbase\fi}
+\ProvideTextCommandDefault{\quotedblbase}{%
+ \UseTextSymbol{OT1}\quotedblbase}
+\ProvideTextCommand{\quotedblbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquotedblright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+\ProvideTextCommand{\grqq}{T1}{\textquotedblleft}
+\ProvideTextCommand{\grqq}{OT1}{%
+ \save@sf@q{\kern-.07em%
+ \ifmmode\hbox{\textquotedblleft}\else\textquotedblleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grqq}{\UseTextSymbol{OT1}\grqq}
+\DeclareRobustCommand{\glq}{%
+ \ifmmode\hbox{\quotesinglbase}\else\quotesinglbase\fi}
+\ProvideTextCommandDefault{\quotesinglbase}{%
+ \UseTextSymbol{OT1}\quotesinglbase}
+\ProvideTextCommand{\quotesinglbase}{OT1}{%
+ \save@sf@q{\set@low@box{\textquoteright\/}\box\z@
+ \kern-.04em\allowhyphens}}
+\ProvideTextCommand{\grq}{T1}{\textquoteleft}
+\ProvideTextCommand{\grq}{OT1}{%
+ \save@sf@q{\kern-.0125em%
+ \ifmmode\hbox{\textquoteleft}\else\textquoteleft\fi
+ \kern.07em\relax}}
+\ProvideTextCommandDefault{\grq}{\UseTextSymbol{OT1}\grq}
+\DeclareRobustCommand{\flqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotleft}}\else\guillemotleft\fi}
+\ProvideTextCommandDefault{\guillemotleft}{%
+ \UseTextSymbol{OT1}\guillemotleft}
+\ProvideTextCommand{\guillemotleft}{OT1}{%
+ \ifmmode \ll \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \ll $}%
+ \allowhyphens}\fi}
+\DeclareRobustCommand{\frqq}{%
+ \ifmmode\mathrel{\hbox{\guillemotright}}\else\guillemotright\fi}
+\ProvideTextCommandDefault{\guillemotright}{%
+ \UseTextSymbol{OT1}\guillemotright}
+\ProvideTextCommand{\guillemotright}{OT1}{%
+ \ifmmode \gg \else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle \gg $}%
+ \allowhyphens}\fi}
+\DeclareRobustCommand{\flq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglleft}}\else\guilsinglleft\fi}
+\ProvideTextCommandDefault{\guilsinglleft}{%
+ \UseTextSymbol{OT1}\guilsinglleft}
+\ProvideTextCommand{\guilsinglleft}{OT1}{%
+ \ifmmode <\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle <$}\allowhyphens}\fi}
+\DeclareRobustCommand{\frq}{%
+ \ifmmode\mathbin{\hbox{\guilsinglright}}\else\guilsinglright\fi}
+\ProvideTextCommandDefault{\guilsinglright}{%
+ \UseTextSymbol{OT1}\guilsinglright}
+\ProvideTextCommand{\guilsinglright}{OT1}{%
+ \ifmmode >\else \save@sf@q{\penalty\@M
+ \raise .27ex\hbox{$\m@th\scriptscriptstyle >$}\allowhyphens}\fi}
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+\def\umlauthigh{\def\"##1{{\accent127 ##1}}}
+\def\umlautlow{\def\"{\protect\newumlaut}}
+\else
+\def\umlauthigh{\def\grmn@OTumlaut##1{{\accent 127 ##1}}}
+\def\umlautlow{\def\grmn@OTumlaut{\protect\newumlaut}}
+\umlauthigh
+\DeclareTextAccent{\"}{T1}{4}
+\DeclareTextAccent{\"}{OT1}{127}
+\DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+\DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+\DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+\DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+\DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+\DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+\DeclareTextComposite{\"}{T1}{a}{228}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname AtBeginDocument\endcsname\relax \else
+ \AtBeginDocument{%
+ \DeclareTextAccent{\"}{T1}{4}% % from `ltpatch.tex'
+ \DeclareTextAccent{\"}{OT1}{127}% % from `ltpatch.tex'
+ % \DeclareTextCommand{\"}{OT1}{\newumlaut}% from `ltpatch.tex'
+ % % has to be removed
+ \DeclareTextCompositeCommand{\"}{OT1}{a}{\grmn@OTumlaut{a}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{o}{\grmn@OTumlaut{o}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{u}{\grmn@OTumlaut{u}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{A}{\grmn@OTumlaut{A}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{O}{\grmn@OTumlaut{O}}%
+ \DeclareTextCompositeCommand{\"}{OT1}{U}{\grmn@OTumlaut{U}}%
+ \DeclareTextComposite{\"}{T1}{a}{228}% % from `ltpatch.tex'
+ }
+\fi
+\fi
+\def\dqwarninglevel#1{\chardef\grmn@dqwarninglevel=#1\relax}
+ \dqwarninglevel{2}
+\expandafter\ifx\csname on@line\endcsname\relax
+ \ifx\inputlineno\undefined \def\on@line{}%
+ \else
+ \ifnum\inputlineno<\z@ \def\on@line{}%
+ \else \def\on@line{ on input line \the\inputlineno}%
+\fi\fi\fi
+\def\grmn@dq@error#1{%
+ \errhelp{Use `` for a simple double quote character.}%
+ \errmessage{ngerman: The command \dq\string#1 is undefined}}
+\def\grmn@dq@warning#1{%
+ \immediate\write\sixt@@n
+ {ngerman: \dq\string#1 is possibly wrong\on@line.}}
+\def\grmn@dq@warning@obsolete#1#2{%
+ \immediate\write\sixt@@n
+ {ngerman: #1 is now obsolete, please use #2 instead\on@line.}}
+\def\grmn@dqobsolete@three#1{#1#1%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\dq#1#1}{#1#1#1}%
+ \fi
+ \penalty\@M\-\allowhyphens}
+\def\grmn@dqobsolete@ck#1#2{%
+ \ifnum\grmn@dqwarninglevel>\@ne
+ \grmn@dq@warning@obsolete{\dq#1#2}{#1#2}%
+ \fi
+ \penalty\@M\-\allowhyphens#1}
+\def\grmn@dq@macro#1#2{%
+ \expandafter#1\csname @grmn@@\string #2dq\endcsname}
+\def\def@dqmacro#1#2#3{%
+ \grmn@dqredefcheck{#1}%
+ \grmn@dq@macro\def{#1}{{#2}{#3}}}
+\def\let@dqmacro#1#2{\begingroup
+ \grmn@dqredefcheck{#1}%
+ \edef\x{\endgroup \let
+ \grmn@dq@macro\noexpand{#1}\grmn@dq@macro\noexpand{#2}}%
+ \x}
+\def\grmn@dqredefcheck#1{}
+\def\@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\relax
+ \ifnum\grmn@dqwarninglevel>\z@ \grmn@dq@error{#1}\fi
+ \expandafter\grmn@@normal@dq
+ \else
+ \expandafter\grmn@@active@dq
+ \fi {#1}}
+\def\grmn@@active@dq#1{%
+ \grmn@dq@macro\ifx{#1}\noexpand
+ \expandafter\grmn@normal@dq
+ \else
+ \expandafter\grmn@@@active@dq
+ \fi {#1}}
+\def\grmn@@normal@dq#1{``#1}
+\def\grmn@normal@dq#1{\dq #1}
+\begingroup
+ \catcode`\(=1\lccode`\(=`\{\catcode`\{=12
+ \catcode`\)=2\lccode`\)=`\}\catcode`\}=12
+ \catcode`\ =11\relax% <= do not delete this and the
+\lowercase(\endgroup% <=== following percent characters!
+\def\grmn@@@active@dq#1(%
+\expandafter\grmn@@@@active@dq\expandafter{\string#1})%
+\def\grmn@@@@active@dq(%
+\ifx\protect\relax\else\ifx\protect\empty\else%
+\expandafter\expandafter\expandafter\protect%
+\fi\fi%
+\active@dq \dq@prtct )%
+\def\dq@prtct#1#(\@dq@prtct)%
+\def\@dq@prtct#1(\string\dq@prtct{\string#1})%
+\def\dq@prtct #1{#2}(\string\dq@prtct{\string#2})%
+\def\active@dq #1{#2}(\grmn@active@@dq(#2))%
+)%
+\def\active@dq#1#{\@active@dq}%
+\def\grmn@active@@dq#1{%
+ \csname grmn@dq\ifmmode second\else first\fi
+ \expandafter\expandafter\expandafter\expandafter
+ \grmn@dq@macro\endcsname{#1}}
+\grmn@dq@macro\let{0}=\noexpand
+\let@dqmacro{1}{0}\let@dqmacro{2}{0}\let@dqmacro{3}{0}
+\let@dqmacro{4}{0}\let@dqmacro{5}{0}\let@dqmacro{6}{0}
+\let@dqmacro{7}{0}\let@dqmacro{8}{0}\let@dqmacro{9}{0}
+\let@dqmacro{A}{0}\let@dqmacro{B}{0}\let@dqmacro{C}{0}
+\let@dqmacro{D}{0}\let@dqmacro{E}{0}\let@dqmacro{F}{0}
+\def@dqmacro{}{\dq{}}{\dq{}}
+\def@dqmacro{a}{\"a}{\@MATHUMLAUT a}
+\def@dqmacro{o}{\"o}{\@MATHUMLAUT o}
+\def@dqmacro{u}{\"u}{\@MATHUMLAUT u}
+\def@dqmacro{A}{\"A}{\@MATHUMLAUT A}
+\def@dqmacro{O}{\"O}{\@MATHUMLAUT O}
+\def@dqmacro{U}{\"U}{\@MATHUMLAUT U}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname DeclareTextSymbol\endcsname\relax
+ \def@dqmacro{s}{\ss{}}{\@MATHss}
+\else
+ \def@dqmacro{s}{\ss}{\@MATHss}
+\fi
+\def@dqmacro{S}{\SS}{\SS}
+\let@dqmacro{z}{s}
+\def@dqmacro{Z}{SZ}{SZ}
+\def@dqmacro{e}{\highumlaut e}{\@MATHUMLAUT e}
+\def@dqmacro{E}{\highumlaut E}{\@MATHUMLAUT E}
+\def@dqmacro{i}{\highumlaut{\i}}{\@MATHUMLAUT\imath}
+\def@dqmacro{I}{\highumlaut I}{\@MATHUMLAUT I}
+\def@dqmacro{`}{\glqq}{\glqq}
+\def@dqmacro{'}{\grqq}{\grqq}
+\def@dqmacro{<}{\flqq}{\flqq}
+\def@dqmacro{>}{\frqq}{\frqq}
+\def@dqmacro{-}{\penalty\@M\-\allowhyphens}%
+ {\penalty\@M\-\allowhyphens}
+\def@dqmacro{|}{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \allowhyphens}{}
+\def@dqmacro{"}{\hskip\z@skip}{\hskip\z@skip}
+\def@dqmacro{~}{\leavevmode\hbox{-}}{-}
+\def@dqmacro{=}{\penalty\@M-\hskip\z@skip}%
+ {\penalty\@M-\hskip\z@skip}
+\def@dqmacro{c}{\grmn@dqobsolete@ck ck}{c}
+\def@dqmacro{C}{\grmn@dqobsolete@ck CK}{C}
+\def@dqmacro{l}{\grmn@dqobsolete@three l}{l}
+\def@dqmacro{L}{\grmn@dqobsolete@three L}{L}
+\def@dqmacro{m}{\grmn@dqobsolete@three m}{m}
+\def@dqmacro{M}{\grmn@dqobsolete@three M}{M}
+\def@dqmacro{n}{\grmn@dqobsolete@three n}{n}
+\def@dqmacro{N}{\grmn@dqobsolete@three N}{N}
+\def@dqmacro{p}{\grmn@dqobsolete@three p}{p}
+\def@dqmacro{P}{\grmn@dqobsolete@three P}{P}
+\def@dqmacro{r}{\grmn@dqobsolete@three r}{r}
+\def@dqmacro{R}{\grmn@dqobsolete@three R}{R}
+\def@dqmacro{t}{\grmn@dqobsolete@three t}{t}
+\def@dqmacro{T}{\grmn@dqobsolete@three T}{T}
+\def@dqmacro{F}{\grmn@dqobsolete@three F}{F}
+\def@dqmacro{f}{\grmn@dqobsolete@three f}{f}
+\def\grmn@dqredefcheck#1{%
+ \wlog{ngerman: \grmn@dq@macro\ifx{#1}\relax \else re\fi
+ defining dq-command for `\string#1'\on@line.}}%
+\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}
+\def\datengerman{\def\today{\number\day.~\month@ngerman
+ \space\number\year}}
+\def\datenaustrian{\def\today{\number\day.~\ifnum 1=\month
+ J\"anner\else \month@ngerman\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}}
+\def\captionsngerman{%
+ \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\captionsnaustrian=\captionsngerman
+\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}}%
+\def\extrasUSenglish{}
+\let\noextrasUSenglish=\extrasUSenglish
+\let\extrasenglish=\extrasUSenglish
+\let\noextrasenglish=\extrasenglish
+\def\extrasngerman{\frenchspacing \uchyph\@ne
+ \lefthyphenmin\tw@ \righthyphenmin\tw@}
+\def\noextrasngerman{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi
+ \uchyph\the\uchyph\relax
+ \lefthyphenmin\the\lefthyphenmin
+ \righthyphenmin\the\righthyphenmin}
+\let\extrasnaustrian=\extrasngerman
+\let\noextrasnaustrian=\noextrasngerman
+\def\extrasfrench{\frenchspacing}
+\def\noextrasfrench{%
+ \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi}
+\@ifundefined{l@USenglish}{%
+ \@ifundefined{l@english}{\chardef\l@USenglish=255 }%
+ {\chardef\l@USenglish=\l@english}%
+ \wlog{ngerman -- \string\language\space number for USenglish %
+ undefined, default \number\l@USenglish\space used.}%
+}{}
+\@ifundefined{l@english}{%
+ \chardef\l@english=\l@USenglish
+ \wlog{ngerman -- \string\language\space number for UKenglish %
+ undefined, default \number\l@english\space used.}%
+}{}
+\@ifundefined{l@ngerman}{%
+ \@ifundefined{l@naustrian}{%
+ \chardef\l@ngerman=255 %
+ \message{ngerman -- \string\language\space number for ngerman %
+ undefined, default \number\l@ngerman\space used,}%
+ \message{ngerman -- Please read \string"gerdoc.tex\string" how %
+ to install hyphenation patterns.}%
+ }{%
+ \chardef\l@ngerman=\l@naustrian
+ \wlog{ngerman -- \string\language\space number for ngerman %
+ undefined, default \number\l@ngerman\space used.}%
+ }%
+}{}
+\@ifundefined{l@naustrian}{%
+ \chardef\l@naustrian=\l@ngerman
+ \wlog{ngerman -- \string\language\space number for naustrian %
+ undefined, default \number\l@naustrian\space used.}%
+}{}
+\@ifundefined{l@french}{%
+ \chardef\l@french=255
+ \wlog{ngerman -- \string\language\space number for French %
+ undefined, default \number\l@french\space used.}%
+}{}
+\def\grmn@originalTeX{}
+\def\languagename{}
+\expandafter\def\csname selectlanguage \endcsname#1{\relax
+ \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
+ \grmn@originalTeX
+ \edef\languagename{#1}%
+ \edef\grmn@originalTeX{\csname noextras#1\endcsname
+ \def\noexpand\grmn@originalTeX{}}%
+ \csname date#1\endcsname
+ \csname captions#1\endcsname
+ \csname extras#1\endcsname\relax
+ % Diese Zeile ist fuer `bibgerm' ...
+ \csname bibs#1\endcsname
+ % ... sie wird in spaeteren `german.sty'-Versionen nicht
+ % mehr vorhanden sein. Also nicht darauf verlassen!
+ \language \csname l@#1\endcsname\relax
+ \fi}
+\begingroup\catcode`\ =11\relax% <= do not delete this and the
+\toks0={\endgroup% <=== following percent characters!
+\def\selectlanguage#1{\protect\selectlanguage {%
+\ifnum\escapechar=\expandafter`\string#1\empty%
+\else\string#1\empty\fi}}}%
+\the\toks0\relax%
+\def\p@selectlanguage{\selectlanguage}
+\def\iflanguage#1{%
+ \ifx\csname l@#1\endcsname\relax
+ \expandafter\grmn@dqsecond
+ \else \ifnum\csname l@#1\endcsname=\language
+ \expandafter\expandafter\expandafter\grmn@dqfirst
+ \else
+ \expandafter\expandafter\expandafter\grmn@dqsecond
+ \fi\fi
+}
+\expandafter\ifx\csname language\endcsname\relax
+ \csname newcount\endcsname\language
+ \language=0 \fi
+\expandafter\ifx\csname lefthyphenmin\endcsname\relax
+ \csname newcount\endcsname\lefthyphenmin
+ \lefthyphenmin=2 \fi
+\expandafter\ifx\csname righthyphenmin\endcsname\relax
+ \csname newcount\endcsname\righthyphenmin
+ \righthyphenmin=3 \fi
+\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 \umlauthigh
+ \let\3\grmn@original@three
+ \selectlanguage{USenglish}}%
+ \def\ngermanTeX{\mdqon \let"\@active@dq \umlautlow
+ \let\grmn@original@three\3\let\3\ss
+ \selectlanguage{ngerman}}}%
+\x
+\catcode`\@=\atcode % return to previous catcode
+\ngermanTeX
+\endinput
+%%
+%% End of file `ngerman.sty'.