Tuesday, November 05, 2013

GNUBahnen

Anfang des Jahres habe ich eine kleines Emacs Lisp Programm geschrieben um Textbeschreibungen zu HVV-Routen zu generieren. Das Generieren einer Route funktioniert zwar einwandfrei, aber da der HVV keine API oder Daten zur verfügung stellt und das extrahieren der Daten aus der Website zu aufwending ist, läßt sich das System nicht nutzen. Das ist nicht so schlimm weil es eh nur ein Prototyp zum von Texten aus Routenbeschreibungen sein sollte.


Jetzt lese ich grad ein Paper von 1998 zum generieren von Wegbeschreibungen der U-Bahnen in Montreal und Paris. Beim überfliegen war mir schon aufgefallen das wahrscheinlich Lisp benutzt wurde, als die Autoren dann aber schreiben das sie ihr Programm in GNU Emacs Lisp geschrieben haben war ich doch etwas erstaunt und mußte feststellen das Ich doch nicht der einzige war der seinen Editor für solche Zwecke gebraucht.


Fraczak, Lapalme & Zocke: Automatic Generation Of Subway Directions: Salience Gradation As A Factor For Determining Message And Form

Monday, November 04, 2013

Org-mode, biblatex & xelatex

Wie man die beiden überzeugt miteinander zu reden.


Ich arbeite Momentan ein einem kleinen Paper für meine Diplomarbeit. Zur Organisation des Textes, der Notizen und Quellen benutze ich Org mode. Org hat eine LaTeX Export, so daß man sich das Strukturieren und Schreiben konzentrieren kann. Aber standardmäßig nutzt Org weder xelatex (UTF-8, direkter Output als PDF) noch biblatex (?) und ganz wichtig, es gibt keine direkte \cite Unterstüzung.


Quellverweise

Zum Markieren von Quellverweisen nutzen wir Links im Org, die dann beim export zu \cite{ref} umgewandelt werden. Dazu wird im Org-Dokument ein neuer Linktyp angelegt:


#+LINK: cite rtcite:bibliography.bib::%s

cite und bibliography.bib können auch umbenannt werden, ersteres wird für Links ala [[cite:Ref13]] im org-Dokument gebraucht, letzteres ignoriert.



Damit die Quellverweise umgewandelt werden ist noch etwas elisp Code nötig:


(defun my-rtcite-export-handler (path desc format)
  "converts rtcite:<bib"
  (let* ((search (when (string-match "::#?\\(.+\\)\\'" path)
                   (match-string 1 path)))
         (path (substring path 0 (match-beginning 0))))
    (cond ((eq format 'latex)
           (if (or (not desc) 
                   (equal 0 (search "rtcite:" desc)))
               (format "\\cite{%s}" search)
             (format "\\cite[%s]{%s}" desc search))))))
(org-add-link-type "rtcite" nil 'my-rtcite-export-handler)

Ich habe meine bibtex Quellen direkt im Org-Dokument als Quellcode der vor dem PDF generieren getangled wird, die Überschrift aber mit :noexport: getaggt ist. Wenn man nur BibTex nutzt genügt es am Ende des Dokuments einfach folgendes einzufügen:

#+BEGIN_LATEX
\bibliography{<dateiname ohne .bib>}
\bibliographystyle{alpha}
#+END_LATEX

Für biblatex sieht das etwas anders aus, das muß im LaTeX-Header eingebunden & konfiguriert werden:


#+LANGUAGE: de-de
#+LATEX_HEADER: \usepackage[style=alphabetic,citestyle=alphabetic]{biblatex}
#+LATEX_HEADER: \addbibresource{<Dateiname.bib>}

Die #+LANGUAGE: Option sorgt dafür das das Babel Paket als ngerman konfiguriert wird, wonach sich biblatex richtet und statt Ed. nun Hrsg. ausgiebt.

Das Ausgeben des erfolgt wieder am Ende mit

#+LATEX: \printbibliography

xelatex mittels latexmk


xelatex erfordert andere standard Pakete als pdflatex, bzw. solche wie inputenc stören/sind überflüssig.


(setq org-export-latex-default-packages-alist
                '(("" "fontspec" t)
                  ("" "xunicode" t)
                  ("" "url" t)
                  ("" "rotating" t)
                  ("AUTO" "babel" t)
                  ("babel" "csquotes" t)
                  ("" "soul" t)
                  ("xetex" "hyperref" nil)
                  ))

Entweder weder konfigueriert man Org so das mehrmals xelatex und zwischendurch biber aufgerufen werden, oder man installiert noch latexmk und ruft diese einmal auf:

(setq org-latex-pdf-process '("latexmk -xelatex -bibtex-cond -f %f"))

Update Wie ich gestern herausfand sind die Software recht "neu". latexmk unterstützt xelatex erst seit Juli 2013, biber ist nicht in TeX Live 2009 (Version die Ubuntu 12.04 liefert) und die hidelinks Option für hyperref wurde 2011 oder so eingeführt. Benutzer von TeX Live oder MiKTeX sollten nach einem update auf 2013 alles haben.


TeX Live ist recht einfach zu installieren aber will standardmäßig erstmal 3GB installieren (die basis ist nur ein Zehntel enhält aber nicht die hier benutzten Pakete so daß man nachinstallieren muß)