root/studiarbeit/bst/natdin.bst

Revision 83, 52.7 kB (checked in by phil, 14 years ago)

Der Vogel hat alles repariert ;-)

Line 
1 %%  natdin.bst   Vers. [3.0a3]  2005-02-22   mit PWD cite-multimode
2 %%  K.F.Lorenzen  (C)    email:  klaus.lorenzen@bui.haw-hamburg.de
3 %%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 %%  Mit diesem BibTex-style werden Literaturverzeichnisse nach dem deutschen
5 %%  Standard DIN 1505, Teil 2 und 3 formatiert. Die label im Quellen-/
6 %%  Literaturverzeichnis sind vom Typ 'Verfasser - Jahr' und
7 %%  entsprechen den Zitatformen im Text. Es koennen alle von
8 %%  Patrick W. Daly im natbib-Paket implementierten Zitierbefehle
9 %%  genutzt werden. Eine Kurzbeschreibung liegt als Datei natnotes.pdf zusammen
10 %%  mit der im Aufbau befindlichen Beschreibung des natdin-Stils
11 %%  unter der URL  http://www.fh-hamburg.de/pers/Lorenzen/bibtex.
12 %%  Eine Anleitung zur Anwendung der Norm DIN 1505 findet sich unter der
13 %%  URL http://www.bui.haw-hamburg.de/pers/klaus.lorenzen/ASP/litverz.pdf
14 %%
15 %%  Es werden nun auch Elektronische Online / Offline Ressourcen wie
16 %%  Internetquellen, CD-ROM usw. verarbeitet. Dazu kommen spezielle
17 %%  Publikationsformen wie Patente, Normen, Karten, Fernsehaufzeichnungen,
18 %%  Gesetzesstellen, Spiele u.a.
19 %
20 %%  NATDIN.BST muss zusammen mit NATBIB.STY von Patrick W. Daly und der in
21 %%  dieser Verteilung modifizierten Konfiguration NATBIB.CFG aufgerufen
22 %%  werden. NATDIN.BST ist vorzugsweise in den ...\bibtex\bst - Pfad zu
23 %%  stellen. Die u. U. jeweils individuelle Konfiguration NATBIB.CFG wird am
24 %%  besten in das Verzeichnis der LaTex-Quelle selbst gelegt.
25 %%
26 %%  Zur Gewaehrleistung der Allgemeingueltigkeit von bib-files gelten in den
27 %%  DIN-styles die in der Tex-Literatur veroeffentlichten originalen
28 %%  Definitionen und Regeln fuer die Publikationstypen (entry-types) und die
29 %%  bibliographischen Felder (fields). Dennoch werden in einigen entry-types
30 %%  mehr optionale Felder verwendet als seinerzeit von Patashnik angegeben.
31 %%  Treten "Schoenheitsfehler" im fertig gesetzten output auf,
32 %%  lassen sich diese so gut wie immer durch eine veraenderte
33 %%  Erfassung im bib-inputfile beseitigen. Oren Patashnik empfiehlt, die
34 %%  Definition der Felder weit auszulegen. Last but not least koennen
35 %%  Sie im output-file < *.bbl > noch letzte Hand zur Korrektur ansetzen.
36 %%  Wegen der meist langen Internetadressen kann es zu "unschoenen" Luecken
37 %%  im Belegtext kommen. Dann muss mit \underfull hbox.... gekaempft werden.
38 %%  Die Darstellung von Internetadressen wird durch das Zusatzpaket
39 %%  url.sty  ver 3.1, 15-Mar-2004 von Donald Arseneau erheblich verbessert und
40 %%  wird sehr empfohlen.
41 %
42 %%  WARN- UND FEHLERMELDUNGEN
43 %%  Ursache von Warnmeldungen sind meistens ausgelassene Felder oder
44 %%  Erfassungs-"Fehler". Letztere haengen teilweise mit den gegenueber US-
45 %%  Gepflogenheiten andersartigen bibliographischen Regeln nach DIN 1505
46 %%  zusammen. Sie sind also in Wahrheit keine "Fehler" und duerfen fast immer
47 %%  ignoriert werden. Dennoch pruefen Sie diese Warnungen, um heraus zu finden,
48 %%  ob Publikationstyp (=entry-type) und "fields" eventuell unzulaessig
49 %%  kombiniert worden sind.
50 %%  Echte Fehler ("errors") treten nur noch in Verbindung mit falscher
51 %%  Erfassung auf (nach meinen Tests!). Pruefen Sie die Syntax, den entry-type
52 %%  und die fields.
53 %%  Zu guter letzt: Qualitaetsmasstab ist einzig der DIN-konforme output!
54 %%
55 %%  DANKSAGUNG
56 %%  Hartmut Lueddecke, HAW Hamburg, hat viele Verbesserungsvorschlaege
57 %%  in die frueheren Versionen eingebracht. Ihm danke ich herzlich.
58 %%  Patrick W. Daly, dem Entwickler des Natbib-Stils, verdanke ich viele
59 %%  Anregungen und den steten Ansporn, die DIN-Stile zu verbessern.
60 %%  Helge Baumann hatte mit seiner Weiterentwicklung meines alten natdin.bst
61 %%  zu dinat.bst (Vers. 2001) die volle Zitierkapazitaet des natbib-Pakets
62 %%  eingefuehrt. Damit war ein deutlicher Zugewinn erreicht. Von ihm stammt
63 %%  der in der vorliegenden natdin.bst-Version 3.0 neu eingefuehrte Befehl
64 %%  \dinatlabel unter seinem von H. Baumann vergebenen Namen.
65 %%  Viele an dieser Stelle ungenannt bleibende Anwender haben mich in
66 %%  den vergangenen Jahren auf Fehler oder Verbesserungsmoeglichkeiten
67 %%  aufmerksam gemacht und so diesen Stil mitentwickelt. Ihnen gilt mein
68 %%  besonderer Dank. Ihr Feedback ist immer willkommen und eine Ermunterung.
69 %%
70 %%  Klaus F. Lorenzen, 12. Dez. 2004
71 %%
72 %%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 %%  version 0.99c for BibTeX versions 0.99c or later, LaTeX2e version
74 %%  Copyright (C) 1985, all rights reserved.
75 %%  Copying of this file is authorized only if either
76 %%  (1) you make absolutely no changes to your copy, including name, or
77 %%  (2) if you do make changes, you name it something other than
78 %%  natdin.bst, natbib.sty
79 %%  This restriction helps ensure that all standard styles are identical.
80 %%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81 %%
82 %%  NEUE FELDER
83 %%  Zur Erfassung von Internetquellen, E-mail u.a. gibt es folgende
84 %%  neue Felder: doi, lastchecked (nach Gray), url, urn
85 %%  Internetquellen (z.B. auch E-mail) werden vorzugsweise mit dem
86 %%  BOOKLET-Typ erfasst.
87 %%  Normen, Patente, Schutzrechte, Gesetzesstellen  sind mit dem MISC-Typ
88 %%  zu erfassen.
89 %%
90
91
92
93 ENTRY
94   { address      %%  Verlagsort
95     author       %%  persoenlicher Urheber eines Werkes
96     booktitle    %%  a) Gesamttitel eines mehrbaendigen Werkes
97 %                %%  b) Titel des Sammelwerks, das einzelne selbstaendige
98 %                %%     Beitraege mit eigenem Titel enthaelt (->incollection)
99     chapter      %%  Kapitel in einem Buch (Monographie)
100     doi          %%% Digital Object Identifier
101     edition      %%  Auflagevermerk; bei selbst. elektron. Dok. == Version
102     editor       %%  Persoenl.Herausgeber oder Koerperschaftlicher Herausgeber
103     howpublished %%  beliebiger Verlegervermerk: von wem, wo
104     institution  %%  Institution, die e.Verlagsfreie Veroeffentlichung betreibt
105     isbn         %%  Standardnr fuer Buecher
106     issn         %%  - " -    :      Zeitschriften u. Serien
107     journal      %%  Titel einer Zeitschrift
108     key          %%  Zusaetzlich vergebener Sortierschluessel, mitunter notwend.
109     lastchecked  %%  Online Abruf einer Internetquelle ( GRAY ); 22.1.2004
110     month        %%  naehere Bestimmung des Erscheinungsjahres (-> macro 's)
111     note         %%  freies Eingabefeld fuer zusaetzliche Informationen
112     number       %%  Mehrfachbedeutung in Abhaengigkeit vom Eingabetyp
113     organization %%  a) Name der Organisation/des Organisators e. Tagung,Konferenz
114 %                %%  b) Name einer Firma/Gesellschaft, die ein ->manual herausgab
115     pages        %%  Umfangsangaben, meist Seitenzahlen
116     publisher    %%  Verlag
117     school       %%  Hochschule/Universitaet, die eine Dipl.-Arb./Dissertation veroeff.
118     series       %%  Titel e.Reihe, in der ein best. Buchtitel erschienen ist
119     title        %%  Titel einer (namentlich gekennzeichneten) Veroeffentlichung
120     type         %%  Zusatzfeld z.Kennzeichnung e.besonderen Publikationstyps
121     url          %%%  URL-Feld ( Uniform Resource Locator )
122     urn          %%   URN-Feld ( Uniform Resource Name )
123     volume       %%  a) Zaehlung bei einem mehrbaendigen Werk (-> book)
124 %                %%  b) Jahrgang einer Zeitschrift (-> article
125     year         %%  Erscheinungsjahr
126   }
127   {}
128   { label extra.label sort.label short.list dinat.label}
129
130 %%%-----------------------------------------------------------------------------------
131 %  Hier stehen Standardvorgaben, die vom Benutzer veraendert werden koennen.
132 %
133 %  Behandlung von Mehrverfasserquellen ("... und andere")
134
135 FUNCTION { ua.etal } { " u.\,a." }  %% evtl. auch in eckigen Klammern  " [u.\,a.]"
136
137 %%  oder lateinisch:  FUNCTION { ua.etal } { " et~al." }
138
139 FUNCTION { und } { " u. " }
140
141 %%  oder ausgeschrieben:  FUNCTION { und } { " und " }
142 %
143 %
144 %  Vorgaben bei Online-/Offline-Quellen (z.B. Internet, CD ROM u.a.).
145 %  Nach DIN 1505 wird der Publikationstyp extra genannt.
146
147 FUNCTION { onlress } { "Online--Ressource" }
148
149 FUNCTION { eress } { "Elektronische Ressource" }
150 %%%-----------------------------------------------------------------------------------
151
152 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
153
154 INTEGERS { colon.after  period.dash }
155
156 INTEGERS { after.firstblock }
157
158 INTEGERS { zahl  lang }
159
160 INTEGERS { len }
161
162 INTEGERS { longest.label.width last.extra.num number.label }
163
164 INTEGERS { nameptr namesleft numnames }
165
166 STRINGS { longest.label last.label next.extra }
167
168 STRINGS { h s t u v }
169
170 STRINGS { fkt }
171
172 %%---------------------------
173
174 FUNCTION {init.state.consts}
175 { #0 'before.all :=
176   #1 'mid.sentence :=
177   #2 'after.sentence :=
178   #3 'after.block :=
179   #4 'colon.after :=
180   #5 'period.dash :=
181   #6 'after.firstblock :=
182 }
183
184
185
186 FUNCTION {set.period.dash}    %% Wenn ein ". - " die Satzteile trennen soll.!
187 { output.state before.all =
188     'skip$
189     { period.dash  'output.state := }
190   if$
191 }
192
193
194 FUNCTION {set.period.dash.check}
195 { empty$
196     'skip$
197     'set.period.dash
198   if$
199 }
200
201 FUNCTION {set.colon.after}   %%$$$ Wenn ein ": " d. Satzteile trennen soll!
202 { output.state before.all =
203     'skip$
204     { colon.after 'output.state  := }
205   if$
206 }
207
208 %%           Wenn ein " " die Satzteile trennen soll.!
209 FUNCTION {new.sentence}
210 { output.state before.all =
211      'skip$
212      { after.sentence 'output.state := }
213   if$
214 }
215
216 %% neu 17/2/94                 Wenn ein ", " die Satzteile trennen soll.!
217 FUNCTION { part.of.sentence }
218 { output.state before.all =
219      'skip$
220      { mid.sentence 'output.state := }
221   if$
222 }
223
224 FUNCTION {new.sentence.checka}
225 { empty$
226     'skip$
227     'new.sentence
228   if$
229 }
230
231 FUNCTION {output.nonnull}
232 { 's :=
233   output.state after.block =
234       { add.period$  write$
235         newline$
236         "\newblock " write$
237       }
238       { output.state before.all =
239           { write$ }
240           {  output.state colon.after =
241                { ": " * write$
242                  newline$
243                  "\newblock " write$
244                }
245                { output.state period.dash =
246                    { ". -- " *  write$
247                      newline$
248                      "\newblock " write$
249                    }
250                    { output.state mid.sentence =
251                        { ", " * write$ }
252                        { output.state after.sentence =
253                            { " " * write$ }
254                            { output.state after.firstblock =
255                                { add.period$  write$
256                                  newline$
257                                  "\newblock " write$
258                                }
259                                { write$
260                                  newline$
261                                  "\newblock " write$
262                                }
263                              if$
264                             }
265                           if$
266                        }
267                      if$
268                    }
269                  if$
270                }
271              if$
272            }
273          if$
274        after.block 'output.state :=
275       }
276     if$
277     s
278  }
279
280 FUNCTION {output}
281 { duplicate$ empty$
282     'pop$
283     'output.nonnull
284   if$
285 }
286
287 FUNCTION {output.check}
288 { 't :=
289   duplicate$ empty$
290     { pop$ "empty " t * " in " * cite$ * warning$ }
291     'output.nonnull
292   if$
293 }
294
295
296 FUNCTION {new.block}
297 { output.state before.all =
298     'skip$
299     { after.block 'output.state := }
300   if$
301 }
302
303 FUNCTION {not}
304 {   { #0 }
305     { #1 }
306   if$
307 }
308
309 FUNCTION {and}
310 {   'skip$
311     { pop$ #0 }
312   if$
313 }
314
315 FUNCTION {or}
316 {   { pop$ #1 }
317     'skip$
318   if$
319 }
320
321 FUNCTION {format.doi}
322 { doi empty$
323     { "" }
324     { new.block " \url{http://dx.doi.org/" doi * "}" *
325      %%      { new.block " \url{http://dx.medra.org/" doi * "}" *
326     }
327   if$
328 }
329
330
331 FUNCTION {format.url}
332 { urn missing$
333      { doi missing$
334           { url empty$
335              { "" }
336              { type empty$ NOT
337                  { type #-1 #4 substring$ "mail" =
338                    type #1 #4 substring$ "Mail" =
339                    OR
340                       { " Adressat: \url{" url * "}" * }
341                       { " \url{" url * "}" * }%%   evtl. "URL" oder "<...>"
342                     if$
343                   }
344                   { " \url{" url * "}" * }%%   evtl. "URL" oder "<...>"
345                 if$
346               }
347            if$
348           }
349           { format.doi }
350         if$
351       }
352       { " \url{http://nbn-resolving.de/urn/resolver.pl?urn=" urn * "}" *
353       }
354     if$
355 }
356
357 FUNCTION {format.full.names}
358 {'s :=
359   #1 'nameptr :=
360   s num.names$ 'numnames :=
361   numnames 'namesleft :=
362     { namesleft #0 > }
363     { s nameptr
364       "{vv~}{ll}" format.name$ 't :=
365       nameptr #1 >
366         {
367           namesleft #1 >
368             { ", " * t * }
369             {
370               numnames #2 >
371                 { "," * }
372                 'skip$
373               if$
374               t "others" =
375                 { ua.etal * }
376                 { und * t * }
377               if$
378             }
379           if$
380         }
381         't
382       if$
383       nameptr #1 + 'nameptr :=
384       namesleft #1 - 'namesleft :=
385     }
386   while$
387 }
388
389 FUNCTION {author.editor.full}
390 { author empty$
391     { editor empty$
392         { "" }
393         { editor format.full.names }
394       if$
395     }
396     { author format.full.names }
397   if$
398 }
399
400 FUNCTION {author.full}
401 { author empty$
402     { "" }
403     { author format.full.names }
404   if$
405 }
406
407 FUNCTION {editor.full}
408 { editor empty$
409     { "" }
410     { editor format.full.names }
411   if$
412 }
413
414 FUNCTION {make.full.names}
415 { type$ "book" =
416   type$ "inbook" =
417   or
418     'author.editor.full
419     { type$ "proceedings" =
420         'editor.full
421         'author.full
422       if$
423     }
424   if$
425 }
426
427
428 FUNCTION {output.bibitem}
429 { newline$
430   "\bibitem[" write$
431   label write$
432   ")" make.full.names duplicate$ short.list =
433      { pop$ }
434      { * }
435    if$
436   "]{" * write$
437   cite$ write$
438   "}" write$
439   newline$
440   "\dinatlabel{" dinat.label * "}\\ " *
441   write$
442   ""
443   before.all 'output.state :=
444 }
445
446
447 FUNCTION {fin.entry}
448 { write$
449   newline$
450 }
451
452 FUNCTION {field.or.null}
453 { duplicate$ empty$
454     { pop$ "" }
455     'skip$
456   if$
457 }
458
459 FUNCTION {emphasize}
460 { duplicate$ empty$
461     { pop$ "" }
462     { "\emph{" swap$ * "}" * }
463   if$
464 }
465
466 FUNCTION { capitalize }
467  { duplicate$ empty$
468     { pop$ "" }
469     { "\textsc{" swap$ * "}" * }
470   if$
471 }
472
473 FUNCTION {article.in.journal}
474 { duplicate$ empty$
475     { pop$ "" }
476     { author missing$ title missing$ and
477             { emphasize }
478             { emphasize "{In: }" swap$ * }
479           if$
480      }
481   if$
482 }
483
484 FUNCTION {format.names}
485 { 's :=
486   "" 'u  :=
487   #1 'nameptr :=
488   s num.names$ 'numnames :=
489   numnames 'namesleft :=
490     { namesleft #0 > }
491     {
492        s nameptr "{ll}" format.name$ 't :=
493        t capitalize 't :=
494        s nameptr "{, ff}{ vv}" format.name$ 'u :=
495        u  text.length$  'lang :=
496        #1 'zahl :=
497        "" 'v :=
498          {  zahl  lang  <  }
499          {  u  zahl  #1  substring$  "~"  =
500                {  v  ""  =
501                      {  u  #1  zahl  #1  -  substring$  'v :=  }
502                      'skip$
503                   if$
504                   v  u  zahl  #2  substring$  *  "."  *  'v :=  }
505                'skip$
506             if$
507             zahl  #1  +  'zahl :=  }
508       while$
509       v  ""  =
510          {  u  'v :=  }
511          'skip$
512       if$
513       t  v  *  fkt  *  't :=
514       nameptr #1 >
515          { namesleft #1 >
516              { " ; " * t * }
517              { numnames #2 >
518                   { " " * }
519                   'skip$
520                if$
521                t "\textsc{others}" = t "\textsc{others} (Hrsg.)" = or
522                   { ua.etal * }
523                   { " ; " * t * }
524                if$
525                }
526             if$  %% Ende der namesleft-Pruefung
527           }
528             't
529            if$  %%  Ende der nameptr-Pruefung
530
531       nameptr #1 + 'nameptr :=
532       namesleft #1 -  'namesleft :=
533     }
534   while$  %%  Ende von { namesleft #0 > } ganz oben
535   "" 'fkt :=  %% fkt wird zurueckgesetzt
536 }
537
538 FUNCTION {format.authors}
539 { author empty$
540     { "" }
541     { author format.names }
542   if$
543 }
544
545 FUNCTION {format.editors}
546 { editor empty$
547    { author empty$
548        { "empty author and editor in " cite$ * warning$ "" }
549        'skip$
550      if$
551    }
552    { author empty$
553         { " (Hrsg.)" 'fkt :=
554           editor format.names %%%%*  %%% Test 26.11.03
555         }
556         { " (Hrsg.)" 'fkt :=
557           " ; " * editor format.names *
558         }
559       if$
560    }
561  if$
562  }
563
564 FUNCTION { format.authors.organization }
565 { type$ "misc" =
566         { organization empty$
567             { author empty$
568                { "" }
569                { author format.names " (Erfinder)" * }
570              if$
571             }
572             { author empty$
573                { organization  }
574                { author format.names " (Erfinder); " *
575                  organization * " (Anmelder)" *
576                }
577              if$
578             }
579           if$
580         }
581      'skip$
582    if$
583 }
584
585 FUNCTION { format.editors.organization }
586 { organization empty$
587     'skip$
588     { type$ "misc" =
589         { organization }
590         { * " ; " * organization " (Veranst.)" *}
591       if$
592     }
593   if$
594 }
595
596 FUNCTION {format.ed.incoll}
597 { editor empty$
598      { "" }
599      { " (Hrsg.)" 'fkt :=
600        editor format.names
601      }
602   if$
603 }
604
605
606 FUNCTION {format.title}
607 { title empty$
608     { "" }
609     { title }  %% Text so wie er dasteht im Feld title
610   if$
611 }
612
613 FUNCTION {format.number}
614 { number empty$
615     { "" }
616     { number " " * }  %% Text so wie er im Feld number steht plus " "
617   if$
618 }
619
620 FUNCTION {format.type}
621 { type empty$
622     { "" }
623     { type " " * }  %% Text wie er dasteht; Schutzrecht, Norm etc.
624   if$
625 }
626
627 FUNCTION {n.dashify}
628 { 't :=
629   ""
630     { t empty$ not }
631     { t #1 #1 substring$ "-" =
632         { t #1 #2 substring$ "--" = not
633             { "--" *
634               t #2 global.max$ substring$ 't :=
635             }
636             {   { t #1 #1 substring$ "-" = }
637                 { "-" *
638                   t #2 global.max$ substring$ 't :=
639                 }
640               while$
641             }
642           if$
643         }
644         { t #1 #1 substring$ *
645           t #2 global.max$ substring$ 't :=
646         }
647       if$
648     }
649   while$
650 }
651
652 %%  Auflagenvermerke gibt man komplett, einschliesslich Abkuerzungen in
653 %%  das Feld edition ein: ---> EDITION= { 3., erw. und verb. Aufl. }
654 %%  oder fremdsprachlich:      EDITION= { 2nd edition }
655
656 FUNCTION {format.edition}
657 { edition empty$
658     { "" }
659     { edition }
660   if$
661 }
662
663 FUNCTION {format.date}
664 { year duplicate$ empty$
665     { "empty year in " cite$ * warning$
666        pop$ "" }
667      'skip$
668   if$
669   month empty$
670      'skip$
671     { type$ "book" =
672       type$ "inbook" =
673        OR
674          'skip$
675          { month " " * swap$ * }
676       if$
677      }
678    if$
679 %%  ohne Extrabuchstabe beim Erscheinungsjahr
680 }
681
682
683 FUNCTION {format.edition.or.date}
684 { edition empty$ year empty$ and
685     { "" }
686     { edition empty$
687         { type empty$ NOT
688             { type #-1 #4 substring$ "mail" =
689               type #1 #4 substring$ "Mail" =
690               OR
691                 { " gesendet: " "-- " type * swap$ *
692                   format.date *
693                 }
694                 { "\,Version:\,"
695                   format.date *
696                 }
697               if$
698              }
699              { "\,Version:\,"
700                format.date *
701              }
702            if$
703         }
704         { year empty$
705             { "\,Version:\," edition * }
706             { "\,Version:\," edition * ", " *
707               format.date *
708             }
709           if$
710         }
711       if$
712     }
713   if$
714 }
715
716 FUNCTION {format.edition.or.version}
717 { url empty$ doi empty$ urn empty$ and and
718    { format.edition }
719    { format.edition.or.date }
720  if$
721 }
722
723 FUNCTION {format.address.publisher.year}
724 {  publisher empty$
725       { address empty$
726           { year empty$
727               { "" }
728               { url empty$
729                    { year }
730                    { "" }
731                  if$
732               }
733             if$
734           }
735           { "there's an address but no publisher in " cite$ * warning$
736               address ", " * format.date *
737           }
738         if$
739       }
740       {  url empty$
741           { address empty$
742                { year empty$
743                    { "neither address nor publication date in " cite$ * warning$
744                       publisher
745                    }
746                    { publisher ", " * format.date * }
747                  if$
748                }
749                { year empty$
750                    { address " : " * publisher * }
751                    { address " : " * publisher * ", " * format.date * }
752                  if$
753                }
754              if$
755           }
756           { publisher }
757         if$
758       }
759     if$
760 }
761
762 FUNCTION {format.howpublished}
763 { url missing$ urn missing$ doi missing$ AND AND
764     { howpublished empty$
765         { address empty$
766             { type empty$
767               { "" }
768               { type #-1 #4 substring$ "mail" =
769                   { "(gesendet: " new.sentence
770                     format.date * ")" *
771                   }
772                   { "" }
773                 if$
774                }
775              if$
776              format.date *
777             }
778             { address ", " * format.date * }
779           if$
780         }
781         { address empty$
782             { howpublished ", " * format.date * }
783             { address " : " * howpublished * ", " * format.date * }
784           if$
785         }
786       if$
787     }
788     { howpublished empty$
789         { "" }
790         { howpublished }
791       if$
792     }
793   if$
794 }
795
796 FUNCTION {format.version.url}
797 { url empty$ doi empty$ urn empty$ and and
798    { type$ "techreport" =
799        { format.edition }
800        { "" }
801      if$
802    }
803    { format.edition.or.date output format.url }
804  if$
805 }
806
807 FUNCTION {format.lastchecked}
808 %%  dann gibt es einen URL oder URN oder DOI!
809 {   url empty$ doi empty$ urn empty$ and and
810         { skip$ }
811         { format.url output
812           type set.period.dash.check
813           type output }
814       if$
815     lastchecked empty$
816         { skip$ }
817         { part.of.sentence
818           lastchecked "Abruf: " swap$ *
819         }
820       if$
821  }
822
823 FUNCTION {format.lastchecked.or.type}
824 {  lastchecked empty$
825       { url empty$ doi empty$ urn empty$ and and
826           { type empty$
827              { skip$ }
828              { type set.period.dash.check
829                type output
830              }
831            if$
832           }
833           { type empty$
834               { skip$ }
835               { type #-1 #4 substring$ "mail" =
836                 type #1 #4 substring$ "Mail" =
837                 OR
838                   { skip$ }
839                   { type set.period.dash.check
840                          type output }
841                      if$
842                    }
843                  if$
844                }
845              if$
846            }
847        { url empty$ doi empty$ urn empty$ and and
848           { "there's a lastchecked date but no url, urn or doi in "
849              cite$ * warning$
850           }
851           { type empty$
852                { "there's a URL and a lastchecked date but no type in "
853                   cite$ * warning$
854                }
855                { type set.period.dash.check
856                  type output
857                  part.of.sentence
858                  lastchecked "Abruf: " swap$ * output
859                }
860              if$
861           }
862         if$
863        }
864     if$
865 }
866
867 FUNCTION {format.btitle}
868 { title emphasize
869 }
870
871 FUNCTION {tie.or.space.connect}
872 { duplicate$ text.length$ #3 <
873     { "~" }
874     { " " }
875   if$
876   swap$ * *
877 }
878
879 FUNCTION {format.btitle.vol}
880 { number empty$
881    { series empty$
882      { volume empty$
883         { title emphasize }
884         { title emphasize ". Bd." * volume tie.or.space.connect }
885        if$
886      }
887      { volume empty$
888         { title emphasize }%% ein Buch, das zusaetzl. SERIES=Reihentitel besitzt
889     %% jetzt kommt d. Fall des mehrbaendigen Werkes mit Gesamttitel=SERIES
890     %% Zaehlung=VOLUME und Bandtitel=TITLE;
891         { series emphasize ". Bd." * volume tie.or.space.connect
892                                  ": " * "{\emph{" * title * "}}" * }
893        if$
894      }
895      if$%% series-test
896    }
897    { title emphasize }%% wenn number ex., dann immer title-Feld
898   if$%% Ende number-test
899 }
900
901 FUNCTION {format.series.number.din}
902 { volume empty$
903     { number empty$
904           { series empty$
905                { "" }
906                { "(" series * ")" * } %% d. Seriennr koennte auch gleich hier
907                                       %% im SERIES-Feld miterfasst werden
908             if$
909           }
910           { series empty$
911                { "(" number tie.or.space.connect ")" *
912                  "there's a number but no series in " cite$ * warning$
913                }
914                { "(" series * number tie.or.space.connect ")" * }
915             if$
916           }
917        if$
918      }
919      { series empty$
920           { "" }
921           { type$ "proceedings" =  %% Sonderfall, es darf VOLUME und NUMBER ex. !
922                 { number empty$
923                     { "(" series * ")" * }
924                     { "(" series * number tie.or.space.connect ")" * }
925                   if$
926                 }
927                 { "" }%%   Ausstieg mit Nullstring, s. Kommentar
928             if$
929           }%% bei gezaehlten Reihen MUSS die Reihennr. im Feld NUMBER stehen!
930        if$ %% wenn also d. Feld VOLUME nicht leer ist, dann liegt ausser bei
931            %% Typ PROCEEDINGS falsche
932       }     %% Erfassung vor und es erfolgt d. Ausstieg mit d. Nullstring!
933   if$
934 }
935
936 FUNCTION {format.tr.series.or.number}
937 {    number empty$
938        { series empty$
939            { "" }
940            { "(" series * ")" * }
941          if$
942        }
943        { series empty$
944          { "(" number * ")" * }
945          { "(" series * number tie.or.space.connect ")" * }
946        if$
947        }
948      if$
949  }
950
951 FUNCTION {format.misc.series}
952 { series empty$
953     { "" }
954     { "(" series * ")" * }
955   if$
956 }
957 FUNCTION { format.doi.urn }
958 { urn empty$
959      { doi empty$
960           { "" }
961           { "DOI" doi n.dashify tie.or.space.connect }
962        if$
963      }
964      { "URN" urn n.dashify tie.or.space.connect }
965   if$
966 }
967
968 FUNCTION { format.isbn.issn }
969 { isbn empty$
970      { issn empty$
971           { "" }
972           { "ISSN" issn n.dashify tie.or.space.connect }
973        if$
974      }
975      { "ISBN" isbn n.dashify tie.or.space.connect }
976   if$
977 }
978
979 FUNCTION {format.pages.book}
980 { pages empty$
981     { "" }
982     { "" pages n.dashify tie.or.space.connect " S" *}
983   if$
984 }
985
986 FUNCTION {format.pages}
987 { pages empty$
988     { "" }
989     { url empty$
990         { "S." pages n.dashify  tie.or.space.connect }
991         { pages }
992       if$
993     }
994   if$
995 }
996
997 FUNCTION {format.vol.year.num.pages}
998 { volume field.or.null
999     year empty$
1000       { "there's a volume but no year in " cite$ * warning$ }
1001       { " (" year * ")" * * }
1002     if$
1003     month empty$
1004       'skip$
1005       { ", " month * * }
1006     if$
1007     number empty$
1008       'skip$
1009       { ", Nr. " number * * }
1010     if$
1011     pages empty$
1012       'skip$
1013       { duplicate$ empty$
1014         { pop$ "" }
1015         { title missing$
1016             { ", " format.pages.book * *}
1017             { ", " format.pages * *}
1018           if$
1019         }
1020       if$
1021     }
1022   if$
1023 }
1024
1025 FUNCTION {format.chapter.inbook}
1026 { duplicate$  empty$
1027     { pop$ "empty chapter in " cite$ * warning$ }
1028     { type empty$
1029          { "\emph{Kapitel\/} " swap$ tie.or.space.connect }
1030          { type " " * swap$ * }%%  wenn keine bes. Abschnittsform gen. werden soll,
1031                  %%  koennte e. kl. Zwischenraum gewaehlt werden, z.B. " \, "
1032        if$
1033      }
1034   if$
1035 }
1036
1037 FUNCTION {format.chapter.pages}
1038 { chapter empty$
1039     'format.pages
1040     { type empty$
1041         { "Kapitel " }
1042         { url empty$
1043            { type }
1044            { "Kapitel " }
1045          if$
1046         }
1047       if$
1048       chapter tie.or.space.connect
1049       pages empty$
1050         'skip$
1051         { ", " * format.pages * }
1052       if$
1053     }
1054   if$
1055 }
1056
1057 FUNCTION {format.in.ed.booktitle.din}
1058 { booktitle empty$
1059     { "" }
1060     { editor empty$
1061         { volume empty$
1062             { "{In: }" booktitle emphasize * }%% n. Belieben fettes In:
1063             { "{In: }" booktitle emphasize *  %%      - " -
1064               " Bd." volume tie.or.space.connect *
1065             }
1066           if$
1067         }
1068         { volume empty$
1069             { "{In: }" format.ed.incoll * ": " * booktitle emphasize * }
1070             { "{In: }" format.ed.incoll * ": " * booktitle emphasize *
1071               " Bd." volume tie.or.space.connect *
1072             }
1073           if$
1074         }
1075       if$
1076     }
1077   if$
1078 }
1079
1080 FUNCTION {format.thesis.tr.type}
1081 { type empty$
1082     'skip$
1083    { pop$
1084      type
1085    }
1086  if$
1087 }
1088
1089 FUNCTION {format.digital.resource.type}
1090 { lastchecked empty$
1091       { url empty$ doi empty$ urn empty$ and and
1092           { skip$ }
1093           { eress set.period.dash.check
1094             eress output
1095           }
1096         if$
1097       }
1098       { url empty$ doi empty$ urn empty$ and and
1099           { "there's a lastchecked date but no url, urn or doi in "
1100              cite$ * warning$
1101           }
1102           { onlress set.period.dash.check
1103             onlress output
1104             part.of.sentence
1105             lastchecked "Abruf: " swap$ * output
1106           }
1107         if$
1108       }
1109     if$
1110 }
1111
1112 FUNCTION {format.online.resource}
1113 { lastchecked empty$
1114       { url empty$ doi empty$ urn empty$ and and
1115           { skip$ }
1116           { onlress set.period.dash.check
1117             onlress output
1118           }
1119         if$
1120       }
1121       { url empty$ doi empty$ urn empty$ and and
1122           { "there's a lastchecked date but no url, urn or doi in "
1123              cite$ * warning$
1124           }
1125           { onlress set.period.dash.check
1126             onlress output
1127             part.of.sentence
1128             lastchecked "Abruf: " swap$ * output
1129           }
1130         if$
1131       }
1132     if$
1133 }
1134
1135
1136 FUNCTION {format.type.or.online.resource}
1137 {  type empty$
1138        { format.online.resource }
1139        { type set.period.dash.check
1140          type output }
1141      if$
1142 }
1143
1144 FUNCTION {format.article.crossref}
1145 { key empty$
1146     { journal empty$
1147         { "need key or journal for " cite$ * " to crossref " * crossref *
1148           warning$
1149           ""
1150         }
1151         { "{In: }{\emph " journal * "}" * }%% n. Belieben fettes In:
1152       if$
1153     }
1154     { "{In: }" key * }%%    s.o. fettes In:
1155   if$
1156   " {\textbf{\citep{" * crossref * "}" * "}" * "}" * ", " * format.pages *
1157 }
1158
1159 FUNCTION {format.crossref.editor}
1160 %vorher,Lue  { editor #1 "{vv~}{ll}" format.name$ " (Hrsg.)" *
1161  { editor #1 "{ll}" format.name$ " (Hrsg.)" *
1162    editor num.names$ duplicate$
1163    #2 >
1164     { pop$ " [u.~a.~]" * }
1165 %%    { pop$ " et~al." * }
1166     { #2 <
1167         'skip$
1168         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1169             { " [u.~a.]" }
1170 %%            { " et~al." * }
1171             { " ; " * editor #2 "{vv~}{ll}" format.name$ * " (Hrsg.)" * }
1172           if$
1173         }
1174       if$
1175     }
1176   if$
1177 }
1178
1179 FUNCTION {format.inbk.vol.title}
1180 { volume empty$
1181      { " In: " }
1182      { title empty$
1183         { " In: Bd." volume tie.or.space.connect
1184                 " von " *
1185         }
1186         { "In: Bd." volume tie.or.space.connect ": " * title emphasize *
1187                      " (" * year * ") in " *
1188         }
1189       if$
1190      }
1191    if$
1192  }
1193
1194 FUNCTION {format.book.crossref}
1195 { type$ "inbook" =
1196    { format.inbk.vol.title }
1197    { volume empty$
1198        { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
1199          " "
1200        }
1201        { ". -- Bd." volume tie.or.space.connect
1202           " von " *
1203        }
1204      if$
1205     }
1206   if$
1207   editor empty$
1208   editor field.or.null author field.or.null =
1209   or
1210     { key empty$
1211         { series empty$
1212             { "need editor, key, or series for " cite$ * " to crossref " *
1213               crossref * warning$
1214               "" *
1215             }
1216             { "" * }%% dadurch kommt nach der Band Nr. gleich das label 2/6/99
1217 %%              { "{\emph{" * series * "}} {\textbf{siehe}} " * }
1218           if$
1219         }
1220         { key * }
1221       if$
1222     }
1223     { "" * }
1224   if$
1225   "{\textbf{\citep{" * crossref * "}" * "}" * "}" *
1226 }
1227
1228 FUNCTION {format.incoll.inproc.crossref}
1229 { editor empty$
1230     editor field.or.null author field.or.null =
1231     or
1232      { key empty$
1233         { booktitle empty$
1234             { "need editor, key, or booktitle for " cite$ * " to crossref " *
1235               crossref * warning$
1236               ""
1237             }
1238             { "{In: }{\emph " booktitle * "}" * }%%
1239           if$
1240         }
1241         { "{In: }" }
1242       if$
1243      }
1244     { "{In: }" }
1245   if$
1246   "{\textbf{\citep{" * crossref * "}" * "}" * "}" * ", " * format.pages *%
1247 }
1248
1249 FUNCTION {article}
1250 { output.bibitem
1251   format.authors "author" output.check
1252   set.colon.after
1253   format.title "title" output.check
1254   crossref missing$
1255     { journal article.in.journal output.nonnull
1256       new.sentence
1257       format.vol.year.num.pages output
1258       format.url output
1259     }
1260     { format.article.crossref output.nonnull }
1261   if$
1262   format.lastchecked.or.type
1263   note set.period.dash.check
1264   note output
1265   doi set.period.dash.check
1266   urn set.period.dash.check
1267   format.doi.urn output
1268   issn set.period.dash.check
1269   format.isbn.issn output
1270   fin.entry
1271 }
1272
1273 FUNCTION {book}
1274 { output.bibitem
1275   author empty$
1276     { format.editors "author and editor" output.check }
1277     { format.authors format.editors output.nonnull }
1278   if$
1279   set.colon.after
1280   crossref missing$
1281     { format.btitle.vol "title" output.check }
1282     { format.btitle "title" output.check }
1283   if$
1284   format.edition output
1285   format.address.publisher.year "publisher" output.check
1286   new.sentence
1287   crossref missing$
1288     { format.series.number.din output
1289       pages set.period.dash.check
1290       format.pages.book output
1291     }
1292     { format.book.crossref output.nonnull
1293       pages set.period.dash.check
1294       format.pages.book output
1295     }
1296   if$
1297   note set.period.dash.check
1298   note output
1299   format.doi output
1300   format.url output
1301   new.block
1302   isbn set.period.dash.check
1303   format.isbn.issn output
1304   fin.entry
1305 }
1306
1307 %%% fuer Internetquellen mit URL, 9.12.2004
1308 FUNCTION {booklet}
1309 { output.bibitem
1310   author empty$
1311     { format.editors "author and editor" output.check }
1312     { format.authors format.editors output.nonnull }
1313   if$
1314   set.colon.after
1315   format.btitle "title" output.check
1316   format.edition.or.version output
1317   format.url output
1318   format.howpublished output
1319   series new.sentence.checka
1320   format.series.number.din output
1321   pages set.period.dash.check
1322   format.pages.book output
1323   format.type.or.online.resource
1324   doi set.period.dash.check
1325   urn set.period.dash.check
1326   format.doi.urn output
1327   note set.period.dash.check
1328   note output
1329   format.isbn.issn output
1330   fin.entry
1331 }
1332
1333
1334 FUNCTION {inbook}
1335 { output.bibitem
1336     chapter format.chapter.inbook output.nonnull
1337       crossref missing$
1338       { author empty$
1339           { format.editors "\,{In:\,}" swap$ * "author and editor" output.check }
1340           { format.authors "\,{In:\,}" swap$ * output.nonnull }
1341         if$
1342         author empty$ editor empty$ AND
1343            { before.all 'output.state := }
1344            { set.colon.after }
1345          if$
1346       format.btitle.vol "title" output.check
1347       format.edition output
1348       format.address.publisher.year "publisher" output.check
1349       new.sentence
1350       format.series.number.din output
1351       isbn set.period.dash.check
1352       format.isbn.issn output
1353       part.of.sentence
1354       format.pages output
1355       note set.period.dash.check
1356       note output
1357     }
1358     { format.book.crossref output.nonnull
1359       part.of.sentence
1360       format.pages output
1361       note set.period.dash.check
1362       note output
1363     }
1364   if$
1365   fin.entry
1366 }
1367
1368 FUNCTION {incollection}
1369 { output.bibitem
1370   format.authors "author" output.check
1371   set.colon.after
1372   format.title "title" output.check
1373   format.version.url output
1374   crossref missing$
1375     { format.in.ed.booktitle.din "booktitle" output.check
1376       format.edition output
1377       format.address.publisher.year "publisher" output.check
1378       new.sentence
1379       format.series.number.din output
1380       part.of.sentence%% nach DIN soll das eigentlich ganz an das Ende
1381       format.chapter.pages "pages" output.check
1382       format.type.or.online.resource
1383       doi set.period.dash.check
1384       urn set.period.dash.check
1385       format.doi.urn output
1386       isbn set.period.dash.check
1387       issn set.period.dash.check
1388       format.isbn.issn output
1389       note set.period.dash.check
1390       note output
1391     }
1392     { format.incoll.inproc.crossref output.nonnull
1393       format.type.or.online.resource
1394       doi set.period.dash.check
1395       urn set.period.dash.check
1396       format.doi.urn output
1397       isbn set.period.dash.check
1398       issn set.period.dash.check
1399       format.isbn.issn output
1400       note set.period.dash.check
1401       note output
1402     }
1403   if$
1404   fin.entry
1405 }
1406
1407
1408 FUNCTION {inproceedings}
1409 { output.bibitem
1410   format.authors "author" output.check
1411   set.colon.after
1412   format.title "title" output.check
1413   crossref missing$
1414     { format.in.ed.booktitle.din "booktitle" output.check
1415       address empty$
1416         { organization new.sentence.checka
1417           organization output
1418           part.of.sentence
1419           format.address.publisher.year output
1420         }
1421         { format.address.publisher.year "publisher" output.check }
1422       if$
1423       new.sentence
1424       series empty$
1425         'skip$
1426         { format.series.number.din output }
1427       if$
1428       isbn set.period.dash.check
1429       issn set.period.dash.check
1430       format.isbn.issn output
1431       part.of.sentence
1432       format.pages output
1433       note set.period.dash.check
1434       note output
1435     }
1436     { format.incoll.inproc.crossref output.nonnull
1437       isbn set.period.dash.check
1438       issn set.period.dash.check
1439       format.isbn.issn output
1440       note set.period.dash.check
1441       note output
1442     }
1443   if$
1444   fin.entry
1445 }
1446
1447 FUNCTION {conference} { inproceedings }%% nach Patashnik, wg US-Kompatibilitaet
1448
1449 FUNCTION {manual}
1450 { output.bibitem
1451   author empty$
1452     { organization empty$
1453         { title empty$
1454             'skip$
1455             {format.btitle "title" output.check }
1456           if$
1457         }
1458         { organization output.nonnull
1459           set.colon.after
1460           format.btitle "title" output.check
1461         }
1462       if$
1463     }
1464     { format.authors output.nonnull
1465       set.colon.after
1466       format.btitle "title" output.check
1467     }
1468   if$
1469   format.edition "edition" output.check
1470   author empty$
1471     { organization empty$
1472         { address output
1473           part.of.sentence
1474         }
1475         'skip$
1476       if$
1477     }
1478     { address ": " *  organization * output
1479       part.of.sentence
1480     }
1481   if$
1482   format.date output
1483   pages set.period.dash.check
1484   format.pages.book output
1485   note set.period.dash.check
1486   note output
1487   format.doi output
1488   format.url output
1489   new.block
1490   fin.entry
1491 }
1492
1493 %%  Standard ist "Diplomarbeit", anderes mit TYPE="anderer Typ" erfassen!
1494 %%  z.B. TYPE={Hausarbeit}, TYPE={Diss.}, TYPE={Habil.}, TYPE={Magisterarb.}
1495 FUNCTION {mastersthesis}
1496 { output.bibitem
1497   format.authors "author" output.check
1498   set.colon.after
1499   format.btitle "title" output.check
1500   address output
1501   part.of.sentence
1502   school "school" output.check
1503   part.of.sentence
1504   "Diplomarbeit" format.thesis.tr.type output.nonnull
1505   part.of.sentence
1506   format.date "year" output.check
1507   format.url output
1508   format.digital.resource.type
1509   doi set.period.dash.check
1510   urn set.period.dash.check
1511   format.doi.urn output
1512   pages set.period.dash.check
1513   format.pages.book output
1514
1515   note set.period.dash.check
1516   note output
1517   fin.entry
1518 }
1519
1520 FUNCTION {phdthesis} %%  {mastersthesis}% ist identisch bis auf Standardwert, s.o.
1521 { output.bibitem
1522   format.authors "author" output.check
1523   set.colon.after
1524   format.btitle "title" output.check
1525   address output
1526   part.of.sentence
1527   school "school" output.check
1528   part.of.sentence
1529   "Diss." format.thesis.tr.type output.nonnull % koennte auch `Dissertation' sein
1530   part.of.sentence
1531   format.date "year" output.check
1532   format.url output
1533   format.digital.resource.type
1534   doi set.period.dash.check
1535   urn set.period.dash.check
1536   format.doi.urn output
1537   pages set.period.dash.check
1538   format.pages.book output
1539   note set.period.dash.check
1540   note output
1541   fin.entry
1542 }
1543
1544
1545 %% Normen, Vornormen, Schutzrechte (Patente) werden hiermit erfasst;
1546 %% (z.Zt. auch noch Internetressourcen)
1547 %% das type-Feld uebernimmt eine wichtige Steuerfunktion:
1548 FUNCTION {misc}
1549 { output.bibitem
1550    type missing$ not
1551        { type duplicate$ #1 #4 substring$ "Norm" =
1552            type #1 #4 substring$ "Vorn" = OR
1553            { " " *
1554              format.number * output
1555              new.sentence
1556              format.date output
1557              title empty$
1558                { skip$ }
1559                { add.period$ new.sentence }
1560              if$
1561              format.btitle "title" output.check
1562              note set.period.dash.check
1563              note output
1564            }
1565            { duplicate$ #1 #6 substring$ "Schutz" =
1566                 { " " * format.number * output
1567                   new.sentence
1568                   "(" * format.date ")" * output
1569                   add.period$ new.sentence
1570                   format.authors.organization add.period$ output
1571                   note output
1572                 }
1573             %%  wenn irgendein anderer Typ eingetragen ist
1574                 { pop$ pop$ ""
1575                   title empty$
1576                      { note empty$
1577                          { url empty$
1578                              { "there's no relevant field in " cite$ warning$
1579                                 pop$ ""
1580                              }
1581                              { format.url output }%%%
1582                            if$
1583                          }
1584                          { note " " * output.nonnull }
1585                        if$
1586                      }
1587                      { author empty$
1588                           { editor empty$
1589                                { organization empty$
1590                                    { skip$ }
1591                                    { format.editors.organization output.nonnull
1592                                      set.colon.after
1593                                    }
1594                                  if$
1595                                }
1596                                { format.editors format.editors.organization
1597                                  output.nonnull set.colon.after
1598                                }
1599                              if$
1600                           }
1601                           { format.authors format.editors output.nonnull
1602                             set.colon.after
1603                           }
1604                         if$
1605                  format.btitle output.nonnull
1606                  url empty$
1607                    { format.edition output
1608                      format.howpublished output}
1609                    { format.howpublished output
1610                      format.edition.or.date output
1611                      format.url output
1612                    }
1613                  if$
1614                  format.lastchecked.or.type
1615                  new.sentence
1616                  format.misc.series output
1617                  %% note set.period.dash.check
1618                  add.period$
1619                  note output
1620                 }
1621               if$
1622             }
1623          if$
1624           }
1625         if$
1626        }
1627        %% wenn es keinen type gibt
1628        { title empty$
1629              { note empty$
1630                  { url empty$
1631                      { "there's no relevant field in " cite$ warning$
1632                        pop$ ""
1633                      }
1634                      { format.url output }%%%  das waere e. reine URL
1635                    if$
1636                  }
1637                  { note " " * output.nonnull
1638                  %%  format.url format.date output
1639                  }
1640                if$
1641              }
1642              { author empty$
1643                    { editor empty$
1644                         { organization empty$
1645                              { skip$ }
1646                              { format.editors.organization output.nonnull
1647                                set.colon.after
1648                              }
1649                            if$
1650                         }
1651                         { format.editors format.editors.organization
1652                           output.nonnull set.colon.after
1653                         }
1654                       if$
1655                    }
1656                    { format.authors format.editors output.nonnull
1657                      set.colon.after
1658                    }
1659                  if$
1660               format.btitle output.nonnull
1661               url empty$
1662                 { format.edition output
1663                   format.howpublished output}
1664                 { format.howpublished output
1665                   format.url output
1666                   format.edition.or.date output
1667                   format.lastchecked.or.type
1668                 }
1669               if$
1670               new.sentence
1671               format.misc.series output
1672               note set.period.dash.check
1673               note output
1674           }
1675         if$
1676       }
1677     if$
1678  fin.entry
1679 }
1680
1681 FUNCTION {proceedings}
1682 { output.bibitem
1683     editor empty$
1684       { organization empty$
1685            { "empty organization and editor in " cite$ * warning$ }
1686            { organization " (Veranst.)" * output }
1687         if$
1688       }
1689       { format.editors format.editors.organization output.nonnull }
1690     if$
1691   set.colon.after
1692   format.btitle "title" output.check
1693   volume empty$
1694     { skip$ }
1695     { "{\textnormal{Bd.}}" volume tie.or.space.connect emphasize "volume" output.check }
1696   if$
1697   format.address.publisher.year "publisher" output.check
1698   new.sentence
1699   format.series.number.din output.nonnull
1700   pages set.period.dash.check
1701   format.pages.book output
1702   note set.period.dash.check
1703   note output
1704   isbn set.period.dash.check
1705   issn set.period.dash.check
1706   format.isbn.issn output
1707   fin.entry
1708 }
1709
1710 FUNCTION {techreport}
1711 { output.bibitem
1712   author empty$
1713     { format.editors "author and editor" output.check }
1714     { format.authors  format.editors output.nonnull }
1715   if$
1716   set.colon.after
1717   format.title "title" output.check
1718   institution new.sentence.checka
1719   institution empty$
1720      'skip$
1721      { " / " institution *  output.nonnull }
1722   if$
1723   format.version.url output
1724   format.address.publisher.year output
1725   number new.sentence.checka
1726   format.tr.series.or.number "number" output.check
1727   "Forschungsbericht" format.thesis.tr.type set.period.dash.check
1728   "Forschungsbericht" format.thesis.tr.type output
1729   format.digital.resource.type
1730   pages set.period.dash.check
1731   format.pages.book output
1732   note "note" output.check
1733   new.block
1734   isbn set.period.dash.check
1735   issn set.period.dash.check
1736   format.isbn.issn output
1737   fin.entry
1738 }
1739
1740
1741 FUNCTION {unpublished} {misc}%% author, title, note muessen sein! howpublished
1742 %%                           %% entfaellt natuerlich
1743
1744 FUNCTION {default.type} { misc }
1745
1746 MACRO {jan} {"Januar"}
1747
1748 MACRO {feb} {"Februar"}
1749
1750 MACRO {mar} {"M{\^^b a}rz"}
1751
1752 MACRO {apr} {"April"}
1753
1754 MACRO {mai} {"Mai"}
1755
1756 MACRO {may} {"Mai"}
1757
1758 MACRO {jun} {"Juni"}
1759
1760 MACRO {jul} {"Juli"}
1761
1762 MACRO {aug} {"August"}
1763
1764 MACRO {sep} {"September"}
1765
1766 MACRO {okt} {"Oktober"}
1767
1768 MACRO {oct} {"Oktober"}
1769
1770 MACRO {nov} {"November"}
1771
1772 MACRO {dez} {"Dezember"}
1773
1774 MACRO {dec} {"Dezember"}
1775
1776 %%$$$  stillgelegte Beispiele fuer den Gebrauch von Kuerzeln (hier Zs-Titel).
1777
1778 %%MACRO {acmcs} {"ACM Computing Surveys"}
1779
1780 %%MACRO {acta} {"Acta Informatica"}
1781
1782 READ
1783
1784 FUNCTION {sortify}
1785 { purify$
1786   "l" change.case$
1787 }
1788
1789 FUNCTION {chop.word}
1790 { 's :=
1791   'len :=
1792   s #1 len substring$ =
1793     { s len #1 + global.max$ substring$ }
1794     's
1795   if$
1796 }
1797
1798 FUNCTION {format.lab.names}
1799 { uppercase 's :=
1800   s #1 "{vv~}{ll}" format.name$
1801   s num.names$ duplicate$
1802   #2 >
1803     { pop$ ua.etal * }
1804     { #2 <
1805         'skip$
1806         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1807             { ua.etal * }
1808             { und * s #2 "{vv~}{ll}" format.name$ * }
1809           if$
1810         }
1811       if$
1812     }
1813   if$
1814 }
1815
1816 FUNCTION {author.key.label}
1817 { author empty$
1818     { key empty$
1819         { cite$ #1 #3 substring$ }
1820         'key
1821       if$
1822     }
1823     { author format.lab.names }
1824   if$
1825 }
1826
1827 FUNCTION {author.editor.key.label}
1828 { author empty$
1829     { editor empty$
1830         { key empty$
1831             { cite$ #1 #3 substring$ }
1832             'key
1833           if$
1834         }
1835         { editor format.lab.names }
1836       if$
1837     }
1838     { author format.lab.names }
1839   if$
1840 }
1841
1842 FUNCTION {author.key.organization.label}
1843 { author empty$
1844     { key empty$
1845         { organization empty$
1846             { cite$ #1 #3 substring$ }
1847             { "The " #4 organization chop.word #3 text.prefix$ }
1848           if$
1849         }
1850         { key }
1851       if$
1852     }
1853     { author format.lab.names }
1854   if$
1855 }
1856
1857 FUNCTION {editor.key.organization.label}
1858 { editor empty$
1859     { key empty$
1860         { organization empty$
1861             { cite$ #1 #3 substring$ }
1862             { "The " #4 organization chop.word #4 text.prefix$ }
1863           if$
1864         }
1865         { key }
1866       if$
1867     }
1868     { key empty$%%  das key-feld soll zwangsweise das label machen!
1869         { editor format.lab.names }
1870         { key }%%das ganze label
1871       if$
1872     }
1873   if$
1874 }
1875
1876 FUNCTION {calc.short.authors}
1877 { type$ "book" =
1878   type$ "inbook" =
1879   or
1880     'author.editor.key.label
1881     { type$ "proceedings" =
1882         'editor.key.organization.label
1883         { type$ "manual" =
1884             'author.key.organization.label
1885             'author.key.label
1886           if$
1887         }
1888       if$
1889     }
1890   if$
1891   'short.list :=
1892 }
1893
1894 FUNCTION {calc.label}
1895 { calc.short.authors
1896   short.list
1897   "("
1898   *
1899 %% year duplicate$ empty$
1900 %% short.list key field.or.null = or
1901 %%     { pop$ "" }
1902 %%     'skip$
1903 %%  if$
1904   year field.or.null purify$ #1 #4 substring$
1905   *
1906   'label :=
1907   short.list " " *
1908   year field.or.null purify$ #1 #4 substring$ * 'dinat.label :=
1909 }
1910
1911 FUNCTION {sort.format.names}
1912 { 's :=
1913   #1 'nameptr :=
1914   ""
1915   s num.names$ 'numnames :=
1916   numnames 'namesleft :=
1917     { namesleft #0 > }
1918     { nameptr #1 >
1919         { "   " * }
1920         'skip$
1921       if$
1922       s nameptr "{ll{ }}{  ff{ }}{ vv{ }}{  jj{ }}" format.name$ 't :=
1923       nameptr numnames = t "others" = and
1924         { ua.etal * }
1925         { t sortify * }
1926       if$
1927       nameptr #1 + 'nameptr :=
1928       namesleft #1 - 'namesleft :=
1929     }
1930   while$
1931 }
1932
1933 FUNCTION {sort.format.title}
1934 { 't :=
1935   "A " #2
1936     "An " #3
1937       "Der " #4
1938         "Die " #4
1939           "Das " #4
1940             "Ein " #4
1941               "Eine " #5
1942                   "The " #4 t chop.word
1943                chop.word
1944              chop.word
1945            chop.word
1946          chop.word
1947        chop.word
1948     chop.word
1949   chop.word
1950   sortify
1951   #1 global.max$ substring$
1952 }
1953
1954 FUNCTION {author.sort}
1955 { author empty$
1956     { key empty$
1957         { "to sort, need author or key in " cite$ * warning$
1958           ""
1959         }
1960         { key sortify }
1961       if$
1962     }
1963     { author sort.format.names }
1964   if$
1965 }
1966
1967 FUNCTION {author.editor.sort}
1968 { author empty$
1969     { editor empty$
1970         { key empty$
1971             { "to sort, need author, editor, or key in " cite$ * warning$
1972               ""
1973             }
1974             { key sortify }
1975           if$
1976         }
1977         { editor sort.format.names }
1978       if$
1979     }
1980     { author sort.format.names }
1981   if$
1982 }
1983
1984 FUNCTION {author.organization.sort}
1985 { author empty$
1986     { organization empty$
1987         { key empty$
1988             { "to sort, need author, organization, or key in " cite$ * warning$
1989               ""
1990             }
1991             { key sortify }
1992           if$
1993         }
1994         { "The " #4 organization chop.word sortify }
1995       if$
1996     }
1997     { author sort.format.names }
1998   if$
1999 }
2000
2001 FUNCTION {editor.organization.sort.PWD}%% so war es in plainnat
2002 { editor empty$
2003     { organization empty$
2004         { key empty$
2005             { "to sort, need editor, organization, or key in " cite$ * warning$
2006               ""
2007             }
2008             { key sortify }
2009           if$
2010         }
2011         { "The " #4 organization chop.word sortify }
2012       if$
2013     }
2014     { editor sort.format.names }
2015   if$
2016 }
2017
2018 FUNCTION {editor.organization.sort}%%das key-Feld soll z. Sortieren ben. werden
2019 { key empty$
2020     { editor empty$
2021        { organization empty$
2022             { "to sort, need editor, organization, or key in " cite$ * warning$
2023              ""
2024             }
2025             { "The " #4 organization chop.word sortify }
2026           if$
2027         }
2028         { editor sort.format.names }
2029       if$
2030     }
2031     { key sortify }
2032   if$
2033 }
2034
2035 FUNCTION {presort}
2036 { calc.label
2037   label sortify
2038   "    "
2039   *
2040   type$ "book" =
2041   type$ "inbook" =
2042   or
2043     'author.editor.sort
2044     { type$ "proceedings" =
2045         'editor.organization.sort
2046         { type$ "manual" =
2047             'author.organization.sort
2048             'author.sort
2049           if$
2050         }
2051       if$
2052     }
2053   if$
2054   "    "
2055   *
2056   year field.or.null sortify
2057   *
2058   "    "
2059   *
2060   title field.or.null
2061   sort.format.title
2062   *
2063   #1 entry.max$ substring$
2064   'sort.label :=
2065   sort.label *
2066   #1 entry.max$ substring$
2067   'sort.key$ :=
2068 }
2069
2070 ITERATE {presort}
2071
2072 SORT
2073
2074 FUNCTION {initialize.longest.label}
2075 { "" 'longest.label :=
2076   #0 int.to.chr$ 'last.label :=
2077   "" 'next.extra :=
2078   #0 'longest.label.width :=
2079   #0 'last.extra.num :=
2080   #0 'number.label :=
2081 }
2082
2083 FUNCTION {forward.pass}
2084 { last.label label =
2085     { last.extra.num #1 + 'last.extra.num :=
2086       last.extra.num int.to.chr$ 'extra.label :=
2087     }
2088     { "a" chr.to.int$ 'last.extra.num :=
2089       "" 'extra.label :=
2090       label 'last.label :=
2091     }
2092   if$
2093   number.label #1 + 'number.label :=
2094 }
2095
2096 FUNCTION {reverse.pass}
2097 { next.extra "b" =
2098     { "a" 'extra.label := }
2099     'skip$
2100   if$
2101   extra.label 'next.extra :=
2102   extra.label
2103   duplicate$ empty$
2104     'skip$
2105     { "{\natexlab{" swap$ * "}}" * }
2106   if$
2107   'extra.label :=
2108   label extra.label * 'label :=
2109   dinat.label extra.label * 'dinat.label :=
2110 }
2111
2112 EXECUTE {initialize.longest.label}
2113
2114 ITERATE {forward.pass}
2115
2116 REVERSE {reverse.pass}
2117
2118 FUNCTION {bib.sort.order}
2119 { sort.label  'sort.key$ :=
2120 }
2121
2122 ITERATE {bib.sort.order}
2123
2124 SORT
2125
2126 FUNCTION {begin.bib}
2127 {   preamble$ empty$
2128     'skip$
2129     { preamble$ write$ newline$ }
2130   if$
2131   "\begin{thebibliography}{" number.label int.to.str$ * "}" *
2132   write$ newline$
2133   "\providecommand{\natexlab}[1]{#1}"
2134   write$ newline$
2135   "\providecommand{\url}[1]{\texttt{#1}}"
2136   write$ newline$
2137   "\makeatletter"%%   Einschub ab hier, 19.11.2004
2138   write$ newline$
2139   "\newcommand{\dinatlabel}[1]%"
2140   write$ newline$
2141   "{\ifNAT@numbers\else\NAT@biblabelnum{#1}\fi}"
2142   write$ newline$
2143   "\makeatother"
2144   write$ newline$ %%                 Ende Einschub
2145   "\expandafter\ifx\csname urlstyle\endcsname\relax"
2146   write$ newline$
2147   "  \providecommand{\doi}[1]{doi: #1}\else"
2148   write$ newline$
2149   "  \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi"
2150   write$ newline$
2151 }
2152
2153 EXECUTE {begin.bib}
2154
2155 EXECUTE {init.state.consts}
2156
2157 ITERATE {call.type$}
2158
2159 FUNCTION {end.bib}
2160 { newline$
2161   "\end{thebibliography}" write$ newline$
2162 }
2163
2164 EXECUTE {end.bib}
Note: See TracBrowser for help on using the browser.