summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx')
-rw-r--r--Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx715
1 files changed, 715 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx b/Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx
new file mode 100644
index 00000000000..2f722ac355c
--- /dev/null
+++ b/Master/texmf-dist/source/latex/gmdoc-enhance/gmdoc-enhance.dtx
@@ -0,0 +1,715 @@
+% \iffalse meta-comment
+%
+%<*package>
+%% (C) 2009 Paul Ebermann
+%%
+%% Package gmdoc-enhance - Verbesserungen für gmdoc.
+%%
+%% Die Datei gmdoc-enhance.dtx sowie die dazugehörige
+%% gmdoc-enhance.ins sowie die damit generierte
+%% gmdoc-enhance.sty stehen unter der
+%% "LaTeX Project Public License" (LPPL, zu finden
+%% unter http://www.latex-project.org/lppl/, sowie
+%% auch in den meisten TeX-Distributionen in
+%% texmf/docs/latex/base/lppl*.txt), Version 1.3b oder
+%% später (nach Wahl des Verwenders).
+%%
+%% Der 'maintenance-status' ist (zur Zeit) 'author-maintained'.
+%%
+%% Das heißt u.a., die Dateien dürfen frei vertrieben werden,
+%% bei Änderungen (durch andere Personen als Paul Ebermann)
+%% ist aber der Name der Datei zu ändern.
+%</package>
+% \fi
+%
+% \iffalse
+% ---------------------------------------------
+%<package>\NeedsTeXFormat{LaTeX2e}[2003/12/01]%
+% ----------------------------________________-----------------
+%<package>\ProvidesPackage{gmdoc-enhance}[2009/02/20 v0.2 Verbesserungen fuer gmdoc.]%
+% ----------------------------________________-----------------
+% \fi
+%
+% \iffalse
+% \fi
+%
+% \CheckSum{0}
+%
+% \GetFileInfo{gmdoc-enhance.sty}
+%
+%
+% \title{Das \pk{gmdoc-enhance}-Paket -- Verbesserungen für \pk{gmdoc}. \
+% \thanks{ Diese Dokumentation gehört zu \
+% \pk{gmdoc-enhance}~\fileversion, de~\filedate.}}
+% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% Dieses Package basiert auf \pk{gmdoc} von Grzegorz
+% \textquoteleft Natror\textquoteright
+% Murzynowski zur Dokumentation von \LaTeXpar-Paketen und fügt ein
+% paar weitere nützliche Funktionen hinzu, wie Markierung der
+% inline-Kommentare als solche auch in Folgezeilen, sichtbare
+% Kommentare (auskommentierter Code), und die Möglichkeit, andere
+% \LaTeX-Dateien im normalen Modus einzubinden (anstatt im
+% \pk{gmdoc}-Modus).
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Nutzer-Doku}
+%
+% ^^A etwas tricky ... wir wollen, dass beim
+% ^^A reinen LaTeX-Durchlauf der Beispiel-Abschnitt
+% ^^A übersprungen wird, also muss ein '\iffalse' da
+% ^^A stehen. Beim Doku-Lauf soll dieser Trick nicht
+% ^^A auftauchen, also können wir nicht den normalen
+% ^^A verbatim-Modus nehmen ... wir brauchen also ein
+% ^^A '\iffalse' drumrum. Jetzt wird aber auch das innere
+% ^^A '\iffalse' interpretiert, wodurch wir dahinter zwei
+% ^^A '\fi' brauchen. Am Ende des Beispiel-Abschnitts dann
+% ^^A entsprechend zwei '\iffalse'. (Hmm, und jetzt soll bitte
+% ^^A niemand versuchen, diesen '^^A'-Abschnitt hier mit '\iffalse'
+% ^^A auszukommentieren ...)
+% \iffalse
+%<*beispiel>
+\iffalse
+% \fi\fi
+%
+% Das Paket sollte -- wie üblich -- mit '\usepackage' geladen werden:
+% \begin{quote}
+% '\usepackage'\arg[optionen]'{gmdoc-enhance}'
+% \end{quote}
+% Es lädt selbst das \pk{gmdoc}-Paket, falls dieses nicht schon geladen
+% ist. Falls man Optionen an dieses übergeben will, sollte man es vorher
+% selbst laden. Ein vollständiges Beispiel gibt es in Abschnitt \ref{driver}.
+%
+% \subsection{Inline-Kommentare mit \%}
+% Diese Funktion erfordert (im Vergleich zum normalen \pk{gmdoc}) keine
+% Änderung der zu kommentierenden Datei
+% \normalInlineComments (nur das Aktivieren), sondern ändert nur das Aussehen.
+\beispiel\zeile% Bei \pk{gmdoc} kann jede Code-Zeile von
+% einem Inline-Kommentar gefolgt werden, der dann normal gesetzt
+% wird, mit hängendem Einzug. Zu diesem Inline-Kommentar gehören auch
+% direkt anschließende Kommentarzeilen. (Hier ein solches Beispiel.)
+%
+% Dieses Paket ändert das Aussehen eines solchen
+% \InlineCommentsWithPercent Absatzes:
+\beispiel\zeile% Jetzt wird der Inline-Kommentar mit etwas mehr Abstand
+% gesetzt, und das '%'-Zeichen grau (falls \pk{color} geladen wurde).
+% Wichtiger aber, in den Folge-Zeilen erscheint jeweils zu Beginn der
+% Zeile eine Kommentar-Markierung, so dass man ihn nicht mit einer
+% neuen Code-Zeile verwechseln kann.
+%
+%
+% Aktivieren kann man die Funktion mit \TextUsage{\InlineCommentsWithPercent},
+% welches ab der entsprechenden Stelle gilt (es wurde oben zwischen den beiden
+% Code-Zeilen im Beispiel verwendet.
+% Mit \TextUsage{\normalInlineComments} wird wieder auf den Normal-Modus
+% zurückgeschaltet.
+%
+% Global aktivieren kann man diesen Modus mit der Paket-Option
+% \TextUsage*{inline}.
+%
+% \subsection{Sichtbare Kommentare}
+%
+% Dieses Paket bietet die Möglichkeit, Teile des
+% Quelltextes auszukommentieren, und diese dann auch so zu setzen (anstatt
+% dass der auskommentierte Quelltext als Teil der Dokumentation aufgefasst
+% wird).
+% Dazu verwendet man im Quelltext:
+%\begin{verbatim}
+%%! \nicht\gebraucht% Und jetzt $e^{i\pi}=-1$.
+%\end{verbatim}
+% Dies ergibt etwas wie dies:
+%! \nicht\gebraucht% Und jetzt $e^{i\pi}=-1$.
+%
+% Dieser Modus hat zwei Parameter:
+% Mit \meta{marker} (ein einzelnes Zeichen, wahrscheinlich muss es
+% Kategorie \catother (other) haben) markiert man im Quelltext das
+% Auskommentieren, direkt nach dem '%'\footnote{oder ^^B
+% was auch immer gerade der durch \cs{CodeDelim} festgelegte ^^B
+% Markierer ist.}.
+% Der Defaultwert (und im obigen Beispiel verwendet) ist '!'.
+%
+% \meta{Farbe} ist ein Parameter (oder zwei) für
+% \TextUsage{\color}\footnote{ aus dem \pk{color}-Paket},
+% um eine farbliche Markierung des auskommentierten Codes zu aktivieren.
+% (Default ist keine farbliche Markierung.)
+%
+% Die Paket-Option \TextUsage*{visible} aktiviert den Modus und legt
+% \meta{Farbe} auf '{blue}' fest, was meine bevorzugte Einstellung ist.
+%
+% Falls diese Einstellungen nicht zusagen, kann man (statt oder zusätzlich zur
+% Option) die folgenden Makros verwenden:
+%
+% \TextUsage{\activateVisibleComments} aktiviert den Modus, ohne etwas an
+% \meta{marker} oder \meta{Farbe} zu ändern.
+%
+% \TextUsage{\setVisibleCommentChar}\arg{marker} legt \meta{marker} fest.
+%
+% \TextUsage{\setVisibleCommentColor}\meta{Farbe} legt \meta{Farbe} fest.
+% \meta{Farbe} ist entweder von der Form \arg[model]\arg{farbe} (für eine
+% Farbe in einem der von \pk{color} bereitgestellten Farbmodelle) oder
+% \arg{farbname} für einen der vordefinieren Farbnamen. Beides wird einfach
+% an der geeigneten Stelle an 'color' weitergegeben.
+%
+% Falls eine Farbe festgelegt wird, sollten auskommentierte Code-Stellen
+% unbedingt mit einem '%' (und eventuell einem inline-Kommentar danach) beendet
+% werden, weil die Farbmarkierung sich sonst fälschlicherweise in die
+% nächste Zeile fortsetzt, sogar inklusive der Zeilennummer:
+%
+%! \auskommentiert
+\nicht\auskommentiert
+%
+% Das ist offenbar nicht so gedacht, aber ich habe keinen (einfachen) Weg
+% gefunden, das abzuschalten.
+%
+% \subsection{Input im normalen Modus}
+%
+% Wenn man innerhalb eines \pk{gmdoc}-Dokumentes eine andere
+% Datei lädt, welche die normalen \LaTeX-Konventionen für '%' und Zeilenenden
+% verwendet, gibt es Chaos \dots
+%
+% \TextUsage{\normalInput}\arg{dateiname} stellt die üblichen
+% \LaTeX-Konventionen wieder her, lädt \meta{dateiname} (falls existent),
+% und stellt wieder auf den \pk{gmdoc}-Modus zurück.
+%
+% Dies ist etwa nützlich, falls man eine Beispiel-Datei einlesen möchte,
+% um deren Ausgabe zu zeigen.
+%
+% Die Datei wird innerhalb einer Gruppe geladen -- alle nicht-globalen
+% Zuweisungen darin gehen also verloren.
+%
+% ^^A ------------------------------
+%
+% \iffalse\iffalse
+\fi
+%</beispiel>
+% \fi
+%
+% \section{Der Doku-Treiber für dieses Paket}
+% \label{driver}
+%
+% Der Dokumentations-Treiber dient gleichzeitig als Beispiel für
+% die Anwendung (und die Ausgabe) dieses Paketes.
+%<*driver>
+% Die Dokumentenklasse, mit 'draft'-Option, um zu lange Zeilen
+% zu markieren. (Nicht als globale Option, weil sonst \pk{hyperref}
+% seine Arbeit verweigert.)
+\PassOptionsToClass{draft}{scrartcl}
+\documentclass[idxtotoc]{scrartcl}
+
+%
+% Die Standard-Pakete ...
+\usepackage[utf8x]{inputenc}
+\usepackage[ngerman]{babel}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+
+
+
+\let\orgshow\show% Irgendjemand oder etwas definiert '\show' um -- das ist
+% normalerweise ein \TeX-primitiv, und ich benutze es gelegentlich zum
+% Debuggen meiner Pakete. Daher machen wir uns eine Kopie davon.
+
+\usepackage[countalllines, withmarginpar, codespacesgrey]{gmdoc}% Wir laden
+% \pk{gmdoc} mit ein paar Optionen: es sollen alle Zeilen gezählt werden,
+% nicht nur Code-Linien (das heißt, man kann schnell die passende
+% Quelltext-Stelle finden), im Rand sollen verwendete Makros angezeigt
+% werden, und Leerzeichen im Code sollen grau markiert werden.
+\usepackage[visible, inline]{gmdoc-enhance}% unser eigenes Paket, mit allen
+% vorhandenen Optionen.
+\renewcommand*{\EOFMark}{}% Das Zeichen \meta{eof} am
+% Ende der Datei ist überflüssig, weg damit.
+
+
+%! \def\marginpartt{\normalfont\fontseries{lc}\ttfamily}% Abgeschrieben aus
+% \pk{gmdocc}, aber die Schrift ist bei mir offenbar nicht da. Schade.
+
+\RecordChanges% Wir wollen eine Liste der Änderungen generieren.
+\setcounter{IndexColumns}{2} % wir haben ein paar ziemlich lange Makronamen,
+% die in dreispaltigem Modus nicht passen.
+
+\begin{document}
+
+%! \catcode`\^=7% In einigen Sprachen wurde '^' von \pk{Babel} aktiviert,
+% was für die \pk{gmdoc}-Verwendung etwas störend ist, da wir es für '^^A'
+% und '^^B' benötigen. Also schalten wir es wieder auf die
+% Normalbedeutung (Superscript bzw. doppelt Escape) zurück. Für \pk{ngerman}
+% macht Babel das nicht, daher auskommentiert.
+
+ \MakeShortVerb*\'% Wir wollen \verb+'+ im Kommentar als
+ % verbatim-Markierungs-Zeichen verwenden, mit sichtbaren Leerzeichen.
+ \DocInput{\jobname.dtx}% Jetzt laden wir uns selbst im Doku-Modus.
+
+\end{document}
+%</driver>
+
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{Implementation}
+%
+%<*package>
+%
+% \subsection{Benötigte Pakete}
+%
+% Da dieses Paket \pk{gmdoc} erweitert, müssen wir natürlich sicherstellen,
+% das es geladen wurde. Zum übergeben von Optionen sollte man es aber vorher
+% selbst laden.
+\RequirePackage{gmdoc}[2008/10/04]%
+
+% \subsection[Schönere Inline-Kommentare]{Inline-Kommentare \
+% mit \%-Markierung in den Fortsetzungs-Zeilen}
+%
+%
+% Hier das Nutzer-Makro dieses Abschnittes.
+\newcommand*{\InlineCommentsWithPercent}{%
+ \let\gmde@org@ifilrr = \ifilrr% Wir merken uns dir Original-Einstellung
+% für Block- oder Flattersatz.
+ \ilrrtrue% Wir schalten auf Flatter- statt Blocksatz für die
+% Inline-Kommentare. Unsere aktiven Leerzeichen sind ja nicht variabel
+% in der Länge (wirklich?), und wir wollen auch keine Zeilenumbrüche
+% außerhalb von Leerzeichen (etwa durch Silbentrennung).
+ \let\gmd@percenthack\gmde@percenthack% Außerdem verwenden wir unsere
+% gepatchte Variante von '\gmd@percenthack'.
+}%
+%
+% Der Zurückschalter.
+\newcommand*{\normalInlineComments}{%
+ \let\ifilrr = \gmde@org@ifilrr% Wir setzen die Block/Flattersatz-Einstellung
+% zurück auf den Wert, der beim letzten '\InlineCommentsWithPercent' galt.
+ \let\gmd@percenthack \gmde@org@percenthack% Dies setzen wir auf aufs
+% Original zurück.
+}%
+%
+% Wir merken uns die Original-Version von '\gmd@percenthack', damit
+% wir wieder zurückschalten können.
+\let \gmde@org@percenthack = \gmd@percenthack%
+%
+% Das ist unsere Variante von '\gmd@percenthack'.
+\def\gmde@percenthack{%
+ \ifprevhmode%
+% Bis hier was es auch im Original schon so.
+ \aftergroup\gmde@specialSpaces% Diese Zeile ist neu -- wir schalten
+% um auf unsere neu definierten aktiven Leerzeichen.
+ \aftergroup\gmde@kommentarStart% Das Original war hier
+% '\code@delim\aftergroup~'.
+%
+% Der Rest ist wieder wie im Original.
+ \else%
+ \aftergroup\gmd@narrcheckifds@ne%
+ \fi%
+}%
+%
+%
+%
+
+% Zunächst ^^A \showthe\font
+% \the\hyphenchar\font
+% ^^A \expandafter\orgshow\csname gmde@hyphenreset\endcsname
+% besorgen wir uns ein aktives Leerzeichen. Dafür schalten
+% wir kurzfristig die Kategorie von ' ' um.
+\catcode`\ =\active%
+\def\gmde@activeSpace{ }%
+\catcode`\ =10%
+
+% '\gmde@specialSpaces' macht die Leerzeichen für den entsprechenden
+% Paragraphen aktiv und legt auch ihre Bedeutung fest.
+\def\gmde@specialSpaces{%
+ \catcode`\ =\active% Aktives Leerzeichen.
+ \@xa\let\gmde@activeSpace=\gmde@discrSpace% Und es soll die
+% (unten definierte) Leerzeichenfunktion aufrufen.
+ \exhyphenpenalty=0% Das setzt die Strafen für Umbrüche an diesen
+% Leerzeichen (und ähnlichen '\discretionary's mit leerem
+%"`Pre-break"'-Inhalt) auf 0.
+ \hyphenpenalty=1000% Dafür stellen wir die Strafen für normale
+% Silbentrennung hoch -- allerdings schalten wir auch den Bindestrich
+% ab, so dass das eigentlich irrelevant sein sollte. Es beeinflusst auch
+% andere '\discretionary's mit nichtleerem "`pre-break"'-Text, die
+% vielleicht irgendjemand verwendet.
+%
+ \let\@codetonarrskip\gmde@codetonarrskip% Wir sorgen dafür, dass mit
+% dem nächsten Paragraphen das alles wieder abgeschaltet wird --
+% '\gmde@codenarrskip' ruft (nach der normalen Aktion von '\@codetonarrskip')
+% '\gmde@normalSpaces' auf.
+%
+% Wir merken uns den alten '\hyphenchar', damit wir
+% ihn später zurücksetzen können.
+ \def\@tempa{gmde@hyphenchar-%
+ \@xa\string\the\font}% der Name für unsere zu definierende
+ % Kontrollsequenz. Er enthält den internen Namen der Schrift.
+ \@ifundefined{\@tempa}{%
+% Die Nummer des '\hyphenchar's merken wir uns jetzt in dieser
+% Kontrollsequenz.
+ \@xa\edef\csname \@tempa\endcsname{%
+ \the\hyphenchar\font }%
+ }{% Wenn wir es schon vorher definiert haben,
+% definieren wir es nicht noch einmal, denn dann ist jetzt vielleicht
+% schon der Code $-1$, wogegen der Original-Code (meist 45) noch dort
+% gespeichert ist.
+ }%
+ \edef\gmde@hyphenreset{%
+ \hyphenchar\font=%
+ \@xa\noexpand%
+ \csname \@tempa\endcsname%
+ }%
+% Und jetzt setzen wir für diesen Absatz den '\hyphenchar' der aktuellen
+% Schrift auf $-1$, um damit Trennungen an -, -- und --- sowie
+% Silbentrennungen auszuschließen.
+ \hyphenchar\font=-1 % Das ist
+% aber trotzdem noch ein Hack, denn
+% natürlich kann man \textsl{einfach -- zwischendurch -- in eine andere^^B
+% Schriftart -- das ist jetzt ein Beispiel mit Hyphenchar ^^B
+% \expandafter$\the\hyphenchar\font$ -- schalten}, die dann doch wieder einen
+% echten '\hyphenchar' hat. (Nachher wieder
+% \expandafter$\the\hyphenchar\font$.) Hmm,
+% bessere Vorschläge?
+}%
+
+% noch ein Vorgabewert für dieses Kommando ... es wird regelmäßig
+% neu definiert, aber eventuell wird es vor der ersten solchen Definition
+% noch geändert.
+\def\gmde@hyphenreset{}%
+
+% Das ist eine Sicherheitskopie von '\@codetonarrskip' aus \pk{gmdoc}.
+\let\gmde@org@codetonarrskip = \@codetonarrskip%
+%
+% Und jetzt unsere Variante, mit einem Aufruf der Rücksetzfunktion.
+\let\gmde@codetonarrskip = \@codetonarrskip
+\g@addto@macro\gmde@codetonarrskip{\gmde@normalSpaces}%
+%
+
+% Dieses Makro enthält eine Box, die am Start jeder Kommentarzeile
+% gesetzt wird.
+\def\gmde@kommentarStart{%
+% Hmm, wir könnten auch eine save-Box dafür reservieren,
+% anstatt es immer neu zu bauen ... aber so passt es sich wenigstens
+% an Änderungen des von '\code@delim' an.
+ \hbox{{%
+ \@ifpackageloaded{color}{\color{gray}}{}% Falls das \pk{color}-Paket
+% geladen ist, zeigen wir das '%'-Zeichen in grau statt dem normalen
+% schwarz. Damit sticht es nicht ganz so sehr ins Auge.
+ \ttfamily\code@delim\quad}}%
+}%
+
+
+%
+% Hier die Definition unseres merkwürdigen aktiven Leerzeichens.
+%
+% \dots Ein paar Zahlen: '\hyphenpenalty':
+% \expandafter$\the\hyphenpenalty$, '\exhyphenpenalty': \expandafter$\the\exhyphenpenalty$
+\def\gmde@discrSpace{%
+ \ifx\protect\@typeset@protect%
+ \ifinner%
+ \space% Wenn wir in einer inneren Box sind, soll das aktive
+% Leerzeichen wie ein normales Leerzeichen funktionieren, da es ja
+% hier sowieso keinen Zeilenumbruch gibt. Oder? Egal, unsere
+% Code-Kommentare sollten nie im inneren Modus auftauchen.
+ \else%
+ \ifhmode%
+ \unskip% Hmm, ich bin mir nicht ganz sicher, warum dieser
+% Befehl hier notwendig ist. Ohne gibt es jedenfalls gelegentlich
+% Zeilenumbrüche, die nicht an einen dieser '\discretionary's
+% fallen (und entsprechend kein '%' in der nächsten Zeile haben.)
+%
+ \discretionary{% Die "`Expansion"' dieses '\discretionary'-Objektes
+% falls es hier einen Zeilenumbruch gibt, ist am Ende der Zeile
+% leer.
+ }{\gmde@kommentarStart% Dafür taucht am Ende der vorherigen Zeile
+% die Box auf, die durch '\gmd@kommentarStart' gesetzt wird.
+ }{% Falls kein Umbruch an dieser Stelle erfolgte, ist es
+% ebenfalls leer.
+ }%
+ ~% Jetzt setzen wir noch ein nicht-umbrechbares Leerzeichen. Falls
+% es einen Umbruch gab, war der ja davor.
+ \else%
+ \space% Außerhalb des horizontalen Modus (d.h. im Mathe- und im
+% vertikalen Modus) hat unsere Spezialfunktion auch nichts
+% zu suchen.
+ \fi%
+ \fi%
+ \afterfi{%
+ \gmde@gobbleActiveSpaces}% Am Ende fressen wir alle weiteren
+% direkt folgenden derartigen aktiven Leerzeichen auf, damit es nicht
+% mehrere auf einmal gibt.
+%
+% Eigentlich sorgt das obige '\unskip' ja schon dafür, dass mehrere
+% aufeinanderfolgende aktive Leerzeichen (die ja prinzipiell ein '~'
+% als skip einfügen), keine Probleme bereiten, nur das letzte bleibt übrig.
+% Damit ist das '\gmd@gobbleActiveSpaces' eigentlich nicht mehr
+% nötig. Aber wir entlasten damit den Zeilenumbruch-Algorithmus
+% etwas, wenn nicht mehrere '\discretionary's hintereinander kommen.
+ \else%
+ \space% Falls wir nicht im Typeset-Modus sind, sondern etwa in eine Datei
+% oder auf den Bildschirm schreiben, soll unser ' ' auch wie ein normales
+% Leerzeichen wirken. Schließlich findet da kein Zeilenumbruch statt.
+ \fi%
+}%
+%
+% Hier die Definition unseres Space-Fressers.
+\def\gmde@gobbleActiveSpaces{%
+ \@xa\@ifnextchar\gmde@activeSpace% Wir überprüfen, ob das
+ % nächste Token ein aktives Leerzeichen ist.
+ {% Falls ja, \dots
+ \@xa\gmde@gobbleActiveSpaces\@gobble% entsorgen wir es
+ % mit '\@gobble' und rufen uns dann selbst rekursiv auf.
+ }{}% Im anderen Fall machen wir gar nichts, womit die Rekursion
+ % beendet ist.
+}%
+%
+% Dieses Makro setzt alles wieder aufs normale zurück.
+\def\gmde@normalSpaces{%
+ \gmde@hyphenreset% Wir rufen das Makro auf, welches den '\hyphenchar' auf
+% seinen Original-Wert zurücksetzt.
+ \exhyphenpenalty=50 \hyphenpenalty=50 % Die Strafen erhalten auch ihren normalen Wert.
+ \@xa\let\gmde@activeSpace = \space% Das aktive Leerzeichen wird ein normales,
+ \catcode`\ = 10% und Leerzeichen sind ab jetzt nicht mehr
+% aktiv.
+ \let\@codetonarrskip = \gmde@org@codetonarrskip% Wir setzen auch dieses
+% Makro auf seine Original-Bedeutung zurück.
+}%
+%
+
+%
+% \subsection{Auskommentierter Quelltext}
+%
+%
+% Aktiviert den Sichtbar-Kommentar-Modus.
+\newcommand*{\activateVisibleComments}{%
+ \let \gmd@narrcheckifds = \gmde@narrcheckifds%
+ \let \gmd@narrcheckifds@ne = \gmde@narrcheckifds@ne%
+ \let \gmd@eatlspace = \gmde@eatlspace%
+}
+%
+% Dieses Kommando legt das Zeichen zur sichtbaren Auskommentierung von
+% Quelltext fest.
+\newcommand*{\setVisibleCommentChar}[1]{%
+ \let \gmde@visibleCommentChar = #1%
+}%
+
+% Hier ein Default-Wert für das Kommentar-Markierungs-Zeichen.
+\setVisibleCommentChar{!}%
+
+%
+% Legt die Farbe, in der sichtbare Kommentare gesetzt
+% werden sollen, fest.
+%
+\newcommand*{\setVisibleCommentColor}{%
+% Wir unterscheiden, ob ein optionales Argument gegeben
+% wurde, und rufen entsprechend die passende Funktion auf.
+ \@ifnextchar[\gmde@setVCColor@Opt%
+ \gmde@setVCColor@%
+}%
+% Nur, falls \pk{color} geladen wurde, macht der Farbumschalter
+% etwas.
+\def\gmde@setVCColor@#1{%
+ \def\gmde@visibleCommentColor{\@ifpackageloaded{color}{\color{#1}}{}}%
+}%
+\def\gmde@setVCColor@Opt[#1]#2{%
+ \def\gmde@visibleCommentColor{\@ifpackageloaded{color}{\color[#1]{#2}}}%
+}%
+
+% Der Default-Wert ist leer, also ohne Farbwechsel.
+\let\gmde@visibleCommentColor\@empty
+
+% Wir machen eine Sicherheitskopie der Original-Version
+% von '\gmd@narrcheckifds'. Das ist ein Befehl, der nach
+% einem '%' überprüft, ob das nächste Zeichen ein '<' ist,
+% und dann eine Docstrip-Direktive setzt, andernfalls den
+% normalen Erzählungs-Modus startet. Es gibt zwei Varianten
+% davon, die mit '@ne' nimmt einen Parameter (der im
+% "`Nicht-'<'-Fall"' ausgeführt wird), die andere nicht.
+%
+% Die beiden Makros werden aufgerufen, nachdem ein '%' am Anfang
+% einer Zeile verarbeitet wurde - eines davon, wenn es vorher
+% eine Code-Zeile gab, das andere nach einer Kommentarzeile.
+\let\gmde@org@narrcheckifds = \gmd@narrcheckifds
+\let\gmde@org@narrcheckifds@ne = \gmd@narrcheckifds@ne
+
+% Eine neue Version von '\gmd@narrcheckifds'. Wir rufen einfach die Variante
+% mit Parameter auf, wobei wir '\ignorespaces' übergeben. (Das ist beim
+% Original ähnlich, allerdings dort einzeln analog implementiert.)
+\def\gmde@narrcheckifds{%
+ \gmde@narrcheckifds@ne{\ignorespaces}%
+}%
+% Die ein-Parameter-Version.
+\def\gmde@narrcheckifds@ne#1{%
+ \@ifnextchar\gmde@visibleCommentChar% Falls das nächste Zeichen
+% unser Kommentarzeichen ist,
+ \gmde@deactivatedCode% setzen wir den Rest als deaktivierten Code.
+ {\gmde@org@narrcheckifds@ne{#1}}% Ansonsten rufen wir den
+% Original-'<'-Test auf.
+}%
+
+
+% Das ist (zusammen mit dem nächsten Makro) der Kern von
+% '\gmd@codstripdirective', den wir hier brauchen.
+\def\gmde@deactivatedCode{%
+ \gmd@textEOL% Wir tun so, als wäre das eine neue Zeile.
+ \gmde@deactivatedcodePrefix% Das wird als erstes Token an '\gmd@textEOL'
+ % übergeben. Dadurch, dass es nur eines ist, wird es nicht als '%'
+ % erkannt, sondern (nachdem wieder in den Verbatim-Modus gewechselt wurde)
+ % ausgegeben.
+}
+%
+% Was machen wir mit deaktiviertem Code (am Zeilenanfang)?
+\def\gmde@deactivatedcodePrefix{%
+ \gmde@visibleCommentColor%
+ \code@delim% Zunächst geben wir ein '%'-Zeichen aus.
+ \@afternarrgfalse\@aftercodegtrue\@codeskipputgtrue% Diese boolean-Werte
+% setzen wir, damit \TeX nachher weiß, wo es ist.
+ \@firstoftwo% Und jetzt entsorgen wir das zweite
+% folgende Token -- das ist das '!'-Zeichen. Das erste ist wohl
+% irgendein Makro, welches wichtige Dinge anstellt - wenn wir das
+% auch entsorgen, hört die Code-Formatierung nicht am nächsten '%'
+% auf. Keine Ahnung, was das ist.
+}%
+
+%
+%
+% Hier eine leicht geänderte Version von '\gmd@eatlspace'.
+% ('%' und '!' bezeichnen im Kommentar nicht unbedingt das entsprechende
+% Zeichen, sondern das, was gerade als Code-Delimiter bzw.
+% Visible-Comment-Marker festgelegt wurde (mit '%' und '!'
+% als Default.)
+%
+\def\gmde@eatlspace#1{%
+ \ifx\gmd@texcodespace#1% Wenn das nächste Zeichen ein Leerzeichen, so \dots
+ \advance\gmd@ldspaceswd by \gmd@spacewd% erhöhen wir die Einrückung,
+% und \dots
+ \afteriffifi{\gmde@eatlspace}% \dots wiederholen das ganze.
+ \else%
+ \if\code@delim\@nx#1% Wenn das nächste Zeichen '%' ist \dots
+ \afterfifi{%
+ \@ifnextchar\gmde@visibleCommentChar{% \dots und das folgende Zeichen
+% ein '!', dann haben wir es mit einem sichtbaren Kommentar zu tun.
+ \let\gmd@charbychar=\gmde@charbychar% Wir merken uns also, dass
+ % dessen Präfix gezeigt werden muss, \dots
+ \gmd@typesettexcode% \dots und rufen die normale Code-Formatierungs-Funktion auf, wobei das '!' dabei weggeworfen wird.
+ }{%
+% Ist das folgende Zeichen kein '!', so geht jetzt der Kommentar
+% der letzten Zeile weiter (das kann entweder ein inline-Kommentar oder ein
+% normaler sein).
+ \gmd@ldspaceswd=\z@%
+ \gmd@continuenarration#1%
+ }%
+ }%
+ \else%
+ % Ist das nächste Zeichen weder ' ' noch '%', so fängt hier der
+ % Quelltext an.
+ \afterfifi{\gmd@typesettexcode#1}%
+ \fi%
+ \fi%
+}%
+
+% Noch eine Sicherheitskopie: '\gmd@charbychar' geht zeichenweise
+% durch den Code durch, mit Sonderbehandlung für '%', '\', das
+% Dateiende sowie ein Zeilenende.
+\let\gmde@org@charbychar\gmd@charbychar%
+
+% Unsere Variante davon, die gesetzt wird, wenn die Zeile
+% mit einem '%!' beginnt,
+\def\gmde@charbychar{%
+ \let\gmd@charbychar=\gmde@org@charbychar
+ \gmde@deactivatedcodePrefix
+ \gmd@charbychar%
+}%
+
+%
+% \subsubsection{Etwas Test-Code}
+%
+%<*test>
+
+bla
+%<text>bedingter Text % mit Kommentar.
+% mehr text % und Kommentar
+
+% Komentar
+%! das gleiche mit! % und Kommentar
+ %! das gleiche mit! % und Kommentar
+%! das gleiche mit! % und Kommentar
+%
+% Kommentar.
+%</test>
+
+
+% \subsection{Weitere Makros}
+
+
+ \AtBeginDocument{\QueerCharOne}% \pk{inputenc} mit \pk{utf8x} definiert
+% '^^A' um, so dass es Fehlermeldungen gibt. Also stellen wir die
+% \pk{gmdoc}-Variante wieder her.
+
+
+
+%
+% Dieses Makro liest eine Datei im normalen \LaTeX-Modus ein, ohne komische
+% EOL-Zeichen oder kaputte '%'.
+\newcommand*{\normalInput}[1]{%
+ % Wir packen alles in eine Gruppe, dann ist das Wiederherstellen der
+ % Einstellungen nicht so schwer.
+ \begin{StraightEOL}%
+ \gmde@normalSpaces%
+ \catcode`\%=14%
+ \InputIfFileExists{#1}{}{}%
+ \end{StraightEOL}%
+}%
+%
+
+%
+% \subsection{Verbatim-docstrip-Modus}
+%
+% Es wurde wohl vergessen, diese Variable zu initialisieren.
+\let\gmd@docstripshook\@empty%
+%
+%<*test>
+% Hier ein Test dafür:
+%<<verbatim-modus
+Irgenwas hier
+%! auskommentiert % wirklich!
+Noch mehr Muell % Hört das hier auf?
+%
+%verbatim-modus
+%
+% Hmm, das alleine reicht aber noch nicht, denke ich. Eigentlich sollte
+% jetzt alles (bis zum erneuten auftauchen des Textes, der zwischen '<<' und
+% dem Zeilenende stand) wörtlich ausgegeben werden, ohne Formatierungen.
+%
+% Naja, das baue ich vielleicht in einer späteren Version ein.
+%</test>
+
+% \subsection{Optionen des Paketes}
+%
+% Die Optionen rufen einfach die passenden Deklarationen auf.
+%
+\DeclareOption{visible}{%
+ \setVisibleCommentColor{blue}%
+ \activateVisibleComments%
+}%
+%
+\DeclareOption{inline}{%
+ \InlineCommentsWithPercent%
+}%
+% Jetzt veraarbeiten wir alle Optionen in der Reihenfolge, in
+% der sie angegeben wurden. (Nicht, dass die Reihenfolge einen
+% Unterschied machen sollte ...)
+%
+\ProcessOptions*\relax%
+%
+% Und damit sind wir fertig.
+\endinput
+%</package>
+%
+% \Finale
+%\endinput
+
+
+%%% Folgendes ist nur für meinen Editor.
+%%%
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End: