%% AUSWERRTUNG.BST Ausgabe [8.1b3] 2005-02-22 %% mit doi-, url-, urn-Funktionen %% ersetzt ABBRVDIN.BST Ausgabe [7] 16/6/99 %% ersetzt ABBRVDIN.BST Ausgabe [6] 7/12/97 %% ersetzt DINABBRV.BST vom 28/3/94 %% K.F.Lorenzen (C) email: klaus.lorenzen@bui.haw-hamburg.de %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% ABBRVDIN.BST wurde entwickelt aus Oren Patashnik's BibTeX standard %% bibliography style `abbrv'. Eine vorgegebene Literaturdatenbank laesst sich %% somit beliebig nach US- oder deutscher DIN 1505-Zitierkonvention %% verarbeiten. %% Analog zu den 4 US standard styles werden 4 DIN-gerechte 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.haw-hamburg.de/pers/Lorenzen/bibtex/ %% Stand: 2005-02-22 %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% WAS IST ABBRVDIN.BST ? %% Dieser style produziert Literaturzitate in Literaturverzeichnissen %% gemaess der deutschen Norm DIN 1505, Teil 2 vom Jan. 1984. %% Die Vornamen der Verfasser, Herausgeber, Zeitschriftennamen, Monatsnamen %% werden abgekuerzt. Die Anordnung im Literaturverzeichnis entspricht der von %% plaindin.bst, also sortiert und in eckigen Klammern gezaehlt. Die %% vorliegenden DIN-styles gehen ueber die bibliographischen Beschraenkungen %% der Originalstyles hinaus. % %% Es werden nun auch Elektronische Online / Offline Ressourcen wie Internet- %% quellen, CD-ROM usw. verarbeitet. Dazu kommen besondere Publikationsformen %% wie Patente, Normen, Karten, Fernsehaufzeichnungen, Gesetzesstellen, Spiele. % %% Zur Gewaehrleistung der Allgemeingueltigkeit von bib-files gelten in den %% DIN-styles die in der Tex-Literatur veroeffentlichten originalen %% Definitionen und Regeln fuer die Publikationstypen (entry-types) und die %% bibliographischen Felder (fields). %% Treten kleinere "Schoenheitsfehler" im fertig gesetzten output auf, %% lassen sich diese so gut wie immer durch eine veraenderte %% Erfassung im bib-inputfile beseitigen. Oren Patashnik empfiehlt, die %% Definition der Felder weit auszulegen. Last but not least koennen %% Sie im output-file < *.bbl > noch letzte Hand zur Korrektur ansetzen. % %% WARN- UND FEHLERMELDUNGEN %% Ursache von Warnmeldungen sind meistens ausgelassene Felder oder %% Erfassungs-"Fehler". Letztere haengen teilweise mit den gegenueber US- %% Gepflogenheiten andersartigen bibliographischen Regeln nach DIN 1505 %% zusammen. Sie sind also in Wahrheit keine "Fehler" und duerfen fast immer %% ignoriert werden. Dennoch pruefen Sie diese Warnungen, um heraus zu finden, %% ob Publikationstyp (=entry-type) und "fields" eventuell unzulaessig %% kombiniert worden sind. %% Echte Fehler ("errors") treten nur noch in Verbindung mit falscher %% Erfassung auf (nach meinen Tests!). Pruefen Sie die Syntax, den entry-type %% und die fields. %% Zu guter letzt: Qualitaetsmasstab ist einzig der DIN-konforme output! %% %% DANKSAGUNG %% Hartmut Lueddecke, HAW Hamburg, hat viele Verbesserungsvorschlaege %% in die frueheren Versionen eingebracht. Ihm danke ich herzlich. %% Patrick W. Daly, dem Entwickler des Natbib-Stils, verdanke ich viele %% Anregungen und den steten Ansporn, die DIN-Stile zu verbessern. %% Viele an dieser Stelle ungenannt bleibende Anwender haben mich in %% den vergangenen Jahren auf Fehler oder Verbesserungsmoeglichkeiten %% aufmerksam gemacht und so diesen Stil mitentwickelt. Ihnen gilt mein %% besonderer Dank. Ihr Feedback ist immer willkommen und eine Ermunterung. %% %% Klaus F. Lorenzen, 4. Dez. 2004 %% %% %% %% HINWEIS: Neben den vier bibliographischen DIN 1505 Standard-Stilen %% nach den Original-styles von Oren Patashnik %% gibt es zusaetzlich vier DIN 1505 Modifikationen der style %% Emulationen des NATBIB-Pakets von Patrick W.Daly. %% In den NATBIB-Modifikationen werden jetzt alle von P.W. Daly %% implementierten Zitierweisen des Autor-Jahr-Stils unterstuetzt. %% Damit erhaelt der Anwender eine weit ueber die urspruenglichen %% Standardstyles hinausreichende Flexibilitaet beim Zitieren. %% Naeheres unter URL http://www.haw-hamburg.de/pers/Lorenzen/bibtex/ %% %%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% version 0.99c for BibTeX versions 0.99c or later, LaTeX2e version %% Copyright (C) 1985, all rights reserved. %% Copying of this file is authorized only if either %% (1) you make absolutely no changes to your copy, including name, or %% (2) if you do make changes, you name it something other than %% abbrvdin.bst %% This restriction helps ensure that all standard styles are identical. %% %% %% %%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% NEUE FELDER %% Zur Erfassung von Internetquellen, E-mail u.a. gibt es %% die neuen Felder: doi, lastchecked, url, urn ENTRY { address %% a) Verlagsort (aus Konsistenzgruenden im DIN-Stil immer!) %% b) (b. Patashnik auch Konferenzort, wenn ->proceedings) author %% persoenlicher Urheber eines Werkes booktitle %% a) Gesamttitel eines mehrbaendigen Werkes % %% b) Titel des Sammelwerks, das einzelne selbstaendige % %% Beitraege mit eigenem Titel enthaelt (->incollection) chapter %% Kapitel in einem Buch (Monographie) doi %%% Digital Object Identifier edition %% a) Auflagevermerk %% b) selbst. elektron. Quellen (Internetress.) die Version 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. lastchecked %% Online Abruf einer Internetressource (n. GRAY ) 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 Organisators e. Tagung,Konferenz %% b) Name einer Firma/Gesellschaft, die ein ->manual herausgab 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 url %%% URL-Feld ( Uniform Resource Locator ) urn %% URN-Feld ( Uniform Resource Name ) volume %% a) Zaehlung bei einem mehrbaendigen Werk (-> book) %% b) Jahrgang einer Zeitschrift (-> article year %% Erscheinungsjahr } {} { label extra.label sort.label short.list } %%%----------------------------------------------------------------------------------- % Hier stehen Standardvorgaben, die vom Benutzer veraendert werden koennen. % % Behandlung von Mehrverfasserquellen ("... und andere") FUNCTION { ua.etal } { " u.\,a." } %% evtl. auch in eckigen Klammern " [u.\,a.]" %% oder lateinisch: FUNCTION { ua.etal } { " et~al." } FUNCTION { und } { " u. " } %% oder ausgeschrieben: FUNCTION { und } { " und " } % % % Vorgaben bei Online-/Offline-Quellen (z.B. Internet, CD ROM u.a.). % Nach DIN 1505 wird der Publikationstyp extra genannt. FUNCTION { onlress } { "Online--Ressource" } FUNCTION { eress } { "Elektronische Ressource" } %%%----------------------------------------------------------------------------------- INTEGERS { output.state before.all mid.sentence after.sentence after.block } INTEGERS { colon.after period.dash } INTEGERS { after.firstblock } %% fuer die Namensbehandlung INTEGERS { zahl lang } INTEGERS { nameptr namesleft numnames } %% fuer die Sortierung bei der label-Produktion INTEGERS { len } INTEGERS { number.label longest.label.width } %------------------------- %% fuer die label-Produktion STRINGS { longest.label } STRINGS { h s t u v } %% bei der Behandlung der Namen-Funktionsbezeichnung (Hrsg., Redakt., usw) STRINGS { fkt } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := #4 'colon.after := #5 'period.dash := #6 'after.firstblock := } 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$ } { output.state after.sentence = { " " * write$ } { output.state after.firstblock = { add.period$ write$ newline$ "\newblock " write$ } { write$ newline$ "\newblock " write$ } if$ } if$ } 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 {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {output.bibitem} { newline$ "\bibitem[" write$ label write$% "]{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {fin.entry} { write$ newline$ } FUNCTION {set.period.dash} %% Wenn ein ". - " die Satzteile trennen soll.! { output.state before.all = 'skip$ { period.dash 'output.state := } if$ } 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$ } %% Wenn ein " " die Satzteile trennen soll.! FUNCTION {new.sentence} { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } %% Wenn ein ", " die Satzteile trennen soll.! FUNCTION { part.of.sentence } { output.state before.all = 'skip$ { mid.sentence 'output.state := } if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "\emph{" swap$ * "}" * } if$ } FUNCTION { capitalize } { duplicate$ empty$ { pop$ "" } { "\textsc{" swap$ * "}" * } if$ } FUNCTION {article.in.journal} { duplicate$ empty$ { pop$ "" } { author missing$ title missing$ and { emphasize } { emphasize "{In: }" swap$ * } if$ } if$ } FUNCTION {format.doi} { doi empty$ { "" } { new.block " \url{http://dx.doi.org/" doi * "}" * %% { new.block " \url{http://dx.medra.org/" doi * "}" * } if$ } FUNCTION {format.url} { urn missing$ { doi missing$ { url empty$ { "" } { type empty$ NOT { type #-1 #4 substring$ "mail" = type #1 #4 substring$ "Mail" = OR { " Adressat: \url{" url * "}" * } { " \url{" url * "}" * }%% evtl. "URL" oder "<...>" if$ } { " \url{" url * "}" * }%% evtl. "URL" oder "<...>" if$ } if$ } { format.doi } if$ } { " \url{http://nbn-resolving.de/urn/resolver.pl?urn=" urn * "}" * } if$ } %% Adelspraedikate beim Sortieren nach den(m) Vornamen auffuehren %% Abweichend v. DIN !!! FUNCTION {format.names} { 's := "" 'u := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ll}" format.name$ 't := t capitalize 't := 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$ t v * fkt * 't := nameptr #1 > { namesleft #1 > { " ; " * t * } { numnames #2 > { " " * } 'skip$ if$ t "\textsc{others}" = t "\textsc{others} (Hrsg.)" = or { ua.etal * } { " ; " * t * } if$ } if$ %% Ende der namesleft-Pruefung } 't if$ %% Ende der nameptr-Pruefung nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ %% Ende von { namesleft #0 > } ganz oben "" 'fkt := %% fkt wird zurueckgesetzt } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ { author empty$ { "empty author and editor in " cite$ * warning$ "" } 'skip$ if$ } { author empty$ { " (Hrsg.)" 'fkt := editor format.names } { " (Hrsg.)" 'fkt := " ; " * editor format.names * } if$ } if$ } FUNCTION { format.authors.organization } { type$ "misc" = { organization empty$ { author empty$ { "" } { author format.names " (Erfinder)" * } if$ } { author empty$ { organization } { author format.names " (Erfinder); " * organization * " (Anmelder)" * } if$ } if$ } 'skip$ if$ } FUNCTION { format.editors.organization } { organization empty$ 'skip$ { type$ "misc" = { organization } { * " ; " * organization " (Veranst.)" *} if$ } if$ } FUNCTION {format.ed.incoll} { editor empty$ { "" } { " (Hrsg.)" 'fkt := editor format.names } if$ } FUNCTION {format.title} { title empty$ { "" } { title } %% Text so wie er dasteht im Feld title if$ } FUNCTION {format.number} { number empty$ { "" } { number " " * } %% Text so wie er im Feld number steht plus " " if$ } FUNCTION {format.type} { type empty$ { "" } { type " " * } %% Text wie er dasteht; Schutzrecht, Norm etc. 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$ } %% 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$ } FUNCTION {format.date} { year duplicate$ empty$ { "empty year in " cite$ * warning$ pop$ "" } 'skip$ if$ month empty$ 'skip$ { type$ "book" = type$ "inbook" = OR 'skip$ { month " " * swap$ * } if$ } if$ } FUNCTION {format.edition.or.date} { edition empty$ year empty$ and { "" } { edition empty$ { type empty$ NOT { type #-1 #4 substring$ "mail" = type #1 #4 substring$ "Mail" = OR { " gesendet: " "-- " type * swap$ * format.date * } { "\,Version:\," format.date * } if$ } { "\,Version:\," format.date * } if$ } { year empty$ { "\,Version:\," edition * } { "\,Version:\," edition * ", " * format.date * } if$ } if$ } if$ } FUNCTION {format.address.publisher.year} { publisher empty$ { address empty$ { year empty$ { "" } { url empty$ { year } { "" } if$ } if$ } { "there's an address but no publisher in " cite$ * warning$ address ", " * format.date * } if$ } { url empty$%%%% wenn es URL gibt wird nur die service-provider Adresse %%% ausgegeben, die im publisher-Feld steht { address empty$ { year empty$ { "neither address nor publication date in " cite$ * warning$ publisher } { publisher ", " * format.date * } if$ } { year empty$ { address " : " * publisher * } { address " : " * publisher * ", " * format.date * } if$ } if$ } { publisher } if$ } if$ } FUNCTION {format.howpublished} { url missing$ urn missing$ doi missing$ AND AND { howpublished empty$ { address empty$ { type empty$ { "" } { type #-1 #4 substring$ "mail" = { "(gesendet: " new.sentence format.date * ")" * } { "" } if$ } if$ format.date * } { address ", " * format.date * } if$ } { address empty$ { howpublished ", " * format.date * } { address " : " * howpublished * ", " * format.date * } if$ } if$ } { howpublished empty$ { "" } { howpublished } if$ } if$ } FUNCTION {format.version.url} { url empty$ doi empty$ urn empty$ and and { type$ "techreport" = { format.edition } { "" } if$ } { format.edition.or.date output format.url } if$ } FUNCTION {format.edition.or.version} { url empty$ doi empty$ urn empty$ and and { format.edition } { format.edition.or.date } if$ } FUNCTION {format.lastchecked.or.type} { lastchecked empty$ { url empty$ doi empty$ urn empty$ and and { type empty$ { skip$ } { type set.period.dash.check type output } if$ } { type empty$ { skip$ } { type #-1 #4 substring$ "mail" = type #1 #4 substring$ "Mail" = OR { skip$ } { type set.period.dash.check type output } if$ } if$ } if$ } { url empty$ doi empty$ urn empty$ and and { "there's a lastchecked date but no url, urn or doi in " cite$ * warning$ } { type empty$ { "there's a URL and a lastchecked date but no type in " cite$ * warning$ } { type set.period.dash.check type output part.of.sentence lastchecked "Abruf: " swap$ * output } if$ } if$ } if$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {format.btitle.vol} { number empty$ { series empty$ { volume empty$ { title emphasize } { title emphasize ". Bd." * volume tie.or.space.connect } 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 ". Bd." * volume tie.or.space.connect ": " * "{\emph{" * title * "}}" * } if$ } if$%% series-test } { title emphasize }%% wenn number ex., dann immer title-Feld if$%% Ende number-test } FUNCTION {format.series.number.din} { volume empty$ { number empty$ { series empty$ { "" } { "(" series * ")" * } %% d. Seriennr koennte auch gleich hier %% im SERIES-Feld miterfasst werden if$ } { series empty$ { "(" number * ")" * "there's a number but no series in " cite$ * warning$ } { "(" series * number tie.or.space.connect ")" * } if$ } if$ } { series empty$ { "" } { type$ "proceedings" = %% Sonderfall, es darf VOLUME und NUMBER ex. ! { number empty$ { "(" series * ")" * } { "(" series * number tie.or.space.connect ")" * } if$ } { "" }%% Ausstieg mit Nullstring, s. Kommentar if$ }%% bei gezaehlten Reihen MUSS die Reihennr. im Feld NUMBER stehen! if$ %% wenn also d. Feld VOLUME nicht leer ist, dann liegt ausser bei %% Typ PROCEEDINGS falsche } %% Erfassung vor und es erfolgt d. Ausstieg mit d. Nullstring! if$ } FUNCTION {format.tr.series.or.number} { number empty$ { series empty$ { "" } { "(" series * ")" * } if$ } { series empty$ { "(" number * ")" * } { "(" series * number tie.or.space.connect ")" * } if$ } if$ } FUNCTION {format.misc.series} { series empty$ { "" } { "(" series * ")" * } if$ } FUNCTION { format.doi.urn } { urn empty$ { doi empty$ { "" } { "DOI" doi n.dashify tie.or.space.connect } if$ } { "URN" urn n.dashify tie.or.space.connect } if$ } 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$ } FUNCTION {format.pages.book} { pages empty$ { "" } { "" pages n.dashify tie.or.space.connect " S" *} %% 17/12/95 if$ } FUNCTION {format.pages} { pages empty$ { "" } { url empty$ { "S." pages n.dashify tie.or.space.connect } { pages } if$ } if$ } FUNCTION {format.vol.year.num.pages} { volume field.or.null year empty$ { "there's no year in " cite$ * warning$ } { " (" year * ")" * * } if$ month empty$ 'skip$ { ", " month * * } if$ number empty$ 'skip$ { ", Nr. " number * * } if$ pages empty$ 'skip$ { title missing$ { ", " format.pages.book * *} { ", " format.pages * *} if$ } if$ } FUNCTION {format.chapter.inbook} { duplicate$ empty$ { pop$ "empty chapter in " cite$ * warning$ } { type empty$ { "\emph{Kapitel\/} " swap$ tie.or.space.connect } { type " " * swap$ * }%% wenn keine bes. Abschnittsform gen. werden soll, %% koennte e. kl. Zwischenraum gewaehlt werden, z.B. " \, " if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "Kapitel " } { url empty$ { type } { "Kapitel " } if$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle.din} { booktitle empty$ { "" } { editor empty$ { volume empty$ { "{In: }" booktitle emphasize * } { "{In: }" booktitle emphasize * " Bd." volume tie.or.space.connect * } if$ } { volume empty$ { "{In: }" format.ed.incoll * ": " * booktitle emphasize * } { "{In: }" format.ed.incoll * ": " * booktitle emphasize * " Bd." volume tie.or.space.connect * } if$ } if$ } if$ } FUNCTION {format.thesis.tr.type} { type empty$ 'skip$ { pop$ type } if$ } FUNCTION {format.online.resource} { lastchecked empty$ %{ url empty$ doi empty$ urn empty$ and and % { skip$ } % { onlress set.period.dash.check % onlress output % } % if$ %} %{ url empty$ doi empty$ urn empty$ and and { "there's a lastchecked date but no url, urn or doi in " cite$ * warning$ } { %onlress set.period.dash.check %onlress output part.of.sentence lastchecked "Checked on: " swap$ * output } if$ %} %if$ } FUNCTION {format.type.or.online.resource} { type empty$ { format.online.resource } { type set.period.dash.check type output } if$ } FUNCTION {format.digital.resource.type} { lastchecked empty$ { url empty$ doi empty$ urn empty$ and and { skip$ } { eress set.period.dash.check eress output } if$ } { url empty$ doi empty$ urn empty$ and and { "there's a lastchecked date but no url, urn or doi in " cite$ * warning$ } { onlress set.period.dash.check onlress output part.of.sentence lastchecked "Abruf: " swap$ * output } if$ } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "{In: }{\emph " journal * "}" * } if$ } { "{In: }" key * } if$ "\cite{" * crossref * "}" * ", " * format.pages * } 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.inbk.vol.title} { volume empty$ { " In: " } { title empty$ { " In: Bd." volume tie.or.space.connect " von " * } { "In: Bd." volume tie.or.space.connect ": " * title emphasize * " (" * year * ") in " * } if$ } if$ } FUNCTION {format.book.crossref} { type$ "inbook" = { format.inbk.vol.title } { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ " " } { ". -- Bd." volume tie.or.space.connect " von " * } if$ } 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$ "" * } { "" * } if$ } { key * } if$ } { "" * } if$ "\cite{" * crossref * "}" * } 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: }{\emph " booktitle * "}" * }%% if$ } { "{In: }" } if$ } { "{In: }" } if$ "\cite{" * crossref * "}" * ", " * format.pages * } 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 new.sentence format.vol.year.num.pages output format.url output } { format.article.crossref output.nonnull } if$ format.lastchecked.or.type note set.period.dash.check note output doi set.period.dash.check urn set.period.dash.check format.doi.urn output issn set.period.dash.check format.isbn.issn output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors format.editors output.nonnull } if$ set.colon.after crossref missing$ { format.btitle.vol "title" output.check } { format.btitle "title" output.check } if$ format.edition output format.address.publisher.year "publisher" output.check new.sentence crossref missing$ { format.series.number.din output pages set.period.dash.check 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 format.doi output format.url output new.block isbn set.period.dash.check format.isbn.issn output fin.entry } %%% fuer Internetquellen mit URL, 9.12.2004 FUNCTION {booklet} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors format.editors output.nonnull } if$ set.colon.after format.btitle "title" output.check format.edition.or.version output format.url output format.howpublished output series new.sentence.checka format.series.number.din output pages set.period.dash.check format.pages.book output format.type.or.online.resource doi set.period.dash.check urn set.period.dash.check format.doi.urn output note set.period.dash.check note output format.isbn.issn output fin.entry } FUNCTION {inbook} { output.bibitem chapter format.chapter.inbook output.nonnull crossref missing$ { author empty$ { format.editors "\,{In:\,}" swap$ * "author and editor" output.check } { format.authors "\,{In:\,}" swap$ * output.nonnull } if$ author empty$ editor empty$ AND { before.all 'output.state := } { set.colon.after } if$ format.btitle.vol "title" output.check format.edition output format.address.publisher.year "publisher" output.check new.sentence format.series.number.din output isbn set.period.dash.check format.isbn.issn output part.of.sentence format.pages output note set.period.dash.check note output } { format.book.crossref output.nonnull part.of.sentence format.pages output note set.period.dash.check note output } if$ fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check set.colon.after format.title "title" output.check format.edition.or.version output format.url output crossref missing$ { format.in.ed.booktitle.din "booktitle" output.check format.edition output format.address.publisher.year "publisher" output.check new.sentence format.series.number.din output part.of.sentence%% nach DIN soll das eigentlich ganz an das Ende format.chapter.pages "pages" output.check format.type.or.online.resource doi set.period.dash.check urn set.period.dash.check format.doi.urn output isbn set.period.dash.check issn set.period.dash.check format.isbn.issn output note set.period.dash.check note output } { format.incoll.inproc.crossref output.nonnull format.type.or.online.resource doi set.period.dash.check urn set.period.dash.check format.doi.urn output isbn set.period.dash.check issn set.period.dash.check format.isbn.issn output note set.period.dash.check note output } if$ fin.entry } 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 output } { format.address.publisher.year "publisher" output.check } if$ new.sentence series empty$ 'skip$ { format.series.number.din output } if$ isbn set.period.dash.check issn set.period.dash.check format.isbn.issn output part.of.sentence format.pages output note set.period.dash.check note output } { format.incoll.inproc.crossref output.nonnull isbn set.period.dash.check issn set.period.dash.check format.isbn.issn output note set.period.dash.check note output } if$ fin.entry } FUNCTION {conference} { inproceedings }%% nach Patashnik, wg US-Kompatibilitaet FUNCTION {manual} { output.bibitem author empty$ { organization empty$ { title empty$ 'skip$ {format.btitle "title" output.check } if$ } { organization output.nonnull set.colon.after format.btitle "title" output.check } if$ } { format.authors output.nonnull set.colon.after format.btitle "title" output.check } if$ 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 format.doi output format.url output new.block fin.entry } %% Standard ist "Diplomarbeit", anderes mit TYPE="anderer Typ" erfassen! %% z.B. TYPE={Hausarbeit}, TYPE={Diss.}, TYPE={Habil.}, TYPE={Magisterarb.} FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check set.colon.after format.btitle "title" output.check address output part.of.sentence school "school" output.check part.of.sentence "Diplomarbeit" format.thesis.tr.type output.nonnull part.of.sentence format.date "year" output.check format.url output format.digital.resource.type doi set.period.dash.check urn set.period.dash.check format.doi.urn output pages set.period.dash.check format.pages.book output note set.period.dash.check note output fin.entry } FUNCTION {phdthesis} %% {mastersthesis}% ist identisch bis auf Standardwert, s.o. { output.bibitem format.authors "author" output.check set.colon.after format.btitle "title" output.check address output part.of.sentence school "school" output.check part.of.sentence "Diss." format.thesis.tr.type output.nonnull % koennte auch `Dissertation' sein part.of.sentence format.date "year" output.check format.url output format.digital.resource.type doi set.period.dash.check urn set.period.dash.check format.doi.urn output pages set.period.dash.check format.pages.book output note set.period.dash.check note output fin.entry } %% Normen, Vornormen, Schutzrechte (Patente) werden hiermit erfasst; %% (z.Zt. auch noch Internetressourcen) %% das type-Feld uebernimmt eine wichtige Steuerfunktion: FUNCTION {misc} { output.bibitem type missing$ not { type duplicate$ #1 #4 substring$ "Norm" = type #1 #4 substring$ "Vorn" = OR { " " * format.number * output new.sentence format.date output title empty$ { skip$ } { add.period$ new.sentence } if$ format.btitle "title" output.check note set.period.dash.check note output } { duplicate$ #1 #6 substring$ "Schutz" = { " " * format.number * output new.sentence "(" * format.date ")" * output add.period$ new.sentence format.authors.organization add.period$ output note output } %% wenn irgendein anderer Typ eingetragen ist { pop$ pop$ "" title empty$ { note empty$ { url empty$ { "there's no relevant field in " cite$ warning$ pop$ "" } { format.url output }%%% if$ } { note " " * output.nonnull } if$ } { author empty$ { editor empty$ { organization empty$ { skip$ } { format.editors.organization output.nonnull set.colon.after } if$ } { format.editors format.editors.organization output.nonnull set.colon.after } if$ } { format.authors format.editors output.nonnull set.colon.after } if$ format.btitle output.nonnull url empty$ { format.edition output format.howpublished output} { format.howpublished output format.edition.or.date output format.url output } if$ format.lastchecked.or.type new.sentence format.misc.series output %% note set.period.dash.check note output } if$ } if$ } if$ } %% wenn es keinen type gibt { title empty$ { note empty$ { url empty$ { "there's no relevant field in " cite$ warning$ pop$ "" } { format.url output }%%% das waere e. reine URL if$ } { note " " * output.nonnull %% format.url format.date output } if$ } { author empty$ { editor empty$ { organization empty$ { skip$ } { format.editors.organization output.nonnull set.colon.after } if$ } { format.editors format.editors.organization output.nonnull set.colon.after } if$ } { format.authors format.editors output.nonnull set.colon.after } if$ format.btitle output.nonnull url empty$ { format.edition output format.howpublished output} { format.howpublished output format.url output format.edition.or.date output format.lastchecked.or.type } if$ new.sentence format.misc.series output note set.period.dash.check note output } if$ } if$ fin.entry } FUNCTION {proceedings} { output.bibitem editor empty$ { organization empty$ { "empty organization and editor in " cite$ * warning$ } { organization " (Veranst.)" * output } if$ } { format.editors format.editors.organization output.nonnull } if$ set.colon.after format.btitle "title" output.check volume empty$ { skip$ } { "{\textnormal{Bd.}}" volume tie.or.space.connect emphasize "volume" output.check } if$ format.address.publisher.year "publisher" output.check new.sentence format.series.number.din output.nonnull 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 } 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 new.sentence.checka institution empty$ 'skip$ { " / " institution * output.nonnull } if$ format.edition.or.version output format.url output format.address.publisher.year output number new.sentence.checka format.tr.series.or.number "number" output.check "Forschungsbericht" format.thesis.tr.type set.period.dash.check "Forschungsbericht" format.thesis.tr.type output format.digital.resource.type pages set.period.dash.check format.pages.book output note "note" output.check new.block isbn set.period.dash.check issn set.period.dash.check format.isbn.issn output fin.entry } FUNCTION {unpublished} {misc}%% AUTHOR, TITLE, NOTE muessen sein! %% andere Felder sind optional FUNCTION {default.type} { misc } MACRO {jan} {"Jan."} MACRO {feb} {"Febr."} MACRO {mar} {"M{\^^b a}rz"} MACRO {apr} {"Apr."} MACRO {mai} {"Mai"} MACRO {may} {"Mai"} MACRO {jun} {"Jun."} MACRO {jul} {"Jul."} MACRO {aug} {"Aug."} MACRO {sep} {"Sept."} MACRO {okt} {"Okt."} MACRO {oct} {"Okt."} MACRO {nov} {"Nov."} MACRO {dez} {"Dez."} MACRO {dec} {"Dez."} %%$$$ stillgelegte Beispiele fuer den Gebrauch von Kuerzeln (hier Zs-Titel). %%MACRO {acmcs} {"ACM Computing Surveys"} %%MACRO {acta} {"Acta Informatica"} READ FUNCTION {sortify} { purify$ "l" change.case$ } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } 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 { ua.etal * } { 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} { 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 FUNCTION {initialize.longest.label}%% nicht identisch mit der Fkt.im ALPHA-Stil { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE { initialize.longest.label } ITERATE { longest.label.pass } FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ "\providecommand{\url}[1]{\texttt{#1}}" write$ newline$ "\expandafter\ifx\csname urlstyle\endcsname\relax" write$ newline$ " \providecommand{\doi}[1]{doi: #1}\else" write$ newline$ " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi" write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib}