Markdown und Latex kombinieren

Latex ist kompliziert und wirft wilde Fehlermeldungen, die kein Mensch versteht und keiner verstehen will. Die erstellten Formeln sind allerdings unschlagbar schön und erstaunlicherweise relativ komfortabel und eingängig zu erstellen.

Markdown hingegen ist sehr simpel, aber es fehlt die Möglichkeit Formeln einzubinden.

Glücklicherweise kann man Markdown und Latex kombinieren und zwar mit: Pandoc.

Dazu muss zunächst Pandoc aus den Ubuntu-Quellen installiert werden:
apt install pandoc

Jetzt kann man einfach sein Markdown-Dokument verfassen und über den bekannten $-Operator in den math-mode von Latex wechseln.
Hier ein Beispiel:

## Datenunabhängige Klassifikationsregel:

Wir ordnen jeder neuen Beobachtung die Klasse $A_k$ zu, was die folgenden Fehlklassfikationskosten ergibt:

$C_k = \pi_1 \cdot c(1,k) + \dots + \pi_G \cdot c(G,k)$

Eine Bayes-Regel wählt diejenige Klasse mit den kleinsten Kosten aus.

Über den Befehl: pandoc -o test.pdf test.md macht Pandoc folgendes PDF aus dem Code: Klick.

Das Dokument konfigurieren

Nun sieht das PDF noch etwas unschön aus, jedenfalls ist für meinen Geschmack der Rand zu breit. Die „geometry“ Latex-Parameter und einige andere kann man über einen YAML-Block am Anfang des Dokuments festlegen:

---
geometry: margin=2.5cm
author:
- name: Stefan Hesse
---

Er fängt mit — und endet auch mit — . Eine Liste der Latex-Variablen die so eingestellt werden können findet man hier: http://pandoc.org/MANUAL.html#variables-for-latex

Wenn man seine eigenen Latex-Packages integrieren möchte, muss das entsprechende Template angepasst werden. Das aktuelle Template von den Entwicklern gibt es hier: https://github.com/jgm/pandoc-templates/blob/master/default.latex. Dieses lädt man herunter und speichert es. Jetzt muss man die passende Stelle finden, um die Befehle zu integrieren. Ich füge meine „\usepackages{}“ ab Zeile 19 ein, allerdings gilt hier: Wenn es funktioniert, dann wird es schon richtig sein. Die Devise lautet also: Einfach ausprobieren, man sollte nur aufpassen, dass man sein Package nicht in einem der if-Blöcke rein legt, da der ggfs. nicht ausgeführt wird.

Der Befehl um das Template zu verwenden sieht dann so aus: pandoc --template=/pfad/zum/templdate/my.latex -o test.pdf test.md.

Hilfe zu Latex-Befehlen findet man hier: latex-zeichen.de.

Editor integration

Es wäre noch schön das ganze in einen Editor einzubinden. Ich bearbeite die Dateien aktuell mit gedit und dort hat man die Möglichkeit über „STRG + F8“ ein makefile auszuführen. Ich verwende folgendes:

# Produce PDFs from all Markdown files in a directory
# Lincoln Mullen | http://lincolnmullen.com | lincoln@lincolnmullen.com

# List files to be made by finding all *.md files and appending .pdf
PDFS := $(patsubst %.md,%.md.pdf,$(wildcard *.md))

# The all rule makes all the PDF files listed
all : $(PDFS)
                        
# This generic rule accepts PDF targets with corresponding Markdown 
# source, and makes them using pandoc
%.md.pdf : %.md
	pandoc --template=/home/stefan/.pandoc/my.latex $< -o $@

# Remove all PDF outputs
clean :
	rm $(PDFS)

# Remove all PDF outputs then build them again
rebuild : clean all

Wie man sieht habe ich das File von Lincoln Mullen geklaut, die einzige Modifikation besteht aus dem Hinzufügen des Template-Parameters. Anstatt über gedit zu maken, kann man auch über das Terminal "make" ausführen.

Nachtrag: Wenn man viele Dokumente in einem Ordner hat, dann fängt das Makefile durchaus an zu nerven, da es immer auch die anderen Dokument neu baut. In gedit kann man unter Tools > Manage External Tools ganz leicht eigene kleine Skripte hinzufügen, für pandoc habe ich folgendes erstellt:

#!/bin/bash
DOC=$GEDIT_CURRENT_DOCUMENT_PATH 

pandoc --template=/home/stefan/.pandoc/my.latex $GEDIT_CURRENT_DOCUMENT_PATH -o $GEDIT_CURRENT_DOCUMENT_PATH.pdf

Wenn man nun noch unter „Save“ – „Current Document“ einstellt, dann hat man die gleiche Funktionalität wie über das Makefile.Screenshot_2016-08-30_13-23-41

Pandoc kann natürlich noch viel mehr, das Manual ist sehr aufschlussreich: http://pandoc.org/MANUAL.html

Dank geht raus an: http://kesdev.com/you-got-latex-in-my-markdown/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.