Manzels Blog

Ein Blog über das Zwischennetz, weiche und harte Ware

Mit AutoHotkey schnell BibTeX zu DOI erhalten

| Keine Kommentare

Alle meine Berichte für das Studium schreibe ich in LaTeX. Wenn man es einmal kann, gibt es einfach nichts besseres. Auf jeden Fall braucht man da natürlich auch einiges an Literatur. Man könnte die BibTeX-Datei jetzt natürlich komplett von Hand schreiben oder man nutzt Programme wie Mendeley oder Citavi, die die Daten eines Papers automatisch herunterladen.
doi2bibtex2
Letztere machen aber meist nicht genau das, was man haben will und haben oft auch Probleme mit der Abkürzung der Journal-Namen, weshalb ich die bib-Datei schließlich immer noch einmal mit JabRef nachbearbeite (Automatische Abkürzung der Zeitschriftentitel ftw). Will man nun noch „mal eben“ ein Paper einfügen, müsste man die Daten per Hand in JabRef eingeben, das Zitat einzeln als bib von der Artikelseite herunterladen oder – was ich noch als die angenehmste Lösung empfinde – den BibTeX-Eintrag von Crossref kopieren. Aber all diese Methoden erfordern natürlich einige Klicks, die man sich auch gerne sparen kann.
Dafür habe ich ein kleines AutoHotkey-Skript geschrieben:

; CTRL + WINDOWS KEY + I LOOKS UP DOI
^#i::
  Gui, Add, Edit, w300 vDOI
  Gui, Add, Button, default section, BibTeX
  Gui, Add, Button, x260 ys, Website
  Gui, Show,, DOI Lookup
return

ButtonBibTex:
  Gui, Submit
  bibtex:=doiToBibtex(DOI)
  bibtex=%bibtex%
  clipboard=%bibtex%
  TrayTip, BibTeX kopiert, %bibtex%, 10, 1
  GUI, Destroy
return

ButtonWebsite:
  Gui, Submit
  openWebpage(DOI)
  GUI, Destroy
return

GuiClose:
  Gui, Destroy
return

; DOI to BibTeX
doiToBibtex(doi="")
{
  ; from http://www.autohotkey.com/board/topic/94530-curl-some-help-please/
  cURL_command := "curl -LH ""Accept: application/x-bibtex"" http://dx.doi.org/" . doi
  Cmd := ComObjCreate("WScript.Shell")
  CmdRun := Cmd.Exec(ComSpec . " /c cURL.exe " . cURL_command)
  output := CmdRun.StdOut.ReadAll()
  return output
}

; Open webpage from DOI
openWebpage(doi="")
{
  Run, http://dx.doi.org/%doi%
}

Damit wird nach dem Drücken von Strg + Win + I ein kleines Eingabefenster geöffnet, in das der DOI eingegeben werden muss. Mit einem Klick auf BibTex wird der BibTex-Eintrag in die Zwischenablage kopiert, mit einem auf Website die Seite zum Artikel im Browser geöffnet.
doi-lookup
doi-lookup-tray
Nun folgt, wie immer, noch die Erklärung:

^#i::
  Gui, Add, Edit, w300 vDOI
  Gui, Add, Button, default section, BibTeX
  Gui, Add, Button, x260 ys, Website
  Gui, Show,, DOI Lookup
return

Hier wird zunächst die GUI erstellt. Ein 300 Pixel breites Eingabefeld mit zugehörigem Variablennamen DOI und zwei Buttons. BibTeX wird bei einem Druck auf Enter ausgelöst (default), Website befindet sich bei einem x-Wert von 260 Pixeln und auf der selben y-Höhe wie BibTeX (das s in ys steht für section). Schließlich wird die GUI mit dem Titel „DOI Lookup“ angezeigt.

ButtonBibTex:
  Gui, Submit
  bibtex:=doiToBibtex(DOI)
  bibtex=%bibtex%
  clipboard=%bibtex%
  TrayTip, BibTeX kopiert, %bibtex%, 10, 1
  GUI, Destroy
return

Bei einem Klick auf BibTeX wird mit Gui, Submit der DOI in der Variable DOI gespeichert. Dann wird über die unten erklärte Funktion doiToBibtex der ausgegebene BibTeX-Inhalt in bibtex gespeichert und in die Zwischenablage geschrieben. bibtex=%bibtex% entfernt Leerzeichen am Anfang und Ende. Schließlich wird noch der Ballon-Tip angezeigt. Zum Schluss wird mit Gui, Destroy dafür gesorgt, dass die Variablen für das nächste Öffnen der GUI wieder zur Verfügung stehen.

ButtonWebsite:
  Gui, Submit
  openWebpage(DOI)
  GUI, Destroy
return

Mit einem Klick auf Website wird nur eine weitere Funktion (siehe unten) aufgerufen.

doiToBibtex(doi="")
{
  cURL_command := "curl -LH ""Accept: application/x-bibtex"" http://dx.doi.org/" . doi
  Cmd := ComObjCreate("WScript.Shell")
  CmdRun := Cmd.Exec(ComSpec . " /c cURL.exe " . cURL_command)
  output := CmdRun.StdOut.ReadAll()
  return output
}

Hier kommt der wichtige Teil: Mit curl wird über CrossCite aus dem DOI ein BibTeX erzeugt. Dazu wird curl über die cmd aufgerufen und die Ausgabe zurückgegeben.

openWebpage(doi="")
{
  Run, http://dx.doi.org/%doi%
}

Zum Öffnen der Artikelseite wird der DOI einfach an dx.doi.org angehängt.

Schließlich gibt es natürlich noch den Download der ahk-Datei. Außerdem wird curl benötigt. Der „Download WITHOUT SSL“ ist in Ordnung. Die curl.exe muss im selben Verzeichnis wie das Skript liegen. Dann nur noch das Skript ausführen und schon klappt alles.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.