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.
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:
[code]\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[/code]
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):
[code]#!/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[/code]
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
[code]\immediate\write 18{\wget -O my.bib http://woherausimmer.bib}
\bibliography{my}[/code]
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.