bib-Datei einbinden, die online erhältlich ist

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


markusheinzer
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mo 17. Nov 2008, 07:57

bib-Datei einbinden, die online erhältlich ist

Beitrag von markusheinzer »

Hallo zusammen

Hat jemand eine Ahnung, wie man bei biblatex mit \bibliography{} anstatt einer lokalen bib-Datei eine solche einbinden kann, die übers Internet erhältlich ist? Also etwas in diesem Stil:
\bibliography{http://www.server.xx/bib-datei.bib}
Mein Bib-Verwaltungsprogramm (aigaion) läuft auf einem Server und bietet einen Link an, der jederzeit alle aktuellen Literaturdaten in Form einer bib-Datei ausgibt.

Gruss
Markus

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Wenn man bei \bibliography eine URL angibt, schreibt \bibliography im ersten Schritt einfach diese URL an Stelle der Datei in die aux-Datei. Man bräuchte nun also ein BibTeX, das außer mit Dateien auch mit URL umgehen kann. Das könnte man sich notfalls per Script/Batch zusammenbauen. Das andere Problem ist aber dann, dass LaTeX im nächsten Schritt eine Datei mit Endung bbl lesen will. Selbst, wenn TeX außer Dateien auch URLs im Input verarbeiten könnte, müsste die bbl-Datei ja wieder an gleichem Ort wie die bib-Datei angeboten sein. Das wird nicht funktionieren.

Man müsste sich jetzt also ein geändertes \bibliography definieren, das zwei Argumente bekommt, nämlich die URL und den Dateinamen der lokalen bbl-Datei. Das könnte beispielsweise so aussehen:
\def\bibliographybyURL#2{%
  \if@filesw
    \immediate\write\@auxout{\string\biburldata{#1}{#2}}%
    \immediate\write\@auxout{\string\bibdata{#1}}%
  \fi
  \@input@{\jobname.bbl}}
\let\biburldata\@gobble
Dazu bräuchte man dann ein Programm, das die aux-Datei nach \biburldata-Anweisungen durchsucht, die Datei der URL aus dem zweiten Argument (also #2) runterlädt und lokal als #1.bib ablegt und anschließend noch BibTeX aufruft.

Mit grep und etwas sed-Magie, müsste das machbar sein. Ich denke da an etwas wie (ungetestet):
#!/bin/sh
for biburldata in `grep '\\\\biburldata' $1.aux`; do
  localfile=`echo $biburldata | sed 's/^.*\\\\biburldata{\([^}]*\)}.*$/\1/'`
  url=`echo $biburldata | sed 's/^.*\\\\biburldata{\([^}]*\)}{\([^}]*\)}.*$/\2/'`
  wget -O $localfile $url
done
bibtex $1
ACHTUNG: Das ganze ist nicht nur ungetestet, es hat derzeit auch keine Fehlerbehandlung, etwa wenn wget versagt oder die Aufrufargument bereits die Endung .aux hat oder mehr als ein Argument übergeben wird, oder \biibliographybyurl die falschen Argumente hat (beispielsweise die Argumente vertauscht werden). Ich wollte nur zeigen, in welche Richtung zu arbeiten wäre.

Vermutlich kann man sich die Arbeit leichter machen, indem man wget einfach in den Build-Prozess, in dem auch der LaTeX-Aufruf stattfindet einbindet. Ggf. könnte man das auch per shell-escape aus LaTeX heraus machen, also etwas wie
\immediate\write 18{\wget -O my.bib http://woherausimmer.bib}
\bibliography{my}
Achtung! shell-escapes sind normalerweise per Voreinstellung deaktiviert. Näheres dazu, wie man sie aktiviert ist der Anleitung des verwendeten TeX-Systems oder der Manual-Page zum verwendeten TeX zu entnehmen.

markusheinzer
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mo 17. Nov 2008, 07:57

Beitrag von markusheinzer »

Vielen Dank für die ausführliche Antwort. Ich glaube, ich werde in Richtung deiner "leichten" Variante am Schluss gehen.

Schliesslich habe ich nun auch herausgefunden, wie beim Gedit-Latex-Plugin eigene solche Build-Prozesse definiert werden können. Nun müsste man dort dann für jedes Dokument, das eine andere Bibliografie verwendet, einen eigenen Build-Prozess definieren.

Schöner wäre natürlich, wenn man das gleich im Latex-Dokument erledigen könnte, wie du das beschrieben hast. Nur die Frage des Aktivierens von shell-escapes bleibt für mich noch offen. Damit man diese nicht global aktivieren müsste (Sicherheit), könnte man bei pdflatex auch die Option -shell-escape verwenden, oder?

Da das Gedit-Plugin mit rubber arbeitet, müsste man nun noch wissen, wie man -shell-escape bei rubber übergibt.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

markusheinzer hat geschrieben:Damit man diese nicht global aktivieren müsste (Sicherheit), könnte man bei pdflatex auch die Option -shell-escape verwenden, oder?
Das ist vom pdflatex abhängig, das verwendet wird. Normalerweise gibt pdflatex mit Option -help oder --help darüber Auskunft.

Zu Gedit kann ich nichts sagen. Würde mich aber wundern, wenn man dort keine Optionen für aufgerufene Programme angeben könnte.

markusheinzer
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mo 17. Nov 2008, 07:57

Beitrag von markusheinzer »

dochdoch, man kann in Gedit (auch beim Latex-Plugin) beim Aufruf von Programmen schon Optionen mitgeben. Pro Build-Profil kann man aber immer nur die gleichen Optionen mitgeben (soviel ich weiss). Man müsste für unterschiedliche Literaturdatenbanken unterschiedliche Build-Profile anlegen.

Ideal ist natürlich (was wohl meistens auch der Fall ist), wenn die Literaturdaten immer aus derselben Datenbank kommen. Dann kann man beim Latex-Plugin vor dem normalen Aufruf von rubber einfach noch den wget-Aufruf reintun. So wird zuerst das aktuelle bib-File runtergeladen und nachher das Dokument normal kompiliert. In jedem Latex-Dokument muss dann der Verweis (\bibliography{...}) gleich lauten.

Ich denke, das gefällt mir so schon mal sehr gut. Ist mir fast sympathischer, Dateioperationen ausserhalb von Latex zu behalten (anstatt dieser write18-Variante, wo aus Latex heraus ein Kommandozeilen-Befehl gegeben wird).

Vielen Dank für die Hilfe!

Antworten