%%****************************************
%%*                                      *
%%* TU Dresden                           *
%%* Lehrstuhl für Wirtschaftsinformatik, *
%%* insbesondere Systementwicklung       *
%%*                                      *
%%****************************************
%%
%% LaTeX-Vorlage fuer Doktor-, Diplom- und Seminararbeiten
%% Formatierung des Literaturverzeichnisses
%%
%% Version: $Revision: 1.8 $

%%  ALPHADIN.BST            Ausgabe [7,1]  vom 23/11/99
%%  (C) Klaus F. Lorenzen, Hamburg  email: lorenzen.marxen@t-online.de
%%  ersetzt ALPHADIN.BST   Ausgabe [6]  von 1997
%%  ersetzt DinAlpha.BST  von 1994
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  ALPHADIN.BST wurde entwickelt aus BibTeX standard bibliography style
%% `alpha'.Mit ALPHADIN.BST werden Literaturverzeichnisse gemaess der deutschen
%%  Zitiernorm DIN 1505 Teil 2 formatiert.
%%  Analog zu den 4 US standard styles wird ein vollstaendiger Satz von
%%  4 DIN-gerechten bst-style Dateien veroeffentlicht (alphadin.bst,
%%  plaindin.bst, unsrtdin.bst, abbrvdin.bst). Die gueltige Version
%%  ist am schnellsten aus dem WWW ueber folgende URL zu beziehen
%%            http://www.fh-hamburg.de/pers/Lorenzen/bibtex/
%%            Stand: 16/6/99
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  WAS IST ALPHADIN.BST ?
%%  Dieser style produziert "deutsche" Literaturzitate in Literaturverzeichnis-
%%  sen gemaess der deutschen Norm DIN 1505, Teil 2 vom Jan. 1984.
%%  Die Literaturzitate werden alphabetisch nach Verfassern sortiert
%%  und sind durch abgekuerzte Verfasserbuchstaben plus Erscheinungsjahr in
%%  eckigen Klammern gekennzeichnet.
%%  Es gibt Unterschiede zwischen der US- und der deutschen Zitierkonvention,
%%  was die bibliographischen Typen und die verschiedenen Trennzeichen zwischen
%%  den Feldern angeht. Daher ist auch keine 100%ige Abbildung der beiden
%%  Regelwerke aufeinander moeglich. Dies ist aber immer durch eine achtsame
%%  Erfassung beherrschbar! Die vorliegenden DIN-styles versuchen einige
%%  bibliographische Beschraenkungen der Originalstyles zu ueberwinden.
%%  Es laesst sich in fast allen Faellen problemlos ein Original-bib-file
%%  (d.i. die Datenbank, die die bibliographischen Informationen enthaelt)
%%  wahlweise nach US-Norm oder deutscher DIN-Norm verarbeiten.
%%  [Beispiel: Produzieren Sie mit der XAMPL.bib-Datenbank aus dem Original-
%%  paket 2 verschiedene Literaturverzeichnisse.]     Zu Gunsten
%%  der Allgemeingueltigkeit von bib-files ist bei den Publikationstypen
%%  (entry-types) und den bibliographischen Kategorien (fields) in Zweifels-
%%  faellen immer die originale US-Bedeutung beibehalten worden.
%%  Bei der Erfassung von Literaturquellen in bib-files
%%  gelten folglich die in der TEX-Literatur veroeffentlichten Regeln.
%%  Kommt es dennoch zu kleineren "Schoenheitsfehlern" im fertig gesetzten
%%  output, so koennen diese so gut wie immer durch eine leicht veraenderte
%%  Erfassung im bib-inputfile beseitigt werden. Last but not least koennen
%%  Sie im output-file < *.bbl > noch letzte Hand zur Korrektur ansetzen.
%%  UMGANG MIT FEHLERMELDUNGEN
%%  Noch nicht alle ueberfluessigen Fehlermeldungen des Original-style sind
%%  ausgemerzt. Die meisten Warnmeldungen beruhen auf
%%  den andersartigen bibliographischen Regeln nach DIN 1505 und dem damit
%%  verbundenen Ermessensspielraum, sind also in Wahrheit keine "Fehler".
%%  Dennoch sollten Sie diese Warnungen beachten, um herauszufinden, ob
%%  evtl. eine unzulaessige Kombination von Publikationstyp (=entry-type) und
%%  "fields" vorgenommen worden ist. Das fuehrt mitunter zu Wasserfallartigen
%%  Fehlermeldungen: meistens duerfen Sie das einfach ignorieren.
%%
%%  DANKSAGUNG
%%  Hartmut Lueddecke, FH Hamburg  habe ich fuer viele Verbesserungsvorschlaege
%%  und stete Unterstuetzung zu danken. Vielen an dieser Stelle ungenannt
%%  bleibenden Anwendern g)lt mein Dank, die in den vergangenen Jahren durch
%%  ihre Aufmerksamkeit dazu beigetragen haben, Fehler auszumerzen und
%%  Verbesserungen vorzunehmen.
%%
%%  HINWEIS:  es gibt eine Kombination von ALPHADIN.BST mit dem NATBIB-Stil
%%            von Patrick W.Daly), womit Literaturverzeichnisse komplett nach
%%            DIN 1505 Teil 2 UND Teil 3 formatiert werden koennen. Naeheres
%%            per URL http://www.fh-hamburg.de/pers/Lorenzen/bibtex/
%%
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  Eine ausfuehrliches Internet-Tutorial mit Beispielen ist in Vorbereitung.
%%  Fuer den Anfang ist diese Datei schon etwas kommentiert!
%%          Kritik, Vorschlaege usw. bitte an :
%%          FH Hamburg,  Klaus F. Lorenzen, Grindelhof 30, 20146 Hamburg
%%          e-mail: lorenzen.marxen@t-online.de
%%                             16/6/99
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%% ==>  The file btxbst.doc has the original documentation for style 'alpha'.
%%

ENTRY
  { address      %%  Verlagsort
    author       %%  persoenlicher Urheber eines Werkes
    booktitle    %%  a) Gesamttitel eines mehrbaendigen Werkes
    chapter      %%  Kapitel in einem Buch (Monographie)
    edition      %%  Auflagevermerk
    editor       %%  Persoenl.Herausgeber oder Koerperschaftlicher Herausgeber
    howpublished %%  beliebiger Verlegervermerk: von wem, wo
    institution  %%  Institution, die e.Verlagsfreie Veroeffentlichung betreibt
    isbn         %%  Standardnr fuer Buecher
    issn         %%  - " -    :      Zeitschriften u. Serien
    journal      %%  Titel einer Zeitschrift
    key          %%  Zusaetzlich vergebener Sortierschluessel, mitunter notwend.
    month        %%  naehere Bestimmung des Erscheinungsjahres (-> macro 's)
    note         %%  freies Eingabefeld fuer zusaetzliche Informationen
    number       %%  Mehrfachbedeutung in Abhaengigkeit vom Eingabetyp
    organization %%  a) Name der Organisation/des Veranstalters e. Tagung,Konferenz
    pages        %%  Umfangsangaben, meist Seitenzahlen
    publisher    %%  Verlag
    school       %%  Hochschule/Universitaet, die eine Dipl.-Arb./Dissertation veroeff.
    series       %%  Titel e.Reihe, in der ein best. Buchtitel erschienen ist
    title        %%  Titel einer (namentlich gekennzeichneten) Veroeffentlichung
    type         %%  Zusatzfeld z.Kennzeichnung e.besonderen Publikationstyps
    volume       %%  a) Zaehlung bei einem mehrbaendigen Werk (-> book)
    year         %%  Erscheinungsjahr
  }
  {}
  { label extra.label sort.label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

%% die folg. BOOLE'sche VAR steuern d. Ausg. ": " nach Urheber-Feldern
%%    und ". - " vor ISBN oder Anmerkungen (NOTE)

INTEGERS { colon.after  period.dash }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
  #4 'colon.after :=
  #5 'period.dash :=
}
INTEGERS { zahl  lang }

STRINGS { h s t u v }

%% neue DIN-Funktion, 16/2/94

FUNCTION {output.nonnull}
{ 's :=
  output.state after.block =
      { add.period$  write$
        newline$
        "\newblock " write$
      }
      { output.state before.all =
          {  write$ }
          {  output.state colon.after =
               { ": " * write$
                 newline$
                 "\newblock " write$
               }
               { output.state period.dash =
                   { ". -- " *  write$
                     newline$
                     "\newblock " write$
                   }
                   { output.state mid.sentence =
                       { ", " * write$ }
                       { write$
                         newline$
                         "\newblock " write$
                       }
                     if$
                   }
                if$
               }
            if$
           }
         if$
         after.block 'output.state :=
       }
     if$
     s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}   %%$$$  nach DIN neu 16/2/94
{ write$
  newline$
}

FUNCTION {set.period.dash}    %% Wenn ein ". - " die Satzteile trennen soll.!
{ output.state before.all =
    'skip$
    { period.dash  'output.state := }
  if$
}

%%   neu 16/2/94
%%   prueft, ob PAGES, ISBN- oder NOTE-Feld vh. ist und setzt dann ". - " davor.

FUNCTION {set.period.dash.check}
{ empty$
    'skip$
    'set.period.dash
  if$
}

FUNCTION {set.colon.after}   %%$$$ Wenn ein ": " d. Satzteile trennen soll!
{ output.state before.all =
    'skip$
    { colon.after 'output.state  := }
  if$
}

%% neu / alt 17/2/94          Wenn ein " " die Satzteile trennen soll.!
FUNCTION {new.sentence}
{ output.state before.all =
     'skip$
     { after.sentence 'output.state := }
  if$
}

%% neu 17/2/94                 Wenn ein ", " die Satzteile trennen soll.!
FUNCTION { part.of.sentence }
{ output.state before.all =
     'skip$
     { mid.sentence 'output.state := }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

INTEGERS { nameptr namesleft numnames }

STRINGS { fkt }

% AG: Diese Funktion und nur diese Funktion bringt eine kursive
% Formatierung ein. Sie wird für alle Tittel verwendet.
FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}

%% neu, setzt Autor/Hrsg. in Kapitaelchen 9/3/94
FUNCTION { capitalize }
 { duplicate$ empty$
    { pop$ "" }
    { "\textsc{" swap$ * "}" * }
  if$
}

%%$$$ DIN-Quellenangabe : spezieller unselbst. Teil ist erschienen "In: "
%%                        dem bibliogr. selbst. Werk, z.B. Zeitschrift, Buch

%% 1/4/96
FUNCTION {article.in.journal}
{ duplicate$ empty$
    { pop$ "" }
    { author missing$
        { title missing$
% Empty Stack Bug behoben, wenn Autor und Titel fehlen 27.08.2000
%            { " " * *}%% wenn ein Zs-Heft als ganzes zitiert wird
            { " " *}%% wenn ein Zs-Heft als ganzes zitiert wird
            { "{In: }" swap$ ", " * * }
          if$
        }
        { "{In: }" swap$ ", " * * }
      if$
     }
  if$
}

%% nach Vorschlag von H.Lueddecke, um Adelspraedikate beim Sortieren
%% nach den(m) Vornamen aufzufuehren. Lo, 2/11/94
%% AG, 22.08.2000: Vornamen werden ab jetzt abgekuertzt
FUNCTION {format.names}
{ 's :=
  "" 'u  :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {
       s nameptr "{vv~}{ll}" format.name$ 't :=%% das ergibt DIN-Ansetzung
       %% Lue's Vorschlag   s nameptr "{ll}" format.name$ 't :=
       t capitalize 't :=
%%     dinalpha's Vorschlag:  s nameptr "{, ff}" format.name$ 'u :=
       s nameptr "{, f.}" format.name$ 'u :=
       %% Lue's Vorschlag   s nameptr "{, ff}{ vv}" format.name$ 'u :=
       u  text.length$  'lang :=
       #1 'zahl :=
       "" 'v :=
         {  zahl  lang  <  }
         {  u  zahl  #1  substring$  "~"  =
               {  v  ""  =
                     {  u  #1  zahl  #1  -  substring$  'v :=  }
                     'skip$
                  if$
                  v  u  zahl  #2  substring$  *  "."  *  'v :=  }
               'skip$
            if$
            zahl  #1  +  'zahl :=  }
      while$
      v  ""  =
         {  u  'v :=  }
         'skip$
      if$
%%    der string fkt enthaelt " (Hrsg.)", wenn Editorfeld nicht leer ist
      t  v  *  fkt  *  't :=  %% Komma nach Nachnamen wird oben erledigt!
                              %% t enthaelt nun d. formatierten Nnamen, Vnamen
      nameptr #1 >
         { namesleft #1 >
             { "; " * t * }
             { numnames #2 >
                  { "" * }
                  'skip$
               if$
%%                                %% n. schindle's hinweis 12/1/96 erweitert
               t "\textsc{others}" = t "\textsc{others} (Hrsg.)" = or
%%%                  { " [u.~a.]" * }%%   13/2/94
                  { "~et~al." * } %% Geschmackssache, waehle eins von beiden
                    { "; " * t * }
               if$
               }
            if$  %% Ende der namesleft-Pruefung
          }
            't
           %% hierdurch wird bei jed. Schleifendurchgang das sich komplet-
           %% tierende Zwischen-Namensergebnis wieder auf den sdack gelegt

       if$  %%  Ende der nameptr-Pruefung

      nameptr #1 + 'nameptr :=
      namesleft #1 -  'namesleft :=
    }
  while$  %%  Ende von { namesleft #0 > } ganz oben
  "" 'fkt :=  %% fkt wird zurueckgesetzt
}

%%$$$ geaendert 14/2/94

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

%%$$$ geaend. 20/2/94 Anpassung an DIN, wonach Autor + Hrsg. zusammen vorkom-
%%                    men duerfen.!!
FUNCTION {format.editors}
{ editor empty$
   { author empty$
       { "Weder Verfasser noch Hrsg. in " cite$ * warning$ }
       'skip$
     if$
    }
    { author empty$
        { " (Hrsg.)" 'fkt :=
          editor format.names
        }
        { " (Hrsg.)" 'fkt :=
          "; " * editor format.names *
        }
      if$
     }
   if$
 }

%% Lo, 12/5/99 neue Funktion fuer proceedings, misc usw.

FUNCTION { format.editors.organization }
{ organization empty$
    'skip$
    { type$ "misc" =
        { organization }
        { "; " * organization " (Veranst.)" *}
      if$
    }
  if$
}

%%$$$  Sonderfall: Herausgeber bei Typ incollection, 21/2/94
%% 10.04.01 AG: Herausgeberschaft werden fett und mit dem einmaligen
%% Verweis Hrsg. gesetzt.
FUNCTION {format.ed.incoll}
{ editor empty$
     { "" }
     { " (Hrsg.)" 'fkt :=
       editor format.names
     }
  if$
}

% Wenn's einen Titel hat, dann kursiv ausgeben. Die Funktion
% format.btitle wird dann ueberfluessig.
FUNCTION {format.title}
{ title empty$
    { "" }
    { title emphasize }
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}

%% geaendert 24/2/94
FUNCTION {format.date}
{ year empty$
    { month empty$
        { "" }
        { "there's a month but no year in " cite$ * warning$
          month
        }
      if$
    }
    { month empty$  %% b. Buechern nur Jahr, ohne Monat ausgeb. im Impressum
          'year
          { month " " * year * }
      if$
    }
  if$
}

%%
%%$$$  neue Fkt., 16/2/94 u. 14/3/94       das sog. Impressum
FUNCTION {format.address.publisher.year}

      {  publisher empty$
         { address empty$
           { year empty$
              { "" }
              { year }
              if$
           }
           { "Es gibt einen Verlagsort, aber keinen Verlag in " cite$ * warning$
                  address ", " * format.date *
           }
           if$ %Ende address empty$ (Zeile 501)
        }
        { address empty$
          { year empty$
             { "Es gibt nur eine Verlagsangabe aber keine Jahreszahl in " cite$ * warning$
                publisher
             }
             { publisher ", " * format.date * }
             if$ %Ende year empty$ (Zeile 513)
          }
          { year empty$
              { address ": " * publisher * }
              { address ": " * publisher * ", " * format.date * }
              if$ %Ende year empty(Zeile 520)
          }
          if$ %Ende address empty$ (Zeile 512)
        }
        if$ %Ende address empty$ (Zeile 501)
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #10 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

%% neu 8/3/94 in dieser Funkt. steckt im volume empty-Teil noch ein bug, der
%%            aber ignoriert werden kann; das Ergebnis ist ok.
FUNCTION {format.btitle.vol}
{ number empty$
   { series empty$
     { volume empty$
        { title emphasize }
        { title " (Band"  * volume tie.or.space.connect ")" * emphasize }
       if$
     }
     { volume empty$
        { title emphasize }%% ein Buch, das zusaetzl. SERIES=Reihentitel besitzt
    %% jetzt kommt d. Fall des mehrbaendigen Werkes mit Gesamttitel=SERIES
    %% Zaehlung=VOLUME und Bandtitel=TITLE;
        { series emphasize ". Band" * volume tie.or.space.connect
                                 ": " * title * emphasize }
       if$
     }
     if$%% series-test
   }
   { title emphasize }%% wenn number ex., dann immer title-Feld
  if$%% Ende number-test
}

%%$$$ neu 16/2/94
%%   Serien- / Reihentitel werden im Feld series gespeichert. Weist die
%%   Serie eine Zaehlung der Einzeltitel auf, gibt man entweder nach DIN alles
%%   in das Feld series so ein: ---> TITEL DER SERIE  NR. (der Vorlage) <---
%%   z. B.  SERIES= { Mensch und Computer 12 }.
%%   [ Die Nummer der Vorlage darf auch durch "; " abgesetzt werden. ]
%%   oder:
%%   man gibt die Zaehlung in das Feld NUMBER ein, z.B. NUMBER = {12}.
%%   Achtung!!
%%   Bei mehrbaendigen Werken steht d. Gesamttitel im Feld SERIES und die
%%   Bandzaehlung im Feld VOLUME; NUMBER darf dann nicht besetzt sein!
%%   Anderenfalls liegt ein Erfassungsfehler vor, da sich Reihe u. mehrbd.
%%   Werk gegenseitig ausschliessen.
%%   AG: Die hier eingefuegten oeffnenden und schliessenden Klammern kommen weg.
%%
FUNCTION {format.series.number.din} {
  volume empty$
    { number empty$
          { series empty$
               { "" }%%   Ausstieg mit Nullstring
               { "" series * "" * } %% d. Seriennr koennte auch gleich hier
                                      %% im SERIES-Feld miterfasst werden
            if$ %%Ende von series empty$
          }
          { series empty$
               { "" number tie.or.space.connect "" *
                 "there's a number but no series in " cite$ * warning$
               }
               { "" series * number tie.or.space.connect "" * }
            if$ %% Ende von Series empty$
          }
       if$ %%Ende von number empty$
     }
     { series empty$
          %% Kein Serientitel angegeben -> Nullstring
          { "" }
          %% Serientitel vorhanden
          { type empty$
            %% kein Typ angegeben, nur VOLUME oder NUMBER erlaubt
            { number empty$
              %% laufende Nummer nicht vorhanden -> alles ok
               { "" series * "" *}
               %% VOLUME und NUMBER vorhanden -> Fehlermeldung
               %% nur Ausgabe der Serie
               { "" series * "" *
                 "VOLUME und NUMBER sind nur für TYPE Proceedings in " cite$ *
                 " gleichzeitig erlaubt." * warning$
               }
               if$ %%Ende von number empty$ (Zeile 605)
             }
             %% Typ vorhanden
             { type "proceedings" =
               %% Type entspricht Proceedings
               %% -> es sind Werte für VOLUME und NUMBER erlaubt
               { number empty$
                 %% laufende Nummer ist nicht vorhanden
                 { "" series * "" *}
                 %% laufende Nummer ist vorhanden -> mit ausgeben
                 { "" series * number tie.or.space.connect "" *}
                 if$ %% Ende number empty$ (Zeile 619)
               }
               %% Type entspricht nicht Proceedings
               %% es darf nur im Feld Number oder im Feld VOLUME
               %% etwas verzeichnet sein
               { number empty$
                 %% laufende Nummer nicht vorhanden -> alles ok
                 { "" series * "" *}
                 %% VOLUME und NUMBER vorhanden -> Fehlermeldung
                 %% nur Ausgabe der Serie
                 { "" series * "" *
                   "VOLUME und NUMBER sind nur für TYPE Proceedings in "  cite$
                   * "gleichzeitig erlaubt." * warning$
                 }
                 if$ %%Ende von number empty$ (Zeile 629)
               }
               if$ %%Ende von type "proceedings" = (Zeile 601)
             }
             if$ %% Ende von type empty$ (Zeile 603)
           }  
       if$ %%Ende von series empty$ (Zeile 599)
      }    
  if$ %% Ende von volume empty (Zeile 582)
}

%Falls Series angegeben wurde, wird ein Komma auf dem Stack hinterlegt
FUNCTION {set.comma.after.series} {
  series empty$
    'skip$
    { part.of.sentence }
  if$
}

%% seltener Fall bei MISC: Ausgabe einer Serie; die Nummer der Serie muss
%%  in SERIES miterfasst werden  16/6/99

FUNCTION {format.misc.series}
{ series empty$
    { "" }
    { "(" series * ")" * }
  if$
}

%%$$$ 16/2/94
%%  Auflagenvermerke gibt man komplett, einschliesslich Abkuerzungen in
%%  das Feld edition ein: ---> EDITION= { 3., erw. und verb. Aufl. }
%%  oder fremdsprachlich:      EDITION= { 2nd edition }

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { edition }
  if$
}

%AG: Platzhalter fuer die Formatierung von Buchbaenden
FUNCTION {format.volume}
{ volume empty$
    { "" }
    { volume }
  if$
}

%%$$$ neu, 18/3/94
FUNCTION { format.isbn.issn }
{ isbn empty$
     { issn empty$
          { "" }
          { "ISSN" issn n.dashify tie.or.space.connect }
       if$
     }
     { "ISBN" isbn n.dashify tie.or.space.connect }
  if$
}

%%$$$ geaendert, 21/2/94  gibt Seitenzahl bei BOOK-Typ und verwandten T. aus
FUNCTION {format.pages.book}
{ pages empty$
    { "" }
    { "" pages n.dashify tie.or.space.connect " S" *} %% 17/12/95
  if$
}

%%$$$  alle anderen Seitenang. zB. Zeitschrft., INBOOK usw. a la Orig., 9/3/94
FUNCTION {format.pages}
{ pages empty$
    { "" }
    { "S." pages n.dashify tie.or.space.connect }
  if$
}

%%    Angaben v. Jahrgang, Jahr, Heftnr., Seiten bei Artikel-Typ
%%    14/3/94, 26/2/97

FUNCTION {format.vol.year.num.pages}
{ volume  field.or.null
    year empty$
      { "Es gibt einen Jahrgang, aber kein Jahr in " cite$ * warning$ }
      { "(" year * ")" * tie.or.space.connect }
    if$
    month empty$
    'skip$
    { ", " month * * }
    if$
    number empty$
    'skip$
    { number tie.or.space.connect }
    if$
    pages empty$%%  Lo, 26/2/97
      'skip$
      { ", " format.pages * *}%%
    if$
}

%% geaendert 21/2/94
FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
        { "Kapitel " }
        { type }
      if$
      chapter tie.or.space.connect
      pages empty$
        'skip$
        { ", " * format.pages * }
      if$
    }
  if$
}

%%$$$  geaendert 21/2/94
FUNCTION {format.in.ed.booktitle.din}
{ booktitle empty$
    { "" }
    { editor empty$
        { volume empty$
            { "{In: }" booktitle emphasize * }%% n. Belieben fettes In:
            { "{In: }" booktitle emphasize *  %%      - " -
              " Band" volume tie.or.space.connect *
            }
          if$
        }
        { volume empty$
            { "{In: }" format.ed.incoll * ": " * booktitle emphasize * }
            { "{In: }" format.ed.incoll * ": " * booktitle emphasize *
              " Band" volume tie.or.space.connect *
            }
          if$
        }
      if$
    }
  if$
}

%% geaendert 1/3/94
FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type
    }
  if$
}

%% geaendert 23/2/94    i.Orig. wird zuerst die number, dann der type getestet
%% Geaendert (28.06.2000): tie.or.space.connect ersetzt durch einfache
%% Leerzeichen, da sonst unmittelbar nach der öffnenden Klammer ein Leerzeichen
%% stand.
FUNCTION {format.tr.number.din}
{ type empty$
   { number empty$
      { "Forschungsbericht" }   %%  bei Minimalangaben besser ohne "."!
      % You can't pop from Literal empty stack
      { "Forschungsbericht " number * }
      if$
   }
   { number empty$
       { type }             %%  bei Minimalangaben besser ohne "."!
      % You can't pop from Literal empty stack
       { type " " * number * }
       if$
   }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
        { "need key or journal for " cite$ * " to crossref " * crossref *
          warning$
          ""
        }
        { "{In: }{\em " journal * "}" * }%%
      if$
    }
    { "{In: }" key * }%%
  if$
  "{\cite{" * crossref * "}" * "}" * ", " * format.pages *
}

%%geaendert 7/3/94 und noch einmal nach Lueddecke, s.o.
FUNCTION {format.crossref.editor}
 { editor #1 "{ll}" format.name$ " (Hrsg.)" *
   editor num.names$ duplicate$
   #2 >
    { pop$ " [u.\,a.]" * }
%%    { pop$ " et~al." * }
    { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { " [u.\,a.]" }
%%          { " et~al." * }
            { "; " * editor #2 "{vv~}{ll}" format.name$ * " (Hrsg.)" * }
          if$
        }
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "{\texttt{siehe}} "
%%      "(siehe "
    }
    { ". -- Band" volume tie.or.space.connect
      " von " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { series empty$
            { "need editor, key, or series for " cite$ * " to crossref " *
              crossref * warning$
              "" *
            }
            { "" * }%% dadurch kommt nach der Bandzaehl. gleich das label 2/6/99
          if$
        }
        { key * }
      if$
    }
    { "" * }%% nach der Bandzaehlung kommt gleich das label; Lo 2/6/99
%%    { format.crossref.editor * }
  if$
  "{\cite{" * crossref * "}" * "}" *
%%  "{\cite{" * crossref * "}" * "}" * %%"), " * format.pages *
}

%% AG: Fuer meine Begriffe soll bei angegebener Referenz nur
%% ein In: plus Zitierschluessel generiert werden!
%% Falls zusaetzlich zur Crossref noch ein Buchtitel oder ein Editor
%% angegeben wurde, wird eine Warnung ausgegeben, dass diese Angaben
%% nicht exportiert werden.
%%FUNCTION {format.incoll.inproc.crossref} {
%%  "In: {\cite{" crossref * "}" * "}" * ", " * format.pages *
%%  booktitle empty$
%%    'skip$
%%    { "Fuer den Eintrag " cite$ * " wurde eine Crossreference und ein " *
%%      "Buchtitel angegeben. Der Buchtitel wird ignoriert." * "(" * booktitle * ")" * warning$
%%    }
%%  if$
%%  editor empty$
%%    'skip$
%%    { "Fuer den Eintrag " cite$ * " wurde eine Crossreference und ein " *
%%      "Editor angegeben. Der Editor wird ignoriert." * warning$
%%    }
%%  if$
%%}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { booktitle empty$
            { "need editor, key, or booktitle for " cite$ * " to crossref " *
              crossref * warning$
              ""
            }
            { "{In: }" booktitle * emphasize }%%  fettes In: n. Belieben
          if$
        }
        { "{In: }" }%% 26/5/99
      if$
    }
    { "{In: }" }%% Lo, 10/2/99 es sieht der reine Bezug (Referenz) besser aus!
  if$
  "{\cite{" * crossref * "}" * "}" * ", " * format.pages *
}

%%geaendert
FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
    { journal article.in.journal output.nonnull %   26/2/97
      new.sentence
      format.vol.year.num.pages output
    }
    { format.article.crossref output.nonnull }
  if$
   note set.period.dash.check
   note output
   issn set.period.dash.check
   format.isbn.issn output
   fin.entry
}

%%$$$   geaendert, 20/2/94
%% Entgegen den TeX-Regeln verlangt die DIN Norm eine Auflagennummer für jedes
%% Buch. Dies wurde jedoch wieder zurückgenommen. Somit gelten die TeX-Regeln
%% wieder.
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors  format.editors output.nonnull }
  if$
  set.colon.after
  format.title "title" output.check
  format.series.number.din output
  set.comma.after.series
  %AG hier müssen wir noch den Band (volume) einschreiben
  %Die Formatierung haben wir natürlich von der edition geklaut.
  volume empty$ 
    'skip$
    { format.volume output.nonnull
      part.of.sentence }
  if$
  %AG: Nur bei angegebener Edition, setzen wir ein Komma danach ein
  edition empty$ 
    'skip$
    { format.edition output.nonnull
      part.of.sentence }
  if$
  format.address.publisher.year "publisher" output.check
  new.sentence

%% AG: Nach meinem Dafuerhalten sollten ein Buch keine Crossreferenz haben!
%%  crossref missing$
%%    { format.series.number.din  output
%%      pages set.period.dash.check%%  19/5/99 wie bei adinat.bst
%%      format.pages.book output
%%    }
%%    { format.book.crossref output.nonnull
%%      pages set.period.dash.check
%%      format.pages.book output
%%    }
%%  if$
  note set.period.dash.check
  note output
  isbn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%% geaendert 23/2/94
FUNCTION {inbook}
{ output.bibitem
%% unselbst. Teile eines Buches werden am Anf. genannt, dann d selbst. Quelle
  chapter empty$
    { "Es fehlen die Kapitelangaben in " cite$ * warning$ }
    { type empty$
         { "Kap. " output }%%  d.i. die Standardvorgabe
         { type output}%%  wenn man keine bes. Typform angeben will, koennte ein kl.
%%                   Zwischenraum gewaehlt werden, z.B. " \, "
         if$
    }
  if$
  chapter tie.or.space.connect " {In: }" * %% n. Belieben fettes In:
%%   -------- jetzt kommt der bibliogr. selbst. Teil
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull}
  if$
  set.colon.after
  format.btitle.vol "title" output.check
  crossref missing$
    { 
      format.edition output
      format.address.publisher.year "publisher" output.check
      new.sentence
      format.series.number.din output
% %% vorher note..
      part.of.sentence 
%% nach Texregeln sind die Seitenzahlen nicht zwingend
      format.pages output
%%      format.pages  "pages" output.check
      note set.period.dash.check
      note output
    }
    {
      format.book.crossref output.nonnull
      note set.period.dash.check
      note output      
    }
  if$
  isbn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%%  geaenderte Seitenzahlausgabe, wenn crossref-Feld benutzt wird, 27/2/97
FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
     { format.in.ed.booktitle.din "booktitle" output.check
       format.edition output
       format.series.number.din output
       set.comma.after.series
       format.address.publisher.year "publisher" output.check
       new.sentence
       note set.period.dash.check
       note output
       isbn set.period.dash.check
       issn set.period.dash.check
       format.isbn.issn output
       part.of.sentence
% %% Nach texregeln sind die Seitenangaben nicht zwingend
       format.chapter.pages output
% %%      format.chapter.pages "pages" output.check
     }
     { format.incoll.inproc.crossref output.nonnull
       note set.period.dash.check
       note output
       isbn set.period.dash.check
       issn set.period.dash.check
       format.isbn.issn output
     }
     if$
 fin.entry
}

%%  geaendert 22/2/94, 15/11/96 (Hinweis v. Alin Shindun, Uni Siegen)
FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
    { format.in.ed.booktitle.din "booktitle" output.check
      address empty$
        { organization new.sentence.checka
          organization output
          part.of.sentence
          format.address.publisher.year "year" output.check
        }
        { format.address.publisher.year "year" output.check}
      if$
      new.sentence
      series empty$ %%neu nach Hinweis v. Alin Shindun, 15/11/96
        'skip$
        { format.series.number.din output }
      if$
      note set.period.dash.check
      note output
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
      part.of.sentence
      format.pages output
    }
    { format.incoll.inproc.crossref output.nonnull
      note set.period.dash.check
      note output
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
    }
    if$
 fin.entry
}

FUNCTION {conference} { inproceedings }%% nach Patashnik, wg US-Kompatibilitaet

%% geaendert, 11/6/99
FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
        { title empty$
            'skip$
            {format.title "title" output.check }
          if$
        }
        { organization output.nonnull
          set.colon.after
          format.title "title" output.check
        }
      if$
    }
    { format.authors output.nonnull
      set.colon.after
      format.title "title" output.check
    }
  if$
%% Nach Texregeln ist die Auflage nicht gefordert
  format.edition output
%%  format.edition "edition" output.check
  author empty$
    { organization empty$
        { address output
          part.of.sentence
        }
        'skip$
      if$
    }
    { address ": " *  organization * output
      part.of.sentence
    }
  if$
  format.date output
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

%%  Ausgabe-Standard ist "Diplomarbeit", fuer andere Abschlussarbeiten
%%  bei der Erfassung TYPE="anderer Typ" eingeben.
%%  z.B. TYPE={Dissertation}, TYPE={Diss.}, TYPE={Habil.}, TYPE={Magisterarb.}
%%
FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  address output
  part.of.sentence
  school "school" output.check
  part.of.sentence
  "Diplomarbeit" format.thesis.type output.nonnull
  part.of.sentence
  format.date "year" output.check
%%  pages new.sentence.checka
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

%% Dissertationen
FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  address output
  part.of.sentence
  school "school" output.check
  part.of.sentence
  "Dissertation" format.thesis.type output.nonnull
  part.of.sentence
  format.date "year" output.check
%%  pages new.sentence.checka
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

%% hiermit werden u.a. Normen erfasst
FUNCTION {misc}
{ output.bibitem
  note empty$
     { title empty$
%% Stack isn't empty bug (CK)
         { "" output}
%%       { "" }
%% Naechste Zeile verursacht einen Stack isn't empty bug, 
%% falls kein Autor angegeben wurde
%%          {format.authors format.editors output.nonnull
%% Stack isn't empty bug (AG) mit den Zeilen aus book behoben
        {author empty$
          {editor empty$
            { "" output} 
            {format.editors "author and editor" output.check }
          if$}
          { format.authors  format.editors output.nonnull }
        if$

           set.colon.after
           format.title output
           howpublished output
           part.of.sentence
           format.date output
          }
        if$ %%title empty
     }
%% Hier wird geprüft, ob die Anmerkung mit 'Norm' beginnt
     {note duplicate$ #1 #4 substring$ "Norm" =
             %% Anmerkung beginnt mit 'Norm'
            {output new.sentence
             format.date output
             format.title output
            }
             %% Anmerkung beginnt nicht mit 'Norm'
%% Stack isn't empty bug (CK)
            {output pop$ ""
%%            {pop$ ""
              author empty$
                %% Tag Autor frei
                { editor empty$
                  %% Tag Herausgeber leer
                  { organization empty$
                    %%Tag Organization frei
                    { 'skip$ }
                    %%Tag Organization belegt
                    { format.editors.organization output.nonnull
                      set.colon.after }
                    if$ %%organization empty
                  }
                  %% Tag Herausgeber belegt
                  { format.editors format.editors.organization output.nonnull
                    set.colon.after }
                 if$ %%editor empty
                }
                %% Tag Autor belegt
                { format.authors format.editors output.nonnull
                  set.colon.after
                }
              if$ %%author empty
              format.title output
              howpublished output
              format.date output
              new.sentence
              format.misc.series output%%  neu 16/6/99
              note set.period.dash.check
              note output
           }
      if$ %%note duplicate ...
    }
  if$ %% note empty
  fin.entry
}

%%FUNCTION {booklet} {misc}%% booklet ist nach dt. Vorgehensweise oft ueberfluessig
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  format.title "title" output.check
  howpublished output
  address output
  format.date output
  note output
  fin.entry
}

%% geaendert 21/5/99
FUNCTION {proceedings}
{ output.bibitem
    editor empty$
      { organization empty$
           { "" output}
           { organization " (Veranst.)" * output }
        if$
      }
      { format.editors format.editors.organization output.nonnull }
    if$
  set.colon.after
  format.title "title" output.check
  format.series.number.din output.nonnull
  set.comma.after.series
  volume empty$
    { "" output.nonnull }
    { "{\textnormal{Band}}" volume tie.or.space.connect "volume" output.check }
  if$
  format.address.publisher.year "year" output.check
  new.sentence
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  isbn set.period.dash.check
  issn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%% geaendert 23/2/94 auch fuer Firmenschriften u."a. zu benutzen
FUNCTION {techreport}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors  format.editors output.nonnull }
  if$
  set.colon.after
  format.title "title" output.check
  institution empty$
     'skip$
     { institution output.nonnull 
       part.of.sentence }
  if$
  format.tr.number.din "number" output.check
  part.of.sentence
  format.address.publisher.year "year" output.check
  number new.sentence.checka
% AG: Jetzt direkt nach dem Titel
%  format.tr.number.din "number" output.check
  %%  new.sentence
  pages set.period.dash.check
  format.pages.book output
%% Nach Texregeln ist die Anmerkung nicht zwingend
  note output
%%  note "note" output.check
  isbn set.period.dash.check
  issn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

FUNCTION {unpublished} {misc}%% author, title, note muessen sein! howpublished
%%                           %% entfaellt natuerlich
FUNCTION {default.type} { misc }

MACRO {jan} {"Januar"}

MACRO {feb} {"Februar"}

MACRO {mar} {"M{\^^b a}rz"}
%% nach Bernd Raichle, Febr. 1999

MACRO {apr} {"April"}

MACRO {mai} {"Mai"}

MACRO {may} {"Mai"}

MACRO {jun} {"Juni"}

MACRO {jul} {"Juli"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {okt} {"Oktober"}

MACRO {oct} {"Oktober"}

MACRO {nov} {"November"}

MACRO {dez} {"Dezember"}

MACRO {dec} {"Dezember"}

%%  stillgelegte Beispiele fuer den Gebrauch von Kuerzeln (hier Zs-Titel).

%%MACRO {acmcs} {"ACM Computing Surveys"}

%%MACRO {acta} {"Acta Informatica"}

%%MACRO {cacm} {"Communications of the ACM"}

%%MACRO {ibmjrd} {"IBM Journal of Research and Development"}

%%MACRO {ibmsj} {"IBM Systems Journal"}

%%MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

%%MACRO {ieeetc} {"IEEE Transactions on Computers"}

%%MACRO {ieeetcad}
%% {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

%%MACRO {ipl} {"Information Processing Letters"}

%%MACRO {jacm} {"Journal of the ACM"}

READ

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

INTEGERS { et.al.char.used }

FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

EXECUTE {initialize.et.al.char.used}

FUNCTION {format.lab.names}
{ 
's :=
   s num.names$ 'numnames :=
   numnames #1 =
      % Genau ein Autor
      {s #1 "{ll}" format.name$ #4 text.prefix$}
      'skip$
   if$
   numnames #2 =
      %Genau zwei Autoren
      {s #1 "{ll}" format.name$ #2 text.prefix$ s #2 "{ll}" format.name$ #2
      text.prefix$ *}
      'skip$
   if$
   numnames #2 >
      %Mehr als zwei Autoren
      {s #1 "{ll}" format.name$ #3 text.prefix$ "$^+$" *}
      'skip$
   if$
% 's :=
%   s num.names$ 'numnames :=
%   numnames #1 >
%     { numnames #4 >
%         { #3 'namesleft := }
%         { numnames 'namesleft := }
%       if$
%       #1 'nameptr :=
%       ""
%         %% Eingangsbedingung für Whileschleife
%         { namesleft #0 > }
%         { nameptr numnames =
%             { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
% %%              { "\," *  %% kein besonderes Zeichen fuer "others" i. label
%                 { "{\etalchar{+}}" *   %% ein plus-Zeichen (+) fuer "others"!
%                   #1 'et.al.char.used :=
%                 }
% %%              { s nameptr "{v{}}{l{}}" format.name$ * }
%                 { s nameptr "{l{}}" format.name$ * }
%               if$
%             }
% %%          { s nameptr "{v{}}{l{}}" format.name$ * }
%             { s nameptr "{l{}}" format.name$ * }
%           if$
%           nameptr #1 + 'nameptr :=
%           namesleft #1 - 'namesleft :=
%         }
%       while$
%       numnames #4 >
% %%        { "\," *  %%  s. Bemerkung oben
%         { "{\etalchar{+}}" *
%           #1 'et.al.char.used :=
%         }
%         'skip$
%       if$
%     }
% %%  { s #1 "{v{}}{l{}}" format.name$
%     { s #1 "{l{}}" format.name$
%       duplicate$ text.length$ #2 <
%         { pop$ s #1 "{ll}" format.name$ #4 text.prefix$ } %%  vgl. Anmerkung!
%         'skip$
%       if$
%     }
%   if$
}
%% Anmerkung, Lo 14/12/95:
%% wenn man in der letzten label-Bearbeitung #4 statt #3 setzt, dann werden
%% auch Umlaute oder á an 3. Stelle im Namen korrekt in das label genommen.
%% Tip: Aendere diese Zahl nur, wenn in einer Lit.-Liste der Umlautsonderfall
%% stoerend auffaellt.

FUNCTION {author.key.label}
{ author empty$
    { key empty$
        { cite$ #1 #3 substring$ }
        { key #4 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
        { key empty$
            { cite$ #1 #3 substring$ }
            { key #4 text.prefix$ }
          if$
        }
        { editor format.lab.names }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
        { organization empty$
            { cite$ #1 #3 substring$ }
            { "The " #4 organization chop.word #3 text.prefix$ }
          if$
        }
        { key #4 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}
%% neu 19/5/99 damit eigene labels fuer Konferenzen erzeugt werden koennen,
%%             darf man zusaetzlich auch ein key-Feld eingeben. Das produziert
%%             dann vorrangig das label.
FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
        { organization empty$
            { cite$ #1 #3 substring$ }
            { "The " #4 organization chop.word organization } %% Lo, 26/1/98
%%          { "The " #4 organization chop.word #3 text.prefix$ }
          if$
        }
        { key #5 text.prefix$ }%%  man kann Laenge des key einstellen
      if$
    }
    { key empty$%%  wenn key vh., dann macht er das label! Lo,18/5/99
        { editor format.lab.names }
        { key #5 text.prefix$ }
      if$
    }
  if$
}

FUNCTION {calc.label}
{ type$ "book" =
  type$ "inbook" =
  type$ "misc" =
  or
  or
    'author.editor.key.label
    { type$ "proceedings" =
        'editor.key.organization.label
        { type$ "manual" =
            'author.key.organization.label
            'author.key.label
          if$
        }
      if$
    }
  if$
  duplicate$
  year field.or.null purify$ #-1 #2 substring$
  *
  'label :=
  year field.or.null purify$ #-1 #4 substring$
  *
  sortify 'sort.label :=
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
        { "   " * }
        'skip$
      if$
      s nameptr "{ll{ }}{  ff{ }}{ vv{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
        { "[u.~a.]" * }
         %%             { "et al" * }% Geschmackssache
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "Der " #4
        "Die " #4
          "Das " #4
            "Ein " #4
              "Eine " #5
                  "The " #4 t chop.word
               chop.word
             chop.word
           chop.word
         chop.word
       chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
        { key empty$
            { "to sort, need author, editor, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
        { key empty$
            { "to sort, need author, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
        { key empty$
            { "to sort, need editor, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ calc.label
  sort.label
  "    "
  *
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.organization.sort
        { type$ "manual" =
            'author.organization.sort
            'author.sort
          if$
        }
      if$
    }
  if$
  *
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label last.sort.label next.extra }

INTEGERS { longest.label.width last.extra.num }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'longest.label.width :=
  #0 'last.extra.num :=
}

FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      last.extra.num int.to.chr$ 'extra.label :=
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$
}

FUNCTION {reverse.pass}
{ next.extra "b" =
    { "a" 'extra.label := }
    'skip$
  if$
  label extra.label * 'label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  extra.label 'next.extra :=
}

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {begin.bib}%%lt. Original wiederhergestellt 4/1/96
{ et.al.char.used
    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
    'skip$
  if$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}


%$Log: wisealpha.bst,v $
%Revision 1.8  2004/03/19 14:39:57  gehlert
%Volumen bei Büchern berücksichtigen
%
%Revision 1.7  2002/12/03 10:03:58  gehlert
%Ändern der Feinheitden beim Formatieren der BibTeX-Einträge.
%
%Revision 1.5  2001/10/22 08:30:05  andreasg
%no message
%
%Revision 1.4  2001/10/22 08:14:43  andreasg
%* Bisher wurde bei Büchern nach dem Titel ein Komma gesetzt. Bei allen
%  anderen Einträgen erfolgte dagegen ein Punkt. Dieser Fehler wurde behoben
%* Die fette Formatierung der Herausgeberschaft ist nur bei gleichzeitigem
%  Vorhandensein von Autoren notwendig und stößt oft auf Kritik (Alternative?).
%  Aus dem Grund wurde ein Befehl \empheditors eingeführt, der die Editoren
%  standardmäßig fett formatiert. Ist das nicht erwünscht, so muss man lediglich
%  diesen Befehl entsprechend überschreiben.
%
%Revision 1.3  2001/10/22 08:06:45  andreasg
%* Die Titel in inbook, incollection und inproceedings werden kursiv
%  gesetzt.
%* Die Herausgeberschaft wird nicht mehr durch Angabe der Zeichenkette
%  "(Hrsg.)" von den Autoren abgesetzt, sondern wird fett hervorgehoben.
%  Dabei steht nach dem letzten Herausgeber wiederum der String "(Hrsg.)"
%  (ebenfalls fett).
%
%Revision 1.2  2001/10/22 07:57:24  andreasg
%no message
%
