% \iffalse metacomment%
%% Written by Lucas Wartenburger
%%
% This is a LaTeX2e package for handlung abbreviations. It is intended for use 
% in combination with jurabib and jurarsp-packages, so it might be 
% interesting primarily for papers about German law. Threrefore, the
% documentation will be in German.
%
% This material is copyrighted by Lucas Wartenburger. However, rights are granted
% according to version 2 of the GNU Public Licence (GPL). 
% This means in essence:
% - this file is freely distributable provided that it is not modified
% - it may be sold
% - it may be modified provided that the result is also placed under the GPL.
% (wherever these terms divert from the GPL, the latter shall prevail)
%
% Um eine Dokumentation zu erzeugen, lassen Sie einfach LaTeX2e "uber diese 
% Datei laufen.
% Wenn Sie das Package benutzen wollen, starten sie TeX mit der
% Datei juraabbrev.ins und legen sie die so erzeugten Dateien in ein Verzeichnis, 
% wo sie TeX sp"ater findet.
%
% \fi
%
% \CheckSum{588}
%% 
%% \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         \~}
%%
% \ProvidesFile{juraabbrev.dtx}[2004/09/15 v0.51 Documentation]
%
% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
% \DoNotIndex{\@flushglue,\@gobble,\@input}
% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
% \DoNotIndex{\mathcal,\csname,\def,\documentstyle,\dospecials,\edef}
% \DoNotIndex{\egroup}
% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
% \DoNotIndex{\ifcase}
% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
% \DoNotIndex{\strutbox}
% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
% \DoNotIndex{\nopagebreak}
% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
% \DoNotIndex{\[,\{,\},\]}
% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
% \DoNotIndex{\baselineskip,\begin,\tw@}
% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
% \DoNotIndex{\bfdefault}
% \DoNotIndex{\ifthenelse,\equal,\and,\or,\OR,\emph,\@for}
%
% \GetFileInfo{juraabbrev.dtx}
% \def\kennung{\meta{Kennung}}
% \def\jabb{\texttt{juraabbrev}}
% \title{Die Dokumentklasse \jabb
% \thanks{Version \fileversion}}
% \author{Lucas Wartenburger}
% \date{\filedate}
% \maketitle
% \pagebreak[2]
% \begin{abstract}
% In (rechts-)wissenschaftlichen Dokumenten muss häufig ein Abkürzungsverzeichnis erstellt werden.
% Dabei ist darauf zu achten, dass alle verwendeten Abkürzungen, aber auch nur diese, in das
% Verzeichnis aufgenommen werden. Dies wird durch das vorliegende Paket erleichtert. 
% Die Abkürzung kann an einer Stelle des Dokumentes (oder besser: zentral in einer wiederverwendbaren Datei) definiert und sodann überall verwendet werden.
% Dieses Paket unterstützt dabei in erster Linie solche Funktionen, die für deutsche juristische
% Texte hilfreich sein könnten.\footnote{Es kann aber durchaus auch in anderen Texten genutzt werden. Das statement oben habe ich an sich nur eingefügt, damit es keinen Grund gibt, die ganze Doku auf Englisch zu übersetzen.}
% \end{abstract}
%
% \tableofcontents
% 
% \section{Einführung}
% An sich ließe sich ein Abkürzungsverzeichnis auch mittels der Verwendung von \texttt{index.sty} 
% oder ähnlicher Pakete erstellen. Ein solches Verzeichnis wäre sogar (dank \texttt{makeindex}) automatisch
% sortiert -- eine Arbeit, die man im vorliegenden Paket selbst übernehmen muss. 
% Der Aufruf der index-Kommandos ist jedoch relativ umständlich; ferner muss extra \texttt{makeindex}
% gestartet werden. 
%
% Das vorliegende Paket hat den Vorteil, dass jede definierte Abkürzung in drei Formen verwendet
% werden kann: als Abkürzung, als Langform oder in einem Befehl, der abhängig von der jeweiligen
% Umgebung entweder die Lang- oder die Kurzform erzeugt. Außerdem kümmert sich das Paket darum, dass der Zwischenraum nach der Abkürzung den Konventionen entspricht und erspart es dem Anwender dadurch, sich hin und wieder auf \TeX-Niveau zu begeben.
%
% Wer schon die Vorversion benutzt hat, wird überrascht sein. Nicht nur der Name hat sich geändert, sondern auch sonst fast alles (v.a. hinter den Kulissen). Aber auch einige Befehle funktionieren nicht mehr. Dafür geht die Neufassung besser mit den Ressourcen um und ist wesentlich flexibler.
% Neu ist die Unterstützung von \texttt{hyperref} und \TeX4ht.
%
% \section{Vorbereitung}
% \subsection{Installation}
% Um die erforderlichen Dateien zu erzeugen, muss \TeX{} mit dem Aufruf
% \begin{quote}
% |tex juraabbrev.ins| 
% \end{quote}
% gestartet werden. Die Datei |juraabbrev.sty|
% muss so abgelegt werden, dass \LaTeX{} sie später findet. 
% Die Dateien |abbrevtest.tex| sowie |laws.ist| dienen als Beispiel.
%
% \subsection{Einbindung des Paketes}
% Um \jabb\ zu verwenden, genügt eine Einbindung in den header des Dokuments 
% \begin{quote}
% |\usepackage{juraabbrev}|
% \end{quote}
% Wenn ein Gesetzesverzeichnis erstellt werden soll, muss die Datei |index.sty| 
% \emph{vor} \jabb\ eingebunden werden. 
% \section{Erstellen eines Abkürzungsverzeichnisses}
% \subsection{Definieren von Abkürzungen}
% Abkürzungen werden dort definiert, wo später im Text das Abkürzungsverzeichnis 
% erscheinen soll. 
% \DescribeEnv{abbreviations}
% Die Definitionen müssen sich in der Umgebung \texttt{abbreviations} befinden.\footnote{Wer die nicht gebrauchen kann, kann sie auch weglassen. Es müssen dann aber die Maßeinheiten leftsize, middistance und rightsize definiert werden.} 
% In der Umgebung \texttt{abbreviations} wird das Verzeichnis zweispaltig dargestellt.
% \DescribeMacro{\abbrevname} 
% Der Titel des Abkürzungsverzeichnisses wird durch den Befehl |\abbrevname| definiert. 
% Damit können -- soweit das sinnvoll ist -- auch mehrere Verzeichnisse erstellt 
% werden, etwa so:
% \begin{verbatim}
% \begin{abbreviations}
%   \abbrev{bgb}{BGB}{Bürgerliches Gesetzbuch} 
%   \abbrev{estg}{EStG}{Einkommensteuergesetz} 
%   [...]
% \end{abbreviations}
% \renewcommand{\abbrevname}{Abgekürzt zitierte Literatur}
% \begin{abbreviations}
%   \abbrev{hhr}{HHR}{Herrmann/Heuer/Raupach} 
%   \abbrev{tl}{TL}{Tipke/Lang} 
% \end{abbreviations}
% \end{verbatim}
% Das Ergebnis würde dann so aussehen (vorausgesetzt,
% alle Abkürzungen werden irgendwo in der Kurzform verwendet):
%
% \begin{abbreviations}
%   \abbrev*{bgb}{BGB}{Bürgerliches Gesetzbuch} 
%   \abbrev*{estg}{EStG}{Einkommensteuergesetz} 
%	  \abbrev{zb}{z.B.}{zum Beispiel}
%   \abbrev{ca}{ca.}{circa}
%   \abbrev{aao}{a.a.O.}{am angegebenen Ort}
% \end{abbreviations}
%
% \renewcommand{\abbrevname}{Abgekürzt zitierte Literatur}
%
% \begin{abbreviations}
%   \abbrev*{hhr}{HHR}{Herrmann/Heuer/Raupach} 
%   \abbrev*{tl}{TL}{Tipke/Lang} 
% \end{abbreviations}
% \bigskip
%
% Für die weitere Verwendung der Abkürzung spielt es dann keine Rolle, in welchem Verzeichnis diese stehen. 
%
% \DescribeMacro{\abbrev}
% Die Definition einer Abkürzung erfolgt über den Befehl |\abbrev|.
% |\abbrev| hat folgenden Syntax:
% \begin{quote}
% | \abbrev{|\kennung|}{|\meta{Kurzform}|}{|\meta{Langform}|}|
%
% z.B.: |\abbrev{dstr}{DStR}{Deutsches Steuerrecht}|
% \end{quote}
% \DescribeMacro{\abbrev*}
% Die *-Version des |\abbrev|-Befehls bewirkt, dass der Eintrag in jedem
% Fall im Abkürzungsverzeichnis erscheint. So könnte man etwa Abkürzungen definieren, die in jedem Fall zig-mal im Dokument vorkommen (S., ff.), ohne dass man sie ständig mit einem speziellen Befehl aufrufen möchte.
% Ansonsten erscheint die Erläuterung im Verzeichnis nur, wenn 
% die Abkürzung irgendwo im Dokument in der Kurzform verwendet wurde.
%
% \subsection{Verwenden von Abkürzungen}
% Auf die so definierten Abkürzungen kann man im Dokument (und zwar auch vor der 
% Stelle, an der das Verzeichnis steht) recht leicht zurückgegriffen werden. 
% Das Paket stellt dazu ein Kommand mit mehreren "`Erweiterungssymbolen"' zur Verfügung.
% \DescribeMacro{\abb\kennung}
% Der Befehl |\abb|\kennung\ erzeugt im Dokument die Kurzform der
% Abkürzung. 
% |\abbbgb| gibt also \abbbgb zurück. Das Paket unterstützt auch \texttt{hyperref}. In einer PDF-Datei kann man dann per Mausklick von der Abkürzung zur Erläuterung im Abkürzungsverzeichnis gelangen. 
% 
% Nur wenn der |\abb|\kennung-Befehl mindestens einmal im Dokument verwendet wird, erscheint die Abkürzung (nach dem übernächsten
% \LaTeX-Lauf) zwingend im Abkürzungsverzeichnis. Den Aufruf einer im vorherigen 
% \LaTeX-Lauf noch nicht definierten Abkürzung quittiert \TeX{} mit einer Fehlermeldung,
% da der |\abb|-Befehl dann schlicht ein unbekanntes Kommando darstellt (zu Umgehungsmöglichkeiten siehe sogleich).
%
% \DescribeMacro{\abb\kennung+}
% Der Befehl |\abb|\kennung+ erzeugt entsprechend die Langform der
% Abkürzung. Er ersetzt den früheren Befehl |\labb|\kennung! 
% |\abbbgb+| erzeugt also: \abbbgb+. In diesem Fall wird die Abkürzung nicht ins 
% Verzeichnis aufgenommen (sie wurde ja auch nicht verwendet). Man kann so also "`inoffizielle"'
% Abkürzungen im Dokument verwenden, um sich bei komplizierten Begriffen nicht zu 
% vertippen. (Um die Flexion muss man sich aber selbst kümmern! Vielleicht lernt \jabb\ das später auch noch.)
% 
% \DescribeMacro{\abb\kennung*}
% Der Befehl |\abb|\kennung* fungiert als Mischform zwischen den beiden 
% anderen. Er ersetzt den früheren Befehl |\babb|\kennung!
% Der *-Befehl gibt normalerweise die Kurzform zurück, innerhalb einer |longabbreviations|-Umgebung
% \DescribeEnv{longabbreviations}
% jedoch die Langform. Zu Einsatzmöglichkeiten siehe sogleich.
% \begin{verbatim}
% Mal kurz: \abbbgb*.
% Mal lang: \begin{longabbreviations}\abbbgb*.\end{longabbreviations}
% \end{verbatim}
% erzeugt also:
% \begin{quote}
% Mal kurz: \abbbgb*.
%
% Mal lang: \begin{longabbreviations}\abbbgb*.\end{longabbreviations}
% \end{quote}
% Ein Eintrag im Abkürzungsverzeichnis wird nur dann erstellt, wenn 
%
% |\abb|\kennung* zumindest einmal
% die Kurzform erzeugt hat. 
%
% \DescribeMacro{\abb\kennung<}
% Gelegentlich kommt es vor, dass eine Abkürzung mit einem kleinen Buchstaben beginnt (etwa "`vgl."'). Wenn eine solche Abkürzung am Satzanfang steht, soll sie natürlich mit einem Großbuchstaben beginnen. Andererseits soll sie aber nicht doppelt im Verzeichnis erscheinen. 
% Abhilfe schafft hier der Befehl  |\abb|\kennung<
% Die Eingabe |\abbca<| erzeugt also: \abbca< (statt \abbca).
%
% \DescribeMacro{\abb}
% Die bisher genannten Befehle haben einen Nachteil: Wenn die Abkürzung erstmals verwendet 
% wird, entsteht eine hässliche \TeX-Fehlermeldung, da ein Makro aufgerufen wird, das \TeX\ noch nicht kennt. Wer sich davor fürchtet, kann anstelle von |\abbbgb| auch
% \verb*|\abb bgb |
% benutzen. Die Leerzeichen sind in diesem Fall wirklich wichtig! Wer also etwas wie NJW-Fundstelle schreiben will, muss eingeben: \verb*|\abb njw -Fundstelle|.
% Keine Angst, die Leerzeichen werden im Output ignoriert. 
% Falls die Abkürzung noch gar nicht definiert wurde oder erstmals verwendet wird, 
% bekommt man nun keine Fehlermeldung mehr, sondern nur eine Warnung \texttt{``Abbreviation `njw' undefined''}. 
% \DescribeMacro{\babb}
% \DescribeMacro{\labb}
% Die Befehle |\babb| und |\labb| funktionieren nach dem gleichen Schema, wobei |\babb| die *-Form erzeugt und |\labb| die +-Form (Langform).
%
% \subsection{Besonderheiten im Umgang mit Literatur}
% Für den |\babb|-Befehl gibt es an sich nur einen sinnvollen Einsatzbereich, nämlich
% die Literaturangaben. So kann man beispielsweise in eine \BibTeX-Datenbank 
% eintragen:
% \begin{quote}
% \texttt{...}
% |journal = {\abbnjw*},|
% \texttt{...}
% \end{quote}
% Das Literaturverzeichnis ließe sich dann in eine |longabbreviations| Umgebung einrahmen.
% Im Literaturverzeichnis würde dann erscheinen "`Neue Juristische Wochenschrift"', in einer 
% Fußnote dagegen "`NJW"'. Ein solches Vorgehen könnte sich v.a. bei ausländischen Zeitschriften
% empfehlen, damit der arme Leser nicht ein zwei verschiedenen Verzeichnissen nachschlagen 
% muss, wo er den zitierten Aufsatz finden kann. Daneben wird es aber auch im Literaturverzeichnis
% Abkürzungen geben, die man nicht ausschreiben lassen möchte (etwa Gesetzesbezeichnungen im
% Titel eines Aufsatzes, oder Kürzel von Rechtsformen). Diese könnte man dann durch Verwendung
% von |\abb|\kennung\ (ohne *) vor der Langform schützen. 
%
% \subsection{Abstand nach Abkürzungen}
% Dieser Abschnitt richtet sich nur an besonders Interessierte; man kann mit \jabb\ auch sehr gut ohne die Kenntnis der nachfolgend beschriebenen Details arbeiten. 
%
% Wer wirklich ein gutes Dokument erzeugen will, sollte auch auf die richte 
% Verteilung des "`glue"' im Text achten.\footnote{Sofern man mit \texttt{frenchspacing} arbeitet, ist dieser Aspekt ohnehin zu vernachlässigen.} Spezielle Probleme stellen sich hier dann, wenn die 
% Abkürzung mit einem Punkt endet (etwa "`z.B."'). Normalerweise würde \TeX\ diesen Fall so behandeln: Endet die Abkürzung mit einem Punkt nach einem Großbuchstaben (wie hier im Beispiel), wird dies nicht als Satzende angesehen und nur der normale "`interword-glue"' wird eingefügt. Endet die Abkürzung dagegen mit einem Kleinbuchstaben ("`etc."'), so geht \TeX\ davon aus, dass hier der Satz zu Ende ist. Der Abstand wird bei Bedarf weiter gedehnt (normalerweise mit dem Faktor 3). 
% Die Definition in \jabb\ sorgt dafür, dass der "`space factor"' am Ende der Abkürzung auf 1000 steht. Das hat folgende Konsequenzen: 
%
%\begin{itemize}
%	\item Hat die Abkürzung selbst \emph{keinen} Punkt und endet danach der Satz ("`So steht es im \abbbgb."'), dann wird der spacefactor durch den Punkt \emph{nach} der Abkürzung entsprechend den \TeX-Vorgaben hochgesetzt. Das im \TeX book (Ch. 12)  beschriebene Problem mit einem Satzende nach Großbuchstaben besteht nicht (man braucht also nicht zu schreiben |\abbbgb\null.|, sondern nur |\abbbgb.|\footnote{Abgesehen davon würde das mit dem \texttt{null} auch gar nicht funktionieren, es würde dann ein Leerzeichen vor dem Punkt entstehen.}
%
%	\item Endet die Abkürzung mit einem Punkt, dann geht stellt \jabb\ den "`space factor"' so ein, dass \TeX\ hier nicht von einem Satzende ausgeht.
%
%	\item \DescribeMacro{\abb\kennung>} Schwierig wird es nur dann, wenn die Abkürzung mit einem Punkt endet und dort tatsächlich auch der Satz zu Ende sein soll. (Bei "`etc."' oder "`usw."' könnte das mal vorkommen.) Hier versteht \TeX\ nicht, dass ein Satz zu Ende ist, denn man wird ja nach der Abkürzung nicht noch einen Punkt setzen. Abhilfe schafft der Befehl |\abb|\kennung> also z.B. \verb*|\abbaao>| 
%
% \end{itemize}
%
% Das war jetzt viel Theorie. Die Effekte sollen anhand der folgenden Beispielen kurz dargestellt werden. In den nachfolgenden Beispielen wurde jeweils die Zeile "`a)"' normal eingegeben, bei Zeile "`b)"' wurde \jabb\ verwendet. Die Texte werden anschließend reichlich gedehnt, damit der Unterschied sichtbar wird.
%
%\def\maketest{\begin{itemize}
%\begingroup
%\obeylines
%\nonfrenchspacing
%\item Normal:\par
%a) \hbox{\normaltext}\par
%b) \hbox{\juratext}
%\item 10 Punkte gedehnt:\par
%a) \hbox spread10pt{\normaltext}\par
%b) \hbox spread10pt{\juratext}
%\item 20 Punkte gedehnt:\par
%a) \hbox spread20pt{\normaltext}\par
%b) \hbox spread20pt{\juratext}
%\item 30 Punkte gedehnt:\par
%a) \hbox spread30pt{\normaltext}\par
%b) \hbox spread30pt{\juratext}
%\endgroup
%\end{itemize}}
%
%\begin{enumerate}
%\item Beispiel: Nur mit \jabb\ erkennt \TeX\ das Satzende nach einem Grossbuchstaben.
%\def\normaltext{Das steht im BGB. Oder etwa nicht?}
%\def\juratext{Das steht im \abbbgb. Oder etwa nicht?}
%\begin{quote}
%Text a: "`\verb*|Das steht im BGB. Oder etwa nicht?|"'
%
%Text b: "`\verb*|Das steht im \abbbgb. Oder etwa nicht?|"'
%\end{quote}
%\maketest
%\item Beispiel: Mit \jabb\ erkennt \TeX, dass mit der Abkürzung kein Satz endet.
%\def\normaltext{Der Baum ist ca. 10 Meter hoch.}
%\def\juratext{Der Baum ist \abbca 10 Meter hoch.}
%\begin{quote}
%Text a: "`\verb*|Der Baum ist ca. 10 Meter hoch.|"'
%
%Text b: "`\verb*|Der Baum ist \abbca 10 Meter hoch.|"'
%\end{quote}
%\maketest
%\item Beispiel: Hier ändert sich nichts, da \TeX\ nach einem Grossbuchstaben ohnehin kein Satzende annimmt.
%\def\normaltext{Das sagt z.B. einer meiner verehrten Kollegen.}
%\def\juratext{Das sagt \abbzb einer meiner verehrten Kollegen.}
%\begin{quote}
%Text a: "`\verb*|Das sagt z.B. einer meiner verehrten Kollegen.|"'
%
%Text b: "`\verb*|Das sagt \abbzb einer meiner verehrten ...|"'
%\end{quote}
%\maketest
%\item Beispiel: Wenn ein Satz mit einer Abkürzung endet, die einen Punkt enthält, muss der Befehl |\abb|\kennung> verwendet werden, um das Problem zu umgehen. 
%\def\normaltext{So schon Müller, a.a.O. Neuerdings anders aber Meier.}
%\def\juratext{So schon Müller, \abbaao> Neuerdings anders aber Meier.}
%\begin{quote}
%Text a: "`\verb*|So schon Müller, a.a.O. Neuerdings ...|"'
%
%Text b: "`\verb*|So schon Müller, \abbaao> Neuerdings ...|"'
%\end{quote}
%\maketest
%\end{enumerate}
%
% \subsection{Zusammenfassung: Die "`Anhängsel"' des \texttt{abb}-Befehls}
% Auf den ersten Blick sehen die verschiedenen Möglichkeiten, den Befehl |\abb|\kennung\ aufzurufen, sicher etwas verwirrend aus. Die "`Sonderzeichen"' wurden aber mit Bedacht gewählt.
%\begin{description}
%	\item[+] erzeugt die Langform (man bekommt "`mehr"', deshalb +)
%	\item[<] erzeugt den Großbuchstaben am Satzanfang (öffenendes Zeichen, da der Satz beginnt)
%	\item[>] erzeugt den Zusatzabstand am Satzende (schließendes Zeichen, da Satz endet)
%	\item[*] erzeugt die wandelbare Abkürzung (weil es was "`Besonderes"' ist, mit Sternchen)  
%\end{description}
% Man kann diese Zeichen beliebig miteinander kombinieren, verketten und wiederholen. Wichtig ist nur, dass sich die vier erlaubten Sonderzeichen direkt an den Befehl anschließen. Kommt ein anderes Zeichen dazwischen, haben die nachfolgenden Symbole keinen Einfluss mehr auf die Abkürzung.
% Der Befehl |\abbvgl*<>| würde also die Abkürzung "`Vergleiche"' oder "`Vgl."' ausgeben (je nach Umgebung, aber immer mit Großbuchstaben beginnend) und ein nachfolgendes Leerzeichen wie nach einem Satzende dehnen. 
% Eine Kombination von "`+"' und "`*"' ist möglich, bringt aber nichts, da aufgrund des "`+"' immer die Langform ausgegeben wird.\footnote{%
% Für Bastler: Die vier "`Sonderzeichen"' lassen sich auch durch einen einfachen Eingriff in das package verändern. Wichtig ist nur, dass diese Zeichen zur Kategorie 12 gehören -- also keine Buchstaben! Die Zeichen wurden aber absichtlich so gewählt, dass nicht davon auszugehen ist, dass eines dieser Zeichen unmittelbar nach einer Abkürzung gebraucht wird, anders als z.B. bei einem Bindestrich (BMF-Schreiben!).}
%
% \subsection{Macros in Abkürzungen}
%
% \DescribeMacro{\protectab}
% Eine letzte Besonderheit gibt es noch zu erklären. Es kann vorkommen, dass man eine Abkürzug im Langtext einer Abkürzung verwenden möchte. (etwa: GmbHR entspricht GmbH-Rundschau). In der Liste sollte dann natürlich die Erklärung für GmbH auch erscheinen. Man kann die |\abb|-Befehle auch im 3. Argument des |\abbrev|-Befehls verwenden, aber man muss (wenn man nicht mit Fehlermeldungen bombardiert werden will) den Befehl |\protectab| voranstellen. Wenn nach der "`inneren"' Abkürzung ein Leerzeichen kommt, muss man auch dies extra kennzeichnen durch \verb*|\ |.
% Ein Beispiel: 
%\begin{verbatim*}
%\abbrev{gmbh}{GmbH}{Gesellschaft mit beschränkter Haftung}
%\abbrev{gmbhr}{GmbHR}{\protectab\abbgmbh-Rundschau}
%\end{verbatim*} 
%ergibt "`GmbH-Rundschau"'
%oder
%\begin{verbatim*}
%\abbrev{gmbhr}{GmbHR}{\protectab\abbgmbh\ Rundschau}
%\end{verbatim*} 
%ergibt "`GmbH Rundschau"'.
%
%Dieses Feature lässt sich auch nutzen, wenn man andere Kontrollsequenzen oder active characters in einer Abkürzung benutzen möchte. Denkbar wäre folgende Deklaration:
%
%\begin{verbatim}
%\abbrev{llm}{\protectab\scshape{}ll.m.}{Master of Laws}
%\abbrev{drjur}{Dr.\protectab~iur.}{Doctor iuris}
%\abbrev{ff}{\protectab\sl{}ff.}{folgende}
%[...]
%\end{verbatim}
%
%Das Ergebnis:
% \renewcommand{\abbrevname}{Abkürzungen}
%\begin{abbreviations}
%\abbrev{llm}{\protectab\scshape{}ll.m.}{Master of Laws}
%\abbrev{drjur}{Dr.\protectab~iur.}{Doctor iuris}
%\abbrev{ff}{\protectab\sl{}ff.}{folgende}
%\abbrev{gmbh}{GmbH}{Gesellschaft mit beschränkter Haftung}
%\abbrev{gmbhr}{GmbHR}{\protectab\abbgmbh-Rundschau}
%\abbrev{s}{S.}{Seite}
%\end{abbreviations}
%\bigskip
%Daraufhin kann man dann solch schöne Sätze kreieren wie: 
%\begin{verbatim}
% Ein wichtiger Aufsatz von \abbdrjur Heins Hansen, \abbllm (NYU),
% \abbgmbhr 2000, \abbs~15 \abbff>
%\end{verbatim}
%
% Also: "`Ein wichtiger Aufsatz von \abbdrjur Heins Hansen, \abbllm (NYU), \abbgmbhr 2000, \abbs~15 \abbff>"'\footnote{Die NYU wurde hier nicht als Abkürzung definiert. Man könnte das natürlich auch tun und dort ggf. auch gleich die Kapitälchen einstellen. Aus guten Gründen beschränkt sich die Wirkung der Kapitälchen auf die Abkürzung selbst.
%
%Wer genau hingeschaut hat, hat auch gemerkt, dass die Tilde nicht in die Definition von \abbs eingebunden wurde. Das Problem dabei ist, dass automatisch nach jeder Abkürzung ein Leerzeichen erzeugt wird. \jabb\ achtet dabei (noch) nicht darauf, ob die Abkürzung selbst evtl. schon mit einem Leerzeichen endet. Daher funktioniert diese Vereinfachung -- zumindest bislang -- nicht.
%
%Die Definition von so vielen Abkürzungen mag überflüssig erscheinen. Der Text gewinn aber gerade durch die Spacing-Überwachung mit \jabb\ an Qualität. Die Frage, ob eine Häufung von so vielen Abkürzungen in einem Satz sinnvoll ist, soll hier aber nicht vertieft werden. Wer \TeX\ zum Wahnsinn bringen möchte, kann ja mal seinen Palandt mit \jabb\ abschreiben!}
%
% \section{Erstellung eines Gesetzesverzeichnisses}
% Die |\abb|-Funktionen lassen sich selbstverständlich auch für die gängigen Abkürzungen
% von Gesetzen verwenden. Wer darüber hinaus ein Verzeichnis der zitierten Gesetze haben 
% möchte, kann dies mit dem vorliegenden Paket und dem |index|-Paket recht leicht bewerkstelligen. 
% \subsection{Dokument-Header}
% Zunächst müssen die Pakete eingebunden werden.
% \begin{verbatim}
% \usepackage{index}
% \usepackage{juraabbrev}
% \end{verbatim}
% Anschließend muss ein Index nach folgendem Muster erstellt werden (noch vor |\begin{document}|!):
% \begin{verbatim}
% \newindex{laws}{ldx}{lnd}{Zitierte Gesetze}
% \end{verbatim}
% Wichtig ist dabei v.a. die Kennung |laws|, der Rest kann abgewandelt werden, wenn man 
% den Aufruf von |makeindex| entsprechend ändert.
% \subsection{Gesetzeszitate}
% \DescribeMacro{\citelaw}
% Der wichtigste Befehl zum Zitat eines Gesetzes lautet |\citelaw|. Der Syntax ist:
% ^^M\begin{quote}
% \par\noindent
%|\citelaw[|\meta{Paragraphenzeichen}|]{|\meta{Paragraph}|}[|\meta{Absatz}|][|\meta{Satz}|]{|\meta{Gesetz}|}|
% ^^M\end{quote}
% \par
% Der Parameter \meta{Gesetz} enthält dabei die Kommandokennung aus dem Abkürzungsverzeichnis, 
% also z.B. "`bgb"'.
% Der Aufruf
% \begin{quote} 
% |\citelaw[\S]{15}[Abs. 1][S. 1 Nr. 2]{estg}| 
% \end{quote}
% erzeugt daher folgende Ausgabe:
% \begin{quote}
% \S~15 Abs.~1 S.~1 Nr.~2 \abbestg. ^^A have to cheat here because index.sty doesn't work in doc
% \end{quote}
% Zugleich wird ein Indexeintrag der folgenden Form erstellt:
% \begin{quote}
% |\index[laws]{estg@\abbestg*!\S~15!Abs.~1}|
% \end{quote}
% Zur Bedeutung dieses Eintrages sei auf die Doku von |index.sty| verwiesen. 
% Die *-Form des Befehls erzeugt keine Ausgabe, sondern nur einen Verzeichniseintrag. 
%
% \DescribeMacro{\citepar}\DescribeMacro{\citeart}
% Da das "`Paragraphenzeichen"' in der Regel "`\S"' oder "`Art."' lautet, gibt es zwei Kurzformen 
% des Befehls: |\citepar| und |\citeart|.
% \begin{quote}
% |\citepar{|\meta{Paragraph}|}[|\meta{Absatz}|][|\meta{Satz}|]{|\meta{Gesetz}|}|
%
% |\citeart{|\meta{Artikel}|}[|\meta{Absatz}|][|\meta{Satz}|]{|\meta{Gesetz}|}|
% \end{quote} 
% Auch diese verfügen jeweils über die *-Form.
% Den |\citelaw|-Befehl wird man daher nur noch in Ausnahmefällen, etwa für ausländische
% Gesetze, benötigen.
% \subsection{Gesetzesverzeichnis}
%Um das Gesetzesverzeichnis zu erstellen, muss |makeindex| wie folgt aufgerufen werden:
%\begin{quote}
%|makeindex -o |\meta{Dateiname}|.lnd| \meta{Dateiname}|.ldx -s laws.ist|
%\end{quote}
%Das Verzeichnis erscheint im Dokument an der Stelle des |\printindex|-Befehls. Dieser kann in ein |longabbreviations|-Environment eingefügt werden, damit die Gesetze im Verzeichnis ausgeschrieben werden. 
%\begin{verbatim}
%\begin{longabbreviations}
%\printindex[laws]
%\end{longabbreviations}
%\end{verbatim}
% \section{Kontakt}
% 
% Das Paket ist sicher noch nicht ausgereift und wird in der nächsten Zeit noch erweitert und 
% verbessert werden. Wer Vorschläge dazu hat, kann sich gerne an mich wenden. 
%
% Folgende Probleme sind mir schon aufgefallen:
%\begin{itemize}
%	\item wer \texttt{hyperref} verwendet, kann keine |\abb|-Befehle in Überschriften einsetzen. In der \texttt{hyperref}-Doku ist beschrieben, warum das nicht geht und wie man die Probleme umgehen kann. Ich bin noch nicht dazu gekommen. 
%	\item doppelte Leerzeichen, wenn Abkürzung mit space endet (oben beschrieben)
% \item aus der Interaktion von \texttt{hyperref} und \texttt{index.sty} ergeben sich Fehler, wenn das Dokument nicht mit \texttt{PDF\TeX}, sondern normal mit \LaTeX\ bearbeitet wird.
% \item keine Links bei exportierten Dateien (\TeX4ht)
%\end{itemize}
%
% Ich bin zu erreichen unter:
% \begin{quote}
% Lucas Wartenburger \texttt{<elwwa@gmx.net>}
% \end{quote}
%
% \StopEventually
% 
% \section{Die Implementierung}
% \changes{0.4}{old}{erste Version}
% \changes{0.5}{2004/08/21}{Dokumentation angef"ugt}
% \changes{0.51}{2004/09/04}{Dokumentation an hyperref angepasst}
% \changes{0.51}{2004/09/04}{Name geändert zu juraabbrev}
% 
% \begin{macro}{Dokumentation}
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\usepackage{german}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{hyperref}
\hypersetup{%
pdftitle={Dokumentation juraabbrev.sty},
pdfauthor={Lucas Wartenburger},
pdfsubject={LaTeX-package juraabbrev},
pdfkeywords={TeX, LaTeX, juraabbrev, jura, law},
linkbordercolor=1 1 1,
linkcolor=cyan}
\usepackage{juraabbrev}
%\OnlyDescription     %nur Anleitung (ohne Index und History)
\CodelineIndex        %kein Index wenn auskommentiert
\EnableCrossrefs      %kein Index wenn auskommentiert
\RecordChanges        %keine History wenn auskommentiert
\begin{document}
\DocInput{juraabbrev.dtx}
\end{document}
%</driver>
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{Header}
% \subsection{Das Package}
% \changes{0.5}{2004/08/22}{nicht mehr abhängig von Jurabib, statt dessen eigenes environment}
% \changes{0.51}{2004/09/17}{xspace zT statisch übernommen}
% Das Makro erlaubt derzeit noch keine Optionen. Denkbar wäre etwa die optionale Erstellung
% des Gesetzesverzeichnisses.
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{juraabbrev}[2004/09/15 v0.51]
\RequirePackage{ifthen}
%    \end{macrocode}
% \end{macro}
% in die .abb Datei wird bei jedem Aufruf einer Abkuerzung das Kommando |\abbrevuse{abkuerzung}| geschrieben; nur die verwendeten Abkuerzungen werden ins Verzeichnis aufgenommen
% \begin{macro}{Deklarationen}
% \changes{0.5}{2004/08/22}{ifabbrev@long eingefügt zur Steuerung von babb<kennung>}
% \changes{0.51}{2004/09/15}{abb@space eingefügt zur Steuerung von xabb}
% \changes{0.51}{2004/09/17}{Token-Register zum Zwischenspeichern}
% \changes{0.51}{2004/09/17}{if@bblong für Langform}
% \changes{0.51}{2004/09/17}{if@bbmaj für Großbuchstabe}
% \changes{0.51}{2004/09/17}{if@bbend für Satzende}
% \changes{0.51}{2004/09/17}{char-Deklarationen für Steuerzeichen}
% \changes{0.51}{2004/09/17}{if@repeat bei mehreren Steuerzeichen}
% |\ifabb@force| erzwingt die Ausgabe eines Eintrags im Abkürzungsverzeichnis, selbst
% wenn die Abkürzung nicht verwendet wurde.
%
% |\ifabbrev@long| führt dazu, dass ein |\babb|\kennung-Befehl die Langform anstelle der Kurzform 
% ausgibt.
%
% |\ifcitepar@out| führt dazu, dass ein |\citelaw|-Befehl auch eine Ausgabe an Ort und Stelle
% (und nicht nur einen Index-Eintrag) erzeugt.
%
%    \begin{macrocode}
\newif\ifabb@force 
\newif\ifabbrev@long\abbrev@longfalse
\newif\ifcitepar@out
% Einstellung für den space factor
\newcount\abb@space
\abb@space=\the\sfcode`a%should be 1000
% Verzeichnisname
\newcommand*{\abbrevname}{Abk\"urzungsverzeichnis}
% Token-Register für Zwischenspeicherung
\newtoks\tok@bbsign
\newtoks\tok@bbshort
\newtoks\tok@bblong
% Die vier Sonderzeichen
\let\char@bblong=+ 
% Langform
\let\char@bbend=>
% bigspace
\let\char@bbmaj=<
% uppercase
\let\char@bbbib=*
% bib-mode
% Einstellungen durch die Sonderzeichen
\newif\if@bblong
\newif\if@bbend
\newif\if@bbmaj
% Einstellung, ob u.U. mehrere Sonderzeichen folgen
\newif\if@bbrepeat
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abbreviations}
% \changes{0.51}{2004/09/14}{von Table auf Boxes umgestellt}
%    \begin{macrocode}
\newenvironment{abbreviations}
   {\section*{%
     \abbrevname 
     \@mkboth{\MakeUppercase\abbrevname}{\MakeUppercase\abbrevname}}%
		\begingroup
		\newdimen\leftsize
		\newdimen\middistance
		\newdimen\rightsize
		\leftskip=0pt%
		\rightskip=0pt%
		\middistance=1pc%
		\leftsize=.1\hsize
		\advance\leftsize by1cm%
		\rightsize=\hsize
		\advance\rightsize by-\leftsize
		\advance\rightsize by-\leftskip
		\advance\rightsize by-\middistance
		\advance\rightsize by-\rightskip}
   {\par\endgroup}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{longabbreviations}
% Die Umgebung |longabbreviations| tut nichts anderes, als |\ifabbrev@long| ein- und am Ende wieder 
% auszuschalten. Innerhalb dieser Umgebung führt die Verwendung von |\abb|\kennung* zur Ausgabe der Langform.
%    \begin{macrocode}
\newenvironment{longabbreviations}
  {\abbrev@longtrue}
  {\abbrev@longfalse}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{hyperref}
% \changes{0.51}{2004/09/04}{Unterstützung für hyperref (normale links)}
% Idee von jurabib übernommen
%    \begin{macrocode}
\providecommand\hyper@linkstart[2]{}%
\providecommand\hyper@linkend{}%
\providecommand\hyper@anchorstart[1]{}%
\providecommand\hyper@anchorend{}%
\def\hyper@abblinkstart#1{\hyper@linkstart{link}{link.#1}}
\def\hyper@abblinkend{\hyper@linkend}
\def\hyper@abbanchorstart#1{\hyper@anchorstart{link.#1}}
\def\hyper@abbanchorend{\hyper@anchorend}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abbrev}
% Der Befehl |\abbrev| erstellt einerseits den Eintrag im Abkürzungsverzeichnis, andererseits
% schreibt er den Aufruf |\abbrevdef| in die |.abb|-Datei. Dieser definiert dann erst die 
% |\abb|-Kommandos. Der "`Umweg"' über |\abbrevdef| hat den Vorteil, dass die Position 
% des Abkürzungsverzeichnisses im Dokument frei gewählt werden kann, denn die |.abb|-Datei 
% wird schon am Anfang eingelesen, damit können die Abkürzungen schon verwendet werden. 
% Die *-Version erzwingt eine Aufnahme ins Abkürzungsverzeichnis, unabhängig von der Verwendung einer
% Abkürzung. Ansonsten wird der Eintrag nur aufgenommen, wenn |\uabb|\kennung\ definiert ist, die 
% Kurzform also verwendet wurde.
% Zunächst muss ein |\newcell| Kommando definiert werden, da das \&-Symbol in der |\if|-Umgebung
% nicht funktioniert. (inzwischen obsolet)
% \changes{0.51}{2004/09/04}{Unterstützung für Hyperref eingefügt}
% \changes{0.51}{2004/09/04}{@abbentry selbständig definiert}
% \changes{0.51}{2004/09/14}{von Table auf Boxes umgestellt}
% \changes{0.51}{2004/09/17}{protectab eingefügt}
%    \begin{macrocode}
\let\protectab=\relax
\def\abbrev{\@ifstar{\abb@forcetrue\@abbrev}{\abb@forcefalse\@abbrev}}%
\def\@abbrev#1#2#3{%
 \begingroup\let\protectab=\string
 \if@filesw\immediate\write\@abbout{%
 \string\abbrevdef{#1}{#2}{#3}}\fi%
 \endgroup
 \ifabb@force\@abbentry{#1}{#2}{#3}%
 \else\@ifundefined{uabb#1}{}{\@abbentry{#1}{#2}{#3}}\fi
\ignorespaces}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{@abbentry}
% \changes{0.51}{2004/09/14}{v"ollig umgeschrieben}
% Die Tables haben nicht funktioniert. Diese Lösung war auf Dauer ohnehin nicht tauglich, 
% da die Verzeichnisse mehrere Seiten in Anspruch nehmen können. Außerdem haben die 
% Hyperlinks immer in die falsche Zeile gezeigt -- warum auch immer. Ganz aus der Welt ist das Problem noch nicht. Ich arbeite daran.
%    \begin{macrocode}
\def\@abbentry#1#2#3{\hyper@abbanchorstart{%
 #1}\par\noindent\hskip\leftskip%
 \hbox to \leftsize{\strut#2\hss}\hskip\middistance%
 \hbox to \rightsize{#3\hss\strut}\hyper@abbanchorend}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abb}
% \changes{0.51}{2004/09/14}{neu eingef"ugt f"ur errormessage-f"urchter}
%    \begin{macrocode}
\def\abb #1 {%
 \@ifundefined{abb#1}{\PackageWarning{juraabbrev}%
 {Abbreviation '#1' undefined}}%
 {\csname abb#1\endcsname}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{babb}
% \changes{0.51}{2004/09/14}{neu eingef"ugt f"ur errormessage-f"urchter}
%    \begin{macrocode}
\def\babb #1 {%
 \@ifundefined{abb#1}{\PackageWarning{juraabbrev}%
 {Abbreviation '#1' undefined}}%
 {\csname abb#1\endcsname\char@bbbib}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{labb}
% \changes{0.51}{2004/09/14}{neu eingef"ugt f"ur errormessage-f"urchter}
%    \begin{macrocode}
\def\labb #1 {%
 \@ifundefined{abb#1}{\PackageWarning{juraabbrev}%
 {Abbreviation '#1' undefined}}%
 {\csname abb#1\endcsname\char@bblong}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abb@declare}
% \changes{0.51}{2004/09/17}{ersatzlos gestrichen}
% \end{macro}
% \begin{macro}{abbrevdef}
% Das beim Einlesen der |.abb|-Datei ausgeführte Makro |\abbrevdef| 
% setzt die Token-Register und übergibt dann den Rest an |\conf@bb|.
% Es werden in der Neufassung nicht mehr drei Makros pro Abkürzung definiert, sondern nur 
% noch eines (sowie uabb für die tatsächlich verwendeten Abkürzungen). 
% \changes{0.51}{2004/09/04}{unterstützung hyperref bei abb<kennung> eingefügt}
% \changes{0.51}{2004/09/04}{babb<kennung> dynamisch definiert mit verw. auf andere fkt.}
% \changes{0.51}{2004/09/14}{spacefactor eingefuegt}
% \changes{0.51}{2004/09/17}{völlig umgeschrieben, Token-Register eingeführt statt statischer Kopie}
%    \begin{macrocode}
\def\abbrevdef#1#2#3{%
\expandafter\DeclareRobustCommand\csname abb#1\endcsname{%
  \tok@bbsign={#1}%
  \tok@bbshort={#2}%
  \tok@bblong={#3}%
  \@bblongfalse\@bbendfalse\@bbmajfalse
  \futurelet\tok@next\conf@bb}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{conf@bb}
% Liest jeweils ein Token ein und untersucht, ob es ein Steuerzeichen ist. 
% Falls ja, wird das Steuerzeichen ausgewertet, aus der Liste entfernt und das nächste Token gelesen, ansonsten wird |\make@bb| aufgerufen.
% \changes{0.51}{2004/09/17}{neu eingefügt}
%    \begin{macrocode}
\long\def\nextconf@bb#1{\futurelet\tok@next\conf@bb}
\def\conf@bb{%\let\tok@next=#1%
 \@bbrepeattrue
 \ifx\tok@next\char@bblong\@bblongtrue\else
  \ifx\tok@next\char@bbend\@bbendtrue\else
   \ifx\tok@next\char@bbmaj\@bbmajtrue\else
    \ifx\tok@next\char@bbbib
     \ifabbrev@long\@bblongtrue\fi
     \else
     \@bbrepeatfalse%other token
    \fi
   \fi
  \fi
 \fi
 \if@bbrepeat\let\next@bb=\nextconf@bb\else
  \let\next@bb=\make@bb%
 \fi\next@bb}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{make@bb}
% \changes{0.51}{2004/09/17}{neu eingefügt}
% Erstellt schließlich die Abkürzung entsprechend den Aufruf-Optionen erstellt. Der space factor wird gesetzt und ggf. ein Leerzeichen angefügt.
%    \begin{macrocode}
\def\make@bb{\begingroup
 \if@bbend\abb@space=\the\sfcode`.\fi
 \if@bblong
  \if@bbmaj\expandafter\abb@major\the\tok@bblong\else
   \the\tok@bblong
  \fi
 \else
  \if@filesw\immediate\write
   \@abbout{\string\abbrevuse{\the\tok@bbsign}}\fi
  \hyper@abblinkstart{\the\tok@bbsign}%
  \if@bbmaj\expandafter\abb@major\the\tok@bbshort\else
  \the\tok@bbshort\fi
  \hyper@abblinkend\spacefactor\abb@space
 \fi
 \make@bbspace\endgroup}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abb@major}
% Konvertiert ein Token in einen Großbuchstaben
% \changes{0.51}{2004/09/17}{neu eingefügt}
%    \begin{macrocode}
\def\abb@major#1{\MakeUppercase{#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{make@bbspace}
% \changes{0.51}{2004/09/17}{neu eingefügt}
% Dieses Macro wurde von |\xspace| übernommen. Eine Einbindung von xspace wäre auch möglich, aber dann hätte man ein überflüssigs futurelet dazwischen. So kann man hier bei Bedarf auch einfach noch neue Ausnahmen einfügen.
%    \begin{macrocode}
\def\make@bbspace{%
  \ifx\tok@next\bgroup\else
  \ifx\tok@next\egroup\else
  \ifx\tok@next\/\else
  \ifx\tok@next\ \else
  \ifx\tok@next~\else
  \ifx\tok@next.\else
  \ifx\tok@next!\else
  \ifx\tok@next,\else
  \ifx\tok@next:\else
  \ifx\tok@next;\else
  \ifx\tok@next?\else
  \ifx\tok@next/\else
  \ifx\tok@next'\else
  \ifx\tok@next)\else
  \ifx\tok@next-\else
  \ifx\tok@next\@xobeysp\else
  \ifx\tok@next\space\else
  \ifx\tok@next\@sptoken\else
   \space
   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{abbrevuse}
% Sobald die |.abb|-Datei einen |\abbrevuse{|\kennung|}| Befehl enthält, wird das |\uabb|\kennung-macro
% definiert. Dieses wird dann von |\abbrev| bei der Erstellung des Verzeichnisses
% ausgewertet. 
%    \begin{macrocode}
\def\abbrevuse#1{\global\@namedef{uabb#1}{true}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{Gesetzesverzeichnis}
% Wenn |index.sty| geladen ist, wird |\citelaw| definiert. Die einzelnen Unterbefehle 
% dienen zur Deklaration der diversen optionalen Parameter. Der seltsame Syntax des Befehls 
% dient einer "`natürlichen"' Eingabe (also: Paragraphenzeichen -- Paragraph -- Absatz -- 
% Satz/Nummer -- Gesetz). 
% Die *-Version erzeugt keinen Output an Ort und Stelle, sondern nur einen Verzeichnis-Eintrag. 
% Die ermöglicht das (wenn auch umständliche) Zitieren einer Kette. Vielleicht gibt es später
% mal noch ein Makro dazu, aber das wäre recht umständlich, weil es x Möglichkeiten gibt.
%    \begin{macrocode}
\@ifpackageloaded{index}{%
\def\citelaw{\@ifstar{%
  \citepar@outfalse\cite@law}{%
  \citepar@outtrue\cite@law}}% mit Output?
\def\cite@law{\@ifnextchar[{%
  \cite@@law}{%
  \cite@@law[\S~]}} % Default § verwenden?
\def\cite@@law[#1]#2{\@ifnextchar[{%
  \cite@@@law[#1]#2}{%
  \cite@@@law[#1]#2[]}}% mit Absatz?
\def\cite@@@law[#1]#2[#3]{\@ifnextchar[{%
  \cite@@@@law[#1]#2[#3]}{%
  \cite@@@@law[#1]#2[#3][]}} % mit Satz?
\def\cite@@@@law[#1]#2[#3][#4]#5{%
%    \end{macrocode}
% |#1| -- Para/Art-Zeichen |#2| -- Para/Art |#3| -- Abs. |#4| -- S./Nr. |#5| -- Gesetz
% Es werden die |\babb|-Befehle verwendet. Der Sinn wird unten im Beispiel-Dokument
% dargestellt.
%    \begin{macrocode}
  \ifthenelse{\equal{#3}{}}{%ohne Absatz
   \index[laws]{#5@\csname abb#5\endcsname*!#1#2}%
    \ifcitepar@out #1#2#4 \csname abb#5\endcsname\fi}{%mit Absatz
   \index[laws]{#5@\csname abb#5\endcsname*!#1#2!#3}%
    \ifcitepar@out #1#2 #3 #4 \csname abb#5\endcsname\fi}}
%    \end{macrocode}
% |\citepar| und |\citeart| sind nur Abkürzungen zur leichteren Verwendung von |\citelaw|.
%    \begin{macrocode}
\def\citeart{\@ifstar{%
  \citepar@outfalse\cite@@law[Art.~]}{%
  \citepar@outtrue\cite@@law[Art.~]}}
\def\citepar{\@ifstar{%
  \citepar@outfalse\cite@@law[\S~]}{%
  \citepar@outtrue\cite@@law[\S~]}}
%    \end{macrocode}
% Die Befehle werden nicht definiert, wenn |index.sty| nicht geladen ist.
%    \begin{macrocode}
}{\relax}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{Einlesen der Dateien}
%    \begin{macrocode}
\AtBeginDocument{
  \newwrite\@abbout
  \@input{\jobname.abb}%
  \if@filesw
    \immediate\openout\@abbout\jobname.abb
    \immediate\write\@abbout{\relax}%
  \fi}
%</package>
%    \end{macrocode}
% \end{macro}
% \begin{macro}{TeX4ht}
% \subsection{Treiber für \TeX4ht}
% \changes{0.51}{2004/09/20}{Treiber hinzugefügt}
% Wer seine Dokumente mit \TeX4ht konvertieren möchte (etwa in Word-Dokumente), kann \jabb\ im Prinzip normal verwenden. Der nachfolgende Treiber ergänzt die Definition für das Verzeichnis, so dass in der HTML-Fassung hier eine einfache Tabelle erstellt wird. Die Details lassen sich ja dann in Word unproblematisch einstellen (Spaltenbreite usw).  Die Datei muss so abgelegt werden, dass \TeX4ht sie findet. Normalerweise sollte es gehen, wenn sie mit dem package im gleichen Verzeichnis liegt. 
%    \begin{macrocode}
%<*texforht>
\pend:def\abbreviations{\a:abbreviations}
\append:def\abbreviations{\b:abbreviations}
\pend:def\endabbreviations{\c:abbreviations}
\append:def\endabbreviations{\d:abbreviations}
\NewConfigure{abbreviations}{4}
\Configure{abbreviations}%
% vor der Überschrift
 {}
% vor der Liste
 {\HCode{<table>}}
% nach der Liste
 {\HCode{</table>}}
% ganz am Ende
 {}
% @abbentry muss ganz umdefiniert werden, da hier 
% auch in der Mitte ein HTML-Code eingefügt werden muss.
\def\@abbentry#1#2#3{\par\noindent\hskip\leftskip%
 \a:@abbentry\hyper@abbanchorstart{#1}%
 \hbox to \leftsize{\strut#2\hss}\hskip\middistance%
 \b:@abbentry%
 \hbox to \rightsize{#3\hss\strut}\hyper@abbanchorend\c:@abbentry}
\NewConfigure{@abbentry}{3}
\Configure{@abbentry}
% am Anfang der Zeile - a:@abbentry
 {\HCode{<tr><td>}}
% Zeilenmitte - b:@abbentry
 {\HCode{</td><td>}}
% Zeilenende - c:@abbentry
 {\HCode{</td></tr>}}
%</texforht>
%    \end{macrocode}
% \end{macro}
% \begin{macro}{Beispieldokument}
% \subsection{Das Beispieldokument}
% \changes{0.5}{2004/08/22}{Beispieldokument erstellt}
% Nachfolgend das Beispieldokument |abbrevtest|.tex, das
% die Funktionsweise des Paketes darstellt. Damit die 
% Paragraphen-Liste funktioniert, muss index.sty vorher geladen 
% werden.
%    \begin{macrocode}
%<*example>
\documentclass{article}
\usepackage{german}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{index}
\usepackage{juraabbrev}
%\usepackage{hyperref} funktioniert mit Index
% nur wenn PDFTeX verwendet wird
\newindex{laws}{ldx}{lnd}{Zitierte Gesetze}
%
\begin{document}

"`So steht es in der \abbnjw."'
"`In \abbdb habe ich aber was anderes gelesen."'
"`Noch anders jetzt Woopen in \abbdstr."'

\abbnjw heisst ausgeschrieben n"amlich \abbnjw+.
\abbbb+ erscheint nicht im Verzeichnis, da er nur in der 
Langform verwendet wird, nicht aber als Abkuerzung. 
Dagegen erscheint \abbistr+, obwohl nicht verwendet. 
Das liegt an dem * im Aufruf. 

Nun sollen noch ein paar Gesetze zitiert werden, 
damit sich das Verzeichnis füllt.

Paragraphen: \citepar*{242}{bgb}
\citepar*{323}{bgb} \S\S~242, 323 \abbbgb
\citepar{17}[Abs. 2][S. 1 Nr. 1]{estg}

Artikel: \citeart{33}[Abs.~2][S. 1]{gg}

Sonstiges: \citelaw[art.]{23}[al. 2][]{cciv}

Damit hier noch ein Verzeichnis erscheint, sollte 
\verb|makeindex| mit folgenden Optionen aufgerufen werden: 
\begin{verbatim}
makeindex -o "abbrevtest.lnd" "abbrevtest.ldx" -s laws.ist
\end{verbatim}

%    \end{macrocode}
% Das Beispiel-Dokument verwendet die |longabbreviations|-Umgebung, 
% damit im Verzeichnis der Gesetze die Langebezeichnungen erscheinen.
%    \begin{macrocode}
\begin{longabbreviations}
\printindex[laws]
\end{longabbreviations}

\begin{abbreviations}

\abbrev{bgb}{BGB}{Bürgerliches Gesetzbuch}
\abbrev{gg}{GG}{Grundgesetz}
\abbrev{estg}{EStG}{Einkommensteuergesetz}
\abbrev{cciv}{CCiv}{Code Civil}
\abbrev{njw}{NJW}{Neue Juristische Wochenschrift} 
\abbrev{dstr}{DStR}{Deutsches Steuerrecht} 
\abbrev{db}{DB}{Der Betrieb} 
\abbrev{bb}{BB}{Der Betriebsberater} 
\abbrev*{istr}{IStR}{Internationales Steuerrecht} 

\end{abbreviations}

\end{document}
%</example>
%    \end{macrocode}
% \end{macro}
% \begin{macro}{laws.ist}
% \subsection{Das Index-Layout}
% \changes{0.5}{2004/08/22}{Index-Style eingefügt}
% Es folgt nun noch die Definition von |laws.ist|, einer 
% einfachen Style-Datei für |makeindex|. Ich habe das irgendwo
% abgeschrieben. Sicher kein Schmuckstück, aber für Demo-
% zwecke absolut ausreichend.
%    \begin{macrocode}
%<*indexstyle>
preamble
"\n \\begin{theindex} \n %\\makeatletter\\scan@allowedfalse\n"
postamble
"\n\n \\end{theindex}\n"
item_x1   "\\hfill \n \\subitem "
item_x2   "\\hfill \n \\subsubitem "
delim_0   "\\dotfill "
delim_1   "\\dotfill "
delim_2   "\\dotfill "
% The next lines will produce some warnings when
% running Makeindex as they try to cover two different
% versions of the program:
lethead_prefix   "{\\bfseries\\hfil "
lethead_suffix   "\\hfil}\\nopagebreak\n"
lethead_flag       0
heading_prefix   "{\\bfseries\\hfil "
heading_suffix   "\\hfil}\\nopagebreak\n"
headings_flag       0
%</indexstyle>
%    \end{macrocode}
% \end{macro}
%
% \Finale
% \PrintChanges 
% \PrintIndex
%
