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. Nevertheless 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
schreibe eigentlich gerade meine Diplomarbeit!) und mich lieber auf die
Modifikation eines existierenden Stils beschränkt. Als Ausgangspunkt
habe ich den NATDIN-Stil 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.
or
und conference
entferntAb hier ließ sich der Stil ohne Fehler einlesen, produzierte aber noch 48 Fehler mit xampl.bib!
Nun wurden einige Änderungen durchgeführt, die die Ausgabe nicht grundlegend ändern, aber für das Verständnis des Stils gut waren:
either.or.check
entfernt (wird nicht aufgerufen)misc
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 Leerzeichen nötigBis hier waren alle Maßnahmen im Prinzip semantik-erhaltend, haben damit also an der Anzahl der Fehler nichts geändert!
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.
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. 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!
year
in das Label eingebaut
(calc.label
)Damit werden 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 eingefügt und hinter das bisherige
Label eingebautAb jetzt müssen alle Änderungen parallel in beiden Stilen durchgeführt werden, falls nicht anders vermerkt.
Nachdem 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
bei crossref
das Kapitel angegebenpush.book.crossref
vereinfachtAb jetzt ist auch diese Webseite 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ügtincollection
und inproceedings
gesetzt
(push.incoll.inproc.crossref
)natbib.cfg
berichtigt
(mailto: Stefan Nobis)dinnat
!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 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.
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: )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
wurde