summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/juraabbrev/juraabbrev.dtx
blob: 5ff4dfddcf5f87d8cce2236a2bca497cecf9525d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
% \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
%