This page is the version history of the BibTeX style
dinat.bst
, which produce bibliographies following the german
norm DIN 1505. Because this norm is only usefull for text in german, all
extra documentation like these pages is in german, too. Nonetheless the
styles themselves have comments and output in english. If you like to get
this pages in english, too, please write me, I'll do my very best.
Hier werden (hoffentlich) alle Änderungen und ihr Sinn aufgeführt, die zum Erreichen der aktuellen Version des BibTeX-Stils dinat.bst durchgeführt wurden. Ich hoffe, dass damit das Verständnis des Stils im Speziellen und von BibTeX im Allgemeinen vertieft wird.
Einen neuen Stil zu schreiben kam mir zwar auch kurzzeitig in den Sinn,
aber nach einigen halbherzigen Versuchen habe ich es aufgegeben (hey, ich
sollte eigentlich meine Diplomarbeit schreiben!) und mich lieber auf die
Modifikation eines existierenden Stils beschränkt. Als Ausgangspunkt
habe ich den Stil natdin
von Lorenzen
genommen, der die grundlegende DIN-Konformität schon eingebaut hat,
allerdings ziemlich fehlerhaft (und chaotisch) ist. Als Gradmesser für
den Erfolg habe ich anfangs die Datei xampl.bib
verwendet, die
mit BibTeX mitgeliefert wird. Sie bietet zwar nicht unbedingt DIN-konforme
Einträge, deckt aber alle Standardfälle ab.
Nachdem die Entscheidung gefallen war, einen "neuen" Stil zu
produzieren, ging es an die Einarbeitung in BibTeX im Allgemeinen und
natdin
im Besonderen. Irgendwann verstand ich so
ungefähr, wie BibTeX mit Hilfe der bst-Dateien aus den Einträgen
der Datenbank eine TeX-Quelle erzeugt und fühlte mich gewappnet, dem
Problem entgegenzutreten.
Zuallererst musste ich natdin
erstmal zum Laufen bekommen,
bei mir produzierte das Ding haufenweise Fehlermeldungen und Warnungen.
Fehler sind schlimmer als Warnungen, also musste ich mich zuerst um diese
kümmern.
or
und conference
entferntAb hier ließ sich der Stil ohne Fehler einlesen, produzierte aber noch 48 Fehler mit xampl.bib, ein bischen viel für meinen Geschmack!
Nun wurden einige Änderungen durchgeführt, die die Ausgabe nicht grundlegend ändern, aber für das Verständnis des Stils gut waren. Das meiste war eigentlich einfaches Aufräumen, nur ein paar Sachen sind mir im Vorbeigehen zusätzlich aufgefallen, und so habe ich sie gleich mit geändert:
either.or.check
entfernt, wird nicht aufgerufenmisc
Norm
durch NORM
ersetzt[u.~a.~]
durch [u.~a.]
ersetzt{ 'skip$ }
durch { skip$ }
ersetztmar
geändertphdthesis
eingeführtformat.pages.book
geändertshow
und show.stack
für
Debugging eingeführt"x" * "y"
zu
"xy"
zusammengezogen'name
durch { name }
ersetztarticle.in.journal
format.editors
format.address.publisher.year
format.btitle.vol
format.series.number.din
format.vol.year.num.pages
format.in.ed.booktitle.din
format.tr.number.din
(umgestellt!)format.book.crossref
extra.label
am Ende von format.date
entfernttie.or.space.connect
durch *
ersetzt,
falls kein festes Leerzeichen nötigBis hier waren alle Maßnahmen im Prinzip semantik-erhaltend, haben damit also an der Anzahl der Fehler nichts geändert! Dies sollte nun anders werden ...
calc.label
vor sortify
ein
label
eingefügtDas entfernte die Fehlermeldungen, die durch das Sortieren hervorgerufen wurden. Es blieben noch 12 Fehlermeldungen.
article.in.journal
bei leeren author
und
editor
kein *
Das behebt den empty literal stack
bei
whole-jounal
, es bleiben noch 11 the literal stack isn't
empty ...-Fehler.
Ab hier war das Verständnis des Stils allerdings schon relativ groß, so dass vorher ein paar weitere Dinge in Angriff genommen werden konnten:
out.*
format.*
push.*
Eine naheliegende Maßname war das Einfügen von
stack$
am Ende von out.bibitem.end
(ehemals
fin.entry
), aber das hätte nur die Symptome kuriert,
nicht deren Ursache. Also ging es einzeln ans Eingemachte: Es waren alle
Stellen zu suchen und zu finden, in denen irgendwas auf den Stack gelegt
wurde, das hinterher nicht verarbeitet wurde. Dazu half die Umbenennung:
alles mit push
musste etwas (genauer gesagt, exakt
ein Item) auf den Stack legen, alles mit
format
dagegen sollte den obersten Stack-Eintrag manipulieren,
musste ihn also dazu abheben und hinterher wieder drauftun oder/und musste
etwas daranhängen. Gefunden habe ich dann nur den einen Eintrag:
format.article.in.journal
bei leerem Titel
*
entferntDamit (wenn ich nichts vergessen habe) waren alle Fehlermeldungen verschwunden, und die Hauptarbeit war getan:
Nun ging es daran, neue Funktionen einzubauen bzw. die existierenden Formatierungen zu modifizieren:
format.article.crossref
eingefürht\textbf
) entfernt\textbf
entferntpages
in incollection
und
inproceedings
hinter series
und number
verschoben
Neuere Stile enthalten das Feld URL, also muß das auch hier rein (außerdem brauche ich es selbst!).
url
eingefügturl
eingefügt\texttt
für
URL verwenden (begin.bib
)publisher
, author
und
editor
als Impressum die url
verwendenurl
in alle Einträge vor note
eingebaut,
allerdings nur, wenn noch nicht im Impressum verwendet
Nachdem der DINAT-Stil so weit gediehen war, kam ich durch Beiträge in
der Newsgruppe de.comp.text.tex auf die
Idee, den Stil so zu modifizieren, dass er die ganzen
NATBIB-Möglichkeiten bietet, also z.B. auch \citeyear
und
die *
-Formen.
year
in das Label eingebaut
(calc.label
)Leider gingen dabei die Marken vor den Einträgen im Literaturverzeichnis flöten, so dass ein zweiter Stil nötig wurde, der allerdings nicht mehr so richtig DIN-konform genannt werden kann. Da er aber quasi die Langform von DINAT ist, wurde er DINNAT genannt. Falls ich das jemals hinbekomme, die Marken zu erzeugen, wird DINNAT aber wieder eingestellt!
Ab jetzt müssen alle Änderungen parallel in beiden Stilen durchgeführt werden, falls nicht anders vermerkt.
Damit werden aber schon die zusätzlichen cite-Versionen ermöglicht, es fehlt allerdings noch die lange Autorenliste.
make.full.names
mit allen in ihr aufgerufenen Funktionen
aus den anderen NAT-Stilen in dinnat
eingefügt und hinter
das bisherige Label eingebautNachdem ich soweit gekommen war, war es an der Zeit, DINAT mit der großen bösen Welt in Kontakt kommen zu lassen: Eine erste Ankündigung erfolgte in der Newsgruppe de.comp.text.tex. Das Ergebnis war nicht überwältigend, aber größer als gedacht, und vor allem positiv! Ein echter Ansporn, weiter zu arbeiten.
Wie üblich finden sich direkt nach Veröffentlichung der ersten Version sofort ein paar kleine Fehler, die eine Überarbeitung notwendig machen:
format.dashes
aus push.url
entferntout.bibitem.start.end
in out.bibitem.end
umbenannt (typischer Suchen-und-Ersetzen-Fehler)top$
durch warning$
ersetzt, falls es nicht
für Debugging gebraucht wirdtie.or.space.connect
durch *
ersetzt,
falls der hintere Teil auf jeden Fall länger ist, z.B. bei
ISBN/ISSNtie.or.space.connect
durch *
ersetzt)format.article.in.journal
vereinfachtpush.series.number
umgestelltUnd natürlich auch ein paar richtige Änderungen (welche erste Verison ist schon korrekt?):
key
wird der ganze Eintrag
genommen, nicht mehr nur die ersten drei Buchstaben (mailto: Kai Rascher)year
-Eintrag
verwendet, nicht nur die letzten vier Stellen, z.B. für
von-bis-Angaben (mailto: Ulf
Hinze)incollection
und inproceedings
wird auch
mit crossref
das Kapitel angegebenpush.book.crossref
vereinfachtAb jetzt sind auch diese Webseiten verfügbar, ich hoffe, damit werden viele Fragen im Vorfeld beantwortet. Irgendwann demnächst wird diese Seite auch umziehen, auf jeden Fall steht die Adresse dann im Vorspann der Dateien.
Nachdem diese Stile und damit auch diese Webseiten (auf Anregungen von mailto: Rolf Niepraschk) die Aufnahme
in die heiligen Hallen des CTAN im Pfad
biblio/bibtex/contrib/german/dinat/
gefunden haben, gibt es
auch noch ein paar Änderungen:
\natexlab
in dinat
wieder eingeführt
(warum war das eigentlich draussen?)dinnat
geschweifte Klammern um \natexlab
und in \bibitem[...]
entferntmisc
wird für NORM
eine beliebige
Groß-/Kleinschreibung erkannt und verwendetcite$
) als Label genommen, nicht nur ihre ersten drei
Buchstabenpush.address.publisher.year
umgestellttie.or.space.connect
durch *
ersetzt
(und Leerzeichen bzw. Tilden eingefügt)push.incoll.inproc.crossref
richtig
gesetzturl
nicht bei fehlenden Verlagsangaben (und nicht
fehlenden Autor und Editor!)crossref
bei Normen eingefügtWenn das so weitergeht, komme ich doch noch in einen wöchentlichen Update-Rhythmus :-)
Ab jetzt gibt es zu den Änderungen auf dieser Seite auch die Namen und Mail-Adressen der Leute, die diese angeregt haben, als Dank und Ansporn sozusagen.
format.names
entfernt (mailto: Stefan Nobis)urldate
als Datum des Zugriffs auf die URL eingebaut (mailto: Stefan Nobis)begin.bib
zur Ausgabe in
die bbl-Datei eingefügt (sollte eigentlich Standard sein!)incollection
und inproceedings
gesetzt
(push.incoll.inproc.crossref
)natbib.cfg
berichtigt (mailto: Stefan Nobis)dinnat
gefunden!
Diese Lösung sollte auch mit der Formatierung per
natbib.cfg
zurechtkommen.
Falls die natbib
-Option numbers
oder die
\bibpunct
-Variante n
gewählt wurde, wird
auch nur ein entsprechendes numerisches Label erzeugt.
Die letzte Änderung rechtfertigt den Sprung auf Version 2.0, da nun mit einem Stil alle Zitiermöglichkeiten und Label erreicht werden können.
Diese Änderung führt darüberhinaus zur Zusammenführung der beiden Stile, so dass nur noch ein Stil, nämlich der eigentlich geplante dinat.bst, übrigbleibt.
Und weiter geht es im immerwährenden Kreislauf der Änderungen, selbst an meinem Geburtstag (aber schließlich erfolgte die erste Veröffentlichung auch am Geburtstag meiner Frau):
\bibpunct
in der
Konfiguration natbib.cfg
erzeugte ein zusätzliches
Leerzeichen in den Zitierungen, also wurde es entferntisbn
, issn
, url
und
urldate
im Vorspann und auf der Webseite erklärt
(demnächst wird es auch eine richtige Anleitung geben)techreport
url
als Impressum bei
leerem institution
, nicht publisher
mailto:
verlinkt, Webseiten über den Namenet.al.
statt
u.a.
haben wollen (mailto: Peter Baum)push.editors.organization
in
push.organization
umbenannt und umgebautpush.editors
umgebautpush.ed.incoll
überflüssigpush.authors.editors
neu erstellt und eingebundenu.a.
: \,
statt
~
format.article.in.journal
zu
push.article.in.journal
umgebaut\cite
durch \citep
ersetztpush.crossref.editor
entfernt, da es nicht benutzt
wurdeNachdem die Diplomarbeit abgegeben war, war wieder Zeit für die Arbeit an dinat, dachte ich. Aber dann kam die neue Wohnung, der Umzug, das Einrichten, der neue Job usw. Aber nun ist es geschafft, eine neue Version ist fertig, wenn auch nicht so neu wie erhofft:
push.crossref
erstellt und eingebautcrossref
geändertout.check
in out.check.required
umbenanntout.check.din
eingebaut für nur nach DIN
fehlende Teilemastersthesis
in masterthesis
korrigiertZugriffsdatum
ebenfalls richtig geschrieben\,
geschweifte Klammern gesetzt, hoffentlich
behebt das den nervigen \nobreakspace{}
-Fehler
Vor allem für das letztere erbitte ich Meldungen, ob es geholfen hat!
Nun ist der erste Stress mit neuer Wohnung, neuem Job etc. weg, viele viele Vorschläge für dinat sind eingegegangen, und jetzt habe ich auch Zeit für eine neue Version gefunden. Diese bringt noch nicht die angekündigten großen Änderungen, sondern wie die vorigen vor allem Detailverbesserungen, wenn auch einige lange geforderte:
masterthesis
wieder in das korrekte mastersthesis
geändert. Entschuldigung an alle für diese schlampige Korrektur, da
hatte ich mich aufs Glatteis führen lassen und selbst nicht genug
recherchiert. Um den Frust nicht zu groß werden zu lassen, bleibt
masterthesis
erhalten.u.~a.
beseitigt, nun sollten
wirklich alle \nobreakspace{}
-Fehler weg sein!\labelsep
verwendet, wie es sich
gehört....key.organization.label
korrigiert, so dass nun die
ganze Organisation als Label verwendet wird.proceedings
wird jetzt eine leere Organisation
abgefangen und falls vorhanden durch (Hrsg.) ergänzt.Und die Dokumentation ist immer noch nicht fertig.
Diese Version ist eine Olaf-Meltzer-Dank-Ausgabe, da er die meisten Änderungen zu dieser Version beigetragen hat. Ich hatte eigentlich nur ein wenig zu tun mit dem Zusammentragen und Veröffentlichen. Dachte ich jedenfalls, bis ich mich an die Namens-Formatierung machte ... Aber trotzdem, er hat es verdient, da er nicht nur Fragen stellt, sondern auch selbst gute Lösungen liefert!
inbook
verbessert. Nun wird bei der Zitierung eines
einzelnen Teils eines Buchs nur eine einzelne Literaturangabe mit allen Werten
genriert. Wenn dagegen mehr als ein Teil eines Buchs zitiert werden, wird
das Buch mit allen Angaben aufgeführt und die jeweiligen Teile mit einem
entsprechenden Verweis (mailto: Olaf Meltzer).proceedings
entfernt
(mailto: Olaf Meltzer).misc
ergänzt (mailto: Olaf Meltzer).format.full.names
, format.names
und
sort.format.names
überarbeitet. Dabei fiel ab:
numnames
konnte entfernt werden.zahl
wurde in pos
umbenannt,
da sie nicht einfach eine Zahl ist, sondern eine Position angibt.lang
wurde entfernt und statt dessen
die Variable len
verwendet.-
mehr (sollte eigentlich schon lange gemacht sein).format.dashes
etwas
aufgeräumt und verstanden.Zum Stand der Dokumentation siehe oben. Aber inzwischen habe ich sehr viele Beispiel-Einträge sammeln können!
Und direkt nach der letzten Version nun schon wieder eine neue. Es haben sich einfach ein paar Dinge ergeben, die mir sinnvoll erschienen und eine echte Verbesserung darstellen. Außerdem habe ich gerade etwas Zeit.
proceedings
fehlendes *
hinter
push.organization
angefügt (mailto: Holger Uhr).dinatlabel
wird nicht mehr \citealt
aufgerufen, sondern ein eigenes Label (dinat.label
) gebastelt.
Dies spart einen LaTeX-Durchgang und ermöglicht vor allem das
Entfernen eines Zitats aus dem Text, ohne alle .aux
-Dateien
wegschmeissen zu müssen. Ausserdem verhindert es überflüssige
Links, wenn das hypertext
-Paket verwendet wird (mailto: Ben Samwer).key
vorhanden ist, wird dieser
immer für das Label verwendet, vor author
,
editor
etc. Die dahinterliegende Überlegung ist, dass
ein key
wohl nur angegeben wird, wenn er Sinn macht. Ist dann
aber ein author
o.Ä. vorhanden, würde
key
nirgendwo auftauchen. So lassen sich nun auch Werke mit
Autorenangaben etc. mit einer evtl. üblicheren Kurzbezeichnung zitieren (mailto: Ben Samwer)...label
-Funktionen umgestellt und
auch umbenannt....sort
-Funktionen mussten ebenfalls
angepasst werden.longest.label.width
und longest.label
wurden
nicht benutzt, also wurden sie entfernt. Ursprünglich waren die Variablen
wohl zur Bestimmung der Einrücktiefe im Literaturverzeichnis
gedacht, was aber bei Autor-Jahr-Labels wenig Sinn macht, vor allem
wenn man an Werke mit zwei Autoren denkt, deren Label allein schon eine
ganze Zeile füllen kann.initialize.longest.label
in initialize.label
umbenannt und vereinfacht.number.label
in label.count
umbenannt.Ein Problem bleibt die Sortierung von Einträgen mit gleichem ersten (A), aber verschiedenem zweiten Autor (B bzw. C) sowie mindestens einem weiteren Autoren (D) und unterschiedlicher Jahreszahl (1994 bzw. 1999). Das Label wird dann aus erstem Autor und Jahr gebildet (A u.a. 1994 bzw. A u.a. 1999) und entsprechend sortiert. Wird aber das Label nicht angezeigt, z.B. bei numerischer Zitierung, dann wird das Werk A, B und D 1999 trotzdem hinter A, C und D 1994 einsortiert, was zu Verwirrung führen kann. Dies ist aber nicht befriedigend zu lösen, da zur Sortierzeit nicht zwischen den beiden Zitierungsarten unterschieden werden kann. Da laut DIN nach dem Label sortiert wird, behalte ich dieses bei, da ja die numerische Zitierung nicht DIN entspricht.