Freitag, 31. Oktober 2008

Babelbib und fehlerhate Zeilenumbrüche

Wer in LaTeX seine Literatur in deutscher Sprache verwalten möchte, greif oft zum babelbib-Paket. Wer zudem längere URLs in seinen Quellen hat, ist bestimmt schon oft auf das Problem gestoßen, dass ein automatischer Zeilenumbruch der BibTeX-Engine mitten in den babelbib-Befehl \btxurldatecomment fällt und somit einen Fehler erzeugt:
! Undefined Control Sequence

Die Fehlerhafte Stelle sieht dann in etwa so aus:
\newblock {\latintext \btxurlfont
{http://www.ibm.com/developerworks/webservices/library/ws-soa-design1/}}\btx%
urldatecomment {\btxkeywordlanguage {\btxurldatefont{01.10.2008}}}.


BibTex bricht zu lange Zeilen im Normalfall an Leerzeichen automatisch um und fügt ein %-Zeichen am Ende der Zeile ein, um Fehler bei der Verarbeitung durch TeX zu verhindern. Da bei URLs jedoch keine Leerzeichen vorkommen und der nächtste Befehl direkt an die URL anschließt, bricht BibTeX im schlimmsten Fall mitten im Befehl um und erzeugt somit den Fehler.

Um das Problem zu beheben, bieten sich 3 Möglichkeiten an:
  1. Manuell die fehlerhaften Zeilenumbrüche in der bbl-Datei (Datei, in die BibTeX die Literaturangaben schreibt) entfernen. Allerdings werden die Zeilenumbrüche bei jedem erneuten Lauf von BibTeX wieder eingefügt.
  2. Lange URLs manuell umbrechen (Die aktuellen Versionen von url und hyperref können mit %-Zeichen, die durch BibTeX in die URL eingefügt wurden, umgehen)
  3. Die bibliographischen Stile von babelbib anpassen
Die letzte Möglichkeit erfordert ein bisschen Recherche, wo man etwas ändern muss, führt jedoch zu dem besten Ergebnis.

In den Bibliography-Stilen von babelbib (Bei installierter MikTeX-Dsitribution findet man sie z.B. im Pfad \MiKTeX 2.7\bibtex\bst\babelbib) sucht man nach der Zeile
"}}\btxurldatecomment {\btxkeywordlanguage {\btxurldatefont{" *

und fügt hinter den ersten beiden geschweiften Klammern ein Leerzeichen ein:
"}} \btxurldatecomment {\btxkeywordlanguage {\btxurldatefont{" *

Das bewirkt, dass entweder die URL automatisch umgebrochen wird (womit die Pakete url oder hyperref umgehen können) oder an diesem Leerzeichen eine neue Zeile beginnt. Das Problem, dass BibTeX den Befehl selbst umbricht, ist damit gelöst.

Diesen Vorgang muss man für jede bst-Datei durchführen, die man von babelbib verwenden möchte.

Keine Kommentare: