From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- language/german/00readme.1st | 160 +++ language/german/betatest/00readme.1st | 7 + language/german/gerdoc.dvi | Bin 0 -> 83260 bytes language/german/gerdoc.pdf | Bin 0 -> 207441 bytes language/german/gerdoc.tex | 1488 +++++++++++++++++++++ language/german/german.MISSING | 10 + language/german/german.dtx | 2331 +++++++++++++++++++++++++++++++++ language/german/german.ins | 84 ++ language/german/german.sty | 674 ++++++++++ language/german/ngerman.sty | 680 ++++++++++ 10 files changed, 5434 insertions(+) create mode 100644 language/german/00readme.1st create mode 100644 language/german/betatest/00readme.1st create mode 100644 language/german/gerdoc.dvi create mode 100644 language/german/gerdoc.pdf create mode 100644 language/german/gerdoc.tex create mode 100644 language/german/german.MISSING create mode 100644 language/german/german.dtx create mode 100644 language/german/german.ins create mode 100644 language/german/german.sty create mode 100644 language/german/ngerman.sty (limited to 'language/german') 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 +oder an + Koordinator German-Style + + + +!!! 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 + diff --git a/language/german/gerdoc.dvi b/language/german/gerdoc.dvi new file mode 100644 index 0000000000..014369c380 Binary files /dev/null and b/language/german/gerdoc.dvi differ diff --git a/language/german/gerdoc.pdf b/language/german/gerdoc.pdf new file mode 100644 index 0000000000..aed3da91da Binary files /dev/null and b/language/german/gerdoc.pdf 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 " 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> +\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> +% +% \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 || gekennzeichnete Codezeilen geh"oren zu +% "`german"', mit || 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} +%\expandafter\ifx\csname grmn\string @VersionNo\endcsname\relax +%\expandafter\ifx\csname ngrm\string @VersionNo\endcsname\relax +\else +% \ifnum\number\csname grmn\string @VersionNo\endcsname<9806\relax +% \ifnum\number\csname ngrm\string @VersionNo\endcsname<9806\relax +% \else \germanTeX \expandafter\expandafter\expandafter\endinput +% \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} +%\expandafter\mathchardef\csname grmn\string @VersionNo\endcsname +%\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 +% \ProvidesPackage{german}[1998/07/08 v2.5e % +% \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}{% +% \wlog{german: Re-declaration of \string\ss\space for OT1!}% +% \wlog{ngerman: 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!}% +% \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} +% +%<*new> +\def\ck{% + \ifnum\grmn@dqwarninglevel>\@ne + \grmn@dq@warning@obsolete{\string\ck}{ck}% + \fi + \penalty\@M\-\allowhyphens ck} +% +% \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} +% \dqwarninglevel{1} +% \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.}% +% \errmessage{german: The command \dq\string#1 is undefined}} +% \errmessage{ngerman: 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.}} +% {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.}} +% +% \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} +% +% \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} +% +% \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 +% +% \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} +% +% \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{% +% \wlog{german: \grmn@dq@macro\ifx{#1}\relax \else re\fi +% \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} +%\def\month@german{\ifcase\month \or +%\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\dategerman{\def\today{\number\day.~\month@german +%\def\datengerman{\def\today{\number\day.~\month@ngerman + \space\number\year}} +%\def\dateaustrian{\def\today{\number\day.~\ifnum 1=\month +%\def\datenaustrian{\def\today{\number\day.~\ifnum 1=\month +% J\"anner\else \month@german\fi \space\number\year}} +% 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} +%\def\captionsgerman{% +%\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\captionsaustrian=\captionsgerman +%\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} +%\def\extrasgerman{\frenchspacing \uchyph\@ne +%\def\extrasngerman{\frenchspacing \uchyph\@ne + \lefthyphenmin\tw@ \righthyphenmin\tw@} +%\def\noextrasgerman{% +%\def\noextrasngerman{% + \ifnum\sfcode`\.=\@m \else \noexpand\nonfrenchspacing \fi + \uchyph\the\uchyph\relax + \lefthyphenmin\the\lefthyphenmin + \righthyphenmin\the\righthyphenmin} +%\let\extrasaustrian=\extrasgerman +%\let\extrasnaustrian=\extrasngerman +%\let\noextrasaustrian=\noextrasgerman +%\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}% +% \wlog{german -- \string\language\space number for USenglish % +% \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 +% \wlog{german -- \string\language\space number for UKenglish % +% \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.}% + }% +}{} +% +%<*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.}% + }% +}{} +% +% \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.}% +}{} +% +%<*new> +\@ifundefined{l@naustrian}{% + \chardef\l@naustrian=\l@ngerman + \wlog{ngerman -- \string\language\space number for naustrian % + undefined, default \number\l@naustrian\space used.}% +}{} +% +% \end{macrocode} +% \begin{macrocode} +\@ifundefined{l@french}{% + \chardef\l@french=255 +% \wlog{german -- \string\language\space number for French % +% \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 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}}% +% \def\germanTeX{\mdqon \let"\@active@dq \umlautlow +% \def\ngermanTeX{\mdqon \let"\@active@dq \umlautlow + \let\grmn@original@three\3\let\3\ss +% \selectlanguage{german}}}% +% \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 +%\germanTeX +%\ngermanTeX +% \end{macrocode} +% +%\iffalse +% +% +%\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 + +\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 +%% +\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 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 +%% +\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 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'. -- cgit v1.2.3