Exportfilter anpassen

Mit JabRef können Sie Ihre eigenen Exportfilter definieren und genau so wie die Standard-Exportfilter benutzen. Ein Exportfilter wird durch eine oder mehr Layout-Dateien definiert, die mittels eingebauter Formatierprogramme das Format der exportierten Dateien festlegen. Ihre Layout-Datei müssen Sie in einem separaten Texteditor erstellen.

Hinzufügen eines Exportfilters

Die einzige Voraussetzung für einen Exportfilter ist, daß eine Datei mit der Endung .layout vorhanden ist. Um einen neuen, eigenen Exportfilter hinzuzufügen, öffnen Sie das Dialogfenster Optionen -> Verwalte externe Exportfilter und klicken auf die Schaltfläche Neu. Es öffnet sich ein neues Fenster, in dem Sie einen Namen (der als Auswahl im Dateityp-Dropdownmenü erscheint, wenn man Datei -> Exportieren im JabRef-Hauptfenster wählt), eine Pfadangabe zur .layout-Datei und die gewünschte Dateiendung für den Exportfilter angeben können. Wenn Sie den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch vorgeschlagen.

Das Erstellen des Exportfilters

Um einen Eindruck zu bekommen, wie Exportfilter auszusehen haben, suchen Sie am besten auf unserer Homepage nach dem Paket, das die Layout-Dateien der Standard-Exportfilter enthält.

Layout-Dateien

Nehmen wir einmal an, dass wir einen HTML-Exportfilter erstellen wollen.

Der Exportfilter muss lediglich aus einer einzigen .layout-Datei bestehen, die in diesem Fall html.layout genannt werden könnte. Sie können darüber hinaus auch zwei Dateien mit den Namen html.begin.layout und html.end.layout anlegen. Die erste dieser beiden Dateien enthält den Kopfteil der Ausgabe, die zweite den Fußteil. JabRef sucht jedes Mal, wenn der Exportfilter benutzt wird, nach diesen Dateien und fügt sie – falls sie gefunden werden – wörtlich vor bzw. nach den einzelnen Einträgen in die Ausgabe ein.

Beachten Sie, dass sich diese Dateien in demselben Verzeichnis wie html.layout befinden müssen und die Namensbestandteile .begin bzw. .end enthalten müssen.

In unserem Beispiel-Exportfilter könnten diese Dateien folgendermaßen aussehen:

html.begin.layout:
<HTML>
<BODY> text="#275856">
<basefont size="4" color="#2F4958" face="arial">

html.end.layout:
</BODY>
</HTML>

Die Datei html.layout stellt die Standard-Formatvorlage für den Export eines einzelnen Eintrags bereit. Falls Sie unterschiedliche Formatvorlagen für verschiedene Eintragstypen anwenden wollen, müssen Sie Eintrags-spezifische .layout-Dateien erstellen. Diese müssen sich ebenfalls in demselben Verzeichnis wie die Haupt-Layout-Datei befinden und den Namensbestandteil .entrytype enthalten. Der Name des Eintragstyps muss komplett in Kleinbuchstaben geschrieben werden. In unserem Beispiel wollen wir eine Formatvorlage für Einträge des Typs "book" haben, die in der Datei html.book.layout abgelegt wird. Für eine Dissertation würden wir die Datei html.phdthesis.layout anlegen – und so weiter. Diese Dateien sind der Standard-Layout-Datei sehr ähnlich, nur dass sie lediglich für Einträge des entsprechenden Typs genutzt werden. Beachten Sie, dass die Standard-Layout-Datei so allgemein gehalten werden kann, dass sie die meisten Eintragstypen abdeckt.

Das Format der Layout-Datei

Layout-Dateien werden mit einem einfachen markup-Format erstellt, bei dem die Kommandos mit einem "backslash" (\) eingeleitet werden. Alle Textbestandteile, die nicht als Kommando identifiziert werden, gelangen direkt in die Ausgabedatei.

Feldkommandos

Ein beliebiges Wort, vor dem ein backslash steht, z.B. \author, \editor, \title or \year, wird als Verweis auf das entsprechende Feld ausgewertet, das dann direkt in die Ausgabe kopiert wird.

Feldformatierer

Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden. Dies wird mit Hilfe eines Feldformatierers gemacht - einer java class, die eine Methode zur Verarbeitung des Feldinhaltes enthält.

Ein Formatierer wird angewendet, indem man das Kommando \format gefolgt vom Namen des Formatierers in eckigen Klammern und dem Feldnamen in geschweiften Klammern einfügt, z.B.:

\format[ToLowerCase]{\author}

Sie können auch mehrere Formatierer angeben, getrennt durch Kommas. Sie werden nacheinander aufgerufen, und zwar von links nach rechts. Das Kommando

\format[ToLowerCase,HTMLChars]{\author}

ruft z.B. zunächst den Formatierer ToLowerCase auf, HTMLChars formatiert anschließend das Ergebnis. Auf diese Weise können Sie eine beliebige Anzahl an Formatierern auflisten.

JabRef bietet die folgenden Formatierer, wobei einige von anderen abhängen:

Falls keiner der verfügbaren Formatierer das Ergebnis erzielt, das Sie erreichen möchten, können Sie Ihren eigenen Formatierer hinzufügen, indem Sie das net.sf.jabref.export.layout.LayoutFormatter-Interface implementieren. Wenn Sie Ihre Klasse (class) in das Paket net.sf.jabref.export.layout.format einfügen, können Sie den Formatierer mit seinem Klassennamen aufrufen, so wie auch die Standard-Formatierer. Ansonsten müssen Sie den Formatierer mit seinem vollen Namen aufrufen (inklusive Paketname). In jedem Fall muss der Formatierer in ihrem classpath sein, wenn Sie JabRef starten.

Eigene Namens-Formatierer verwenden

Mit JabRef 2.2 ist es jetzt möglich, eigene Namens-Formatierer zu definieren. Dazu wird die Syntax der Bibliographie-Stile (bst) verwendet. Das erlaubt äußerste Flexibilität, ist allerdings aufwändig in der Schreibweise.

Sie können unter Optionen -> Einstellungen -> Namens-Formatierer Ihren eigenen Formatierer schreiben. Benutzen Sie das folgende Format: <Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>...@@
<Fall2>@<Bereich21>@... und so weiter.

Dieses Format teilt die Aufgabe, eine Liste von Autoren zu formatieren, in unterschiedliche Fälle abhängig von der Zahl der Autoren (das ist nötig, weil manche Formate sich je nach der Zahl der Autoren unterscheiden). Die einzelnen Fälle werden durch @@ voneinander getrennt und enthalten Anweisungen, wie jeder einzelne Autor in diesem Fall zu formatieren ist. Diese Anweisungen werden durch @ getrennt.

Fälle werden durch Ganzzahlen (1, 2, 3, etc.) oder das Zeichen * (alle Autoren) definiert. Sie geben die nachfolgenden Anweisungen an den Formatierer weiter, falls weniger oder gleich viele Autoren vorhanden sind.

Bereiche sind entweder <Ganzzahl>..<Ganzzahl>, <Ganzzahl> oder das Zeichen *. Die Liste der Autoren fängt bei 1 an. Die Ganzzahlen können einen negativen Wert haben, um vom letzten Autor der Liste zu starten, wobei -1 der Wert für den letzten Autor ist.

Als Beispiel dient die Autorenliste "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay":

Die <Format>-Strings nutzen das BibTeX-Namensschema:

Die vier Buchstaben v, f, l, j stehen für die Namensteile von, Vorname (first), Nachname (last) und Junior und werden in geschweiften Klammern gesetzt. Ein einzelner Buchstabe v, f, l, j bedeutet, dass der Name abgekürzt werden soll. Wenn einer dieser Buchstaben oder Buchstabenpaare vorkommen, gibt JabRef alle entsprechenden Namen (eventuell abgekürzt) aus, aber der Ausdruck in geschweiften Klammern wird nur ausgegeben, wenn der Namensteil existiert.

Beispielsweise wird beim Format "{ll} {vv {von Part}} {ff}" die Autorenliste "Mary Kay and John von Neumann" von JabRef als "Kay Mary" (mit zwei Leerzeichen) und "Neumann von von Part John" ausgegeben.

Zwei weitere Beispiele sollen das Ganze verdeutlichen; die BibTeX-Dokumentation gibt weitere Hinweise.

Kurzes Beispiel: "{ll}, {f.}" formatiert "Joe Doe" als "Doe, J."

Ausführliches Beispiel:

Um

"Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"

als

"Doe, J., Jane, M., Bar, B. and Kay, A."

zu formatieren, nutzt man

1@*@{ll}, {f}.@@2@1@{ll}, {f}.@2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}.@-1@ and {ll}, {f}.

Falls jemand eine bessere Dokumentation hierzu verfassen möchte: Wenden Sie sich einfach an die JabRef-Maililnglisten!

Bedingte Ausgabe

Manche statische Ausgabe macht nur Sinn, wenn ein bestimmtes Feld nicht leer ist. Wenn wir z.B. hinter den Namen der Editoren den Text (Hrsg.) haben wollen, brauchen wir folgendes:

\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)

Wenn nun aber das editor-Feld leer ist - möglicherweise ist es für den Eintrag, der exportiert werden soll, nicht erforderlich -, dann würde das (Hrsg.) dennoch erscheinen. Das kann man mit den Kommandos \begin und \end verhindern:

\begin{editor}
\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)
\end{editor}

Die Kommandos \begin und \end sorgen dafür, dass der Text, den sie einschließen, nur dann ausgegeben wird, falls das Feld, auf das in den geschweiften Klammern verwiesen wird, für den zu exportierenden Eintrag definiert und damit nicht leer ist.

Anmerkung: Das Benutzen der Kommandos \begin und \end ist ein Schlüssel zum Erstellen von Layout-Dateien, die mit einer Vielzahl von Eintragstypen umgehen können.

Gruppierte Ausgabe

Wenn Sie Ihre Einträge auf der Basis eines bestimmten Feldes gruppieren wollen, benutzen Sie die Kommandos für die gruppierte Ausgabe. Die gruppierte Ausgabe ist der bedingten Ausgabe sehr ähnlich, auß dass der Text zwischen den Kommandos nur ausgegeben wird, wenn das Feld, auf das in den geschweiften Klammern verwiesen wird, unterschiedliche Werte enthält.

Nehmen wir zum Beispiel an, dass wir die Ausgabe nach dem keyword (Stichwort) gruppieren wollen. Bevor die Datei exportiert wird, müssen die Einträge nach dem keyword sortiert worden sein. Dann benutzen Sie die folgenden Kommandos, um nach keyword zu gruppieren:

\begingroup{keywords}New Category: \format[HTMLChars]{\keywords}
\endgroup{keywords}

Teilen Sie Ihre Arbeit mit anderen

Mit externen Layout-Dateien ist es einfach, Ihre eigenen Export-Formate mit anderen Anwendern gemeinsam zu benutzen. Falls Sie einen Exportfilter für ein Format erstellen, das nicht von JabRef unterstützt wird, oder falls Sie einen bestehenden Exportfilter verbessern, möchten wir Sie ermutigen, Ihre Arbeit auf der SourceForge.net-Seite bereitzustellen. Dasselbe gilt für Formatierklassen, die Sie schreiben. Wir würden uns freuen, eine Sammlung von bereitgestellten Layout-Dateien verteilen zu können oder die Standard-Export-Filter und Standard-Formatierer zu erweitern.