% \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
%