Inhalt

Kochbuch

Warum?

Als Jugendlicher habe ich gerne gebacken, Kuchen, kleine Süßspeisen, sowas. Mittlerweile koche ich auch ganz gerne mal, nicht nur um was zu essen zu haben, sondern auch um mal ein Hobby fernab des Bildschirms zu haben.

Rezepte habe ich bis dato immer in Papierform gesammelt. Dann habe ich 2019 mal eine Software aufgesetzt mit der ich Rezepte digital sammeln kann, war aber nie zufrieden damit. Mittlerweile funktioniert die auch nicht mehr richtig.

Dann habe ich mich, mit dem Vorbild der “typischen Kochbücher” im Hinterkopf, dazu entschieden, doch selbst eines zu schreiben. Als stetig wachsende Sammlung meiner Rezepte. Das ganze in LaTeX, damit habe ich einen guten Workflow und kann das ganze auch gut in Git verwalten.

Das Ergebnis ist eine PDF, im A4 Format. Ideal zum Lesen am Bildschirm, aber auch zum Ausdrucken, wenn es einmal genug sind könnte man ja drucken und binden lassen.

Damit war dieses Projekt geboren, denn - warum nicht?

Automatisierung

Wie bereits erwähnt, durch die Struktur kann das Buch über Git verwaltet werden. Ich hoste das Kochbuch bei Github. Wann immer etwas geändert wird, wird das Buch neu kompiliert und die PDF neu generiert.

Inhalt

Das Kochbuch ist aktuell in provisorische Kapitel unterteilt und umfasst erst ein gutes Dutzend Rezepte. Es wird mit Sicherheit in Zukunft zum Download bereit stehen, jedoch erst, wenn ich meine alte Sammlung “digitalisiert” habe.

Download

coming soon

Technischer Einblick

Wie bereits geschrieben, ist das Rendern und veröffentlichen neuer Versionen automatisiert. Grundlage dafür ist aber, dass die Rezepte in einem (einheitlichen) Format vorliegen. Dafür habe ich mit LaTeX herausgesucht. Es gibt einige Dateien, die Kapitel organisieren und die Rezepte einbinden, und ja, die Rezepte selbst. So kann die Struktur, also die Reihenfolge an Rezepten und Kapitel einfach geändert werden, ohne zu viele Dateien anzufassen. Eine weitere Anforderung ist die Lesbarkeit an die Rezepte, die sind auch im rohen Zustand lesbar.

Retrospektiv betrachtet, hätte ich auch Markdown nehmen können, aber ich habe mich für LaTeX entschieden, da ich die Challenge wollte, mich mehr damit zu beschäftigen und LaTeX besser zu verstehen.

Aufbau von Rezepten

Jedes Rezept ist in einer eigenen .tex Datei innerhalb des rezepte Ordners gespeichert. Das Rezept enthält zuerst seinen Namen, einige Infos wie Gerät, Portionen und Zubereitungszeit.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\subsection{Basilikum-Pesto}

\subsubsection*{Thermomix $\bullet$ 2 Portionen $\bullet$ 10 Min Arbeit $\bullet$ vegetarisch}\bigskip

\todo[inline]{Basilikum-Pesto -- Bilder \& Kochen}

\subsubsection*{Zutaten}

\begin{ingredients}
\item 80 g Parmesan, in Stücken
\item ...
\end{ingredients}

\subsubsection*{Zubereitung}

\begin{enumerate}
\item Parmesan in den Mixtopf geben und \textbf{15 Sek./Stufe 10} zerkleinern.
\item ...
\end{enumerate}

\subsubsection*{Tipps \& Tricks}

Soll das Pesto zu Pasta...

Wichtig ist hier, dass alle Überschriften außer dem Rezeptnamen mit einem Sternchen versehen sind, damit sie nicht im Inhaltsverzeichnis auftauchen, beispielsweise \subsubsection*{Zutaten}.

Auch der ingredients Block ist wichtig, da er die Zutaten in einem zweispaltigen Block darstellt. Die Zutaten werden mit \item aufgelistet.

Besonderheiten Thermomix

Wie vielleicht im Rezeptbeispiel aufgefallen ist, arbeite ich unter anderem mit einem Thermomix. Dessen Anweisungen werden fett hervorgehoben. Eventuell bekommen diese Rezepte später auch eine Markierung.

Kapitel und Kerndateien

coming soon

Rezepte anlegen

Nun, es heißt ja immer, repetetive Aufgaben sollte man automatisieren. Dies habe ich auch mit dem Anlegen neuer Rezepte getan. Es gibt eine Vorlage rezepte/TEMPLATE.tex, die ich einfach kopiere und umbenenne. Dann muss ich nur noch die Datei öffnen und die Daten eintragen, den Pfad in der main.tex eintragen und fertig.

Stattdessen wird nun einfach ein Script ausgeführt, das den Rezeptnamen als Parameter bekommt und die Datei anlegt, dabei die Zeile die in der main.tex eingefügt werden muss, in die Zwischenablage kopiert und die betreffende Datei öffnet.

Frage

Am besten wäre es, wenn das Script automatisiert die Kapitel aus der main.tex auslesen würde und dann das neue Rezept an der richtigen Stelle einfügt. Das habe ich bisher aber nicht erreicht.

Wenn jemand eine Idee hat, wie die korrekte Zeilennummer berechnet und dann die Zeile dort eingefügt werden könnte, freue ich mich sehr über eine E-Mail.

Automatisierung

Im Großen und Ganzen ist der GitHub Workflow ein Build and Upload Artifacts-Flow, also die Ergebnisse - hier eine PDF Datei - werden hochgeladen. Das ganze wird immer ausgeführt, wenn es eine Änderung, wie einen Commit, gibt.

Wichtige Punkte sind dabei aber die Anpassung der Konfiguration vom LaTeX Dokument. Hierfür wichtige Änderungen liegen einfach in einer anderen Datei, die im Workflow einfach ausgetauscht wird.

1
2
- name: Add rendering options for 
  run: mv -f config-r.tex config.tex

Hier steht effektiv drin, dass Verlinkungen keine Highlights haben sollen sowie andere Kleinigkeiten, die beim Schreiben helfen, aber beim Lesen stören.

1
2
- name: Compile LaTeX document
  uses: xu-cheng/latex-action@v2

Dann wird das LaTeX Dokument gerendert, die PDF Datei wird als Artefakt gespeichert und kann dann heruntergeladen werden.

Ausblick

Aktuell ist das wichtigste was fehlt eigentlich Bilder zu den Rezepten. Danach fehlt natürlich die Struktur, also eine Einordnung und Abfolge der Rezepte sowie interessante Kategorien.

Technisch fehlt noch ein System, über das die Rezepte mit Markern versehen werden können - idealerweise mit Anzeige im Inhaltsverzeichnis. Aufgrund von Bedürfnissen in der Familie und Freundeskreis wären es folgende Marker:

  • vegetarisch
  • vegan
  • glutenfrei
  • milchfrei
  • thermomix

Wenn das alles abgeschlossen ist, würde ich das Kochbuch auch gerne mal drucken lassen, so richtig als gebundenes Buch.

Perfektion für das Projekt wäre vermutlich eine Brücke oder ein Script, welches Rezepte aus dem Open Recipe Format in LaTeX konvertiert.