From 68be3712a1b6efc8453d3b44636a9e61fbb4c91c Mon Sep 17 00:00:00 2001 From: chrbeckm Date: Sun, 23 Jun 2024 21:26:09 +0200 Subject: [PATCH 1/4] move make related slides to make slides --- latex/content/advanced.tex | 1 - latex/content/latexmk.tex | 65 -------------------------------------- latex/content/make.tex | 53 ------------------------------- latex/latex.tex | 2 +- 4 files changed, 1 insertion(+), 120 deletions(-) delete mode 100644 latex/content/latexmk.tex delete mode 100644 latex/content/make.tex diff --git a/latex/content/advanced.tex b/latex/content/advanced.tex index aa79095d..1944c969 100644 --- a/latex/content/advanced.tex +++ b/latex/content/advanced.tex @@ -7,5 +7,4 @@ \section{Fortgeschritten} \input{content/texorpdfstring.tex} \input{content/links.tex} \input{content/width.tex} -\input{content/make.tex} %\input{content/debug.tex} diff --git a/latex/content/latexmk.tex b/latex/content/latexmk.tex deleted file mode 100644 index 95f1e109..00000000 --- a/latex/content/latexmk.tex +++ /dev/null @@ -1,65 +0,0 @@ -\section{\texttt{latexmk}} - -\begin{frame}[fragile]{ - \texttt{latexmk} - \hfill - \doc{http://mirrors.ctan.org/support/latexmk/latexmk.pdf}{latexmk} -} - \begin{itemize} - \item Problem: Mehrfaches Kompilieren von Dokumenten ist aufwändig und fehleranfällig - \item \texttt{latexmk} ist ein Kommandozeilenwerkzeug, das automatisch \texttt{tex} (und andere Programme wie \texttt{biber}) oft genug aufruft - \item Bei TeXLive mitgeliefert - \item Auswahl von \LuaLaTeX\ durch Parameter \texttt{--lualatex} - \item Versteht auch viele \texttt{tex}-Argumente wie \texttt{--interaction} und \texttt{--halt-on-error} - \end{itemize} - - \begin{block}{Aufruf auf der Kommandozeile} - \begin{minted}{latex} - latexmk --lualatex --output-directory=build --interaction=nonstopmode --halt-on-error file.tex - \end{minted} - \end{block} - - \begin{itemize} - \item Noch mehr Kontrolle durch Konfigurationsdatei \texttt{latexmkrc} - \item Siehe dazu Dokumentation - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{\texttt{latexmk} im \texttt{Makefile}} - \begin{block}{Im \texttt{Makefile}} - \begin{minted}{make} - build/file.pdf: FORCE plots... tabellen... - TEXINPUTS=build: \ - max_print_line=1048576 \ - latexmk \ - --lualatex \ - --output-directory=build \ - --interaction=nonstopmode \ - --halt-on-error \ - file.tex - - FORCE: - - .PHONY: FORCE all clean - \end{minted} - \end{block} - - \begin{itemize} - \item \texttt{latexmk} bestimmt Abhängigkeiten selbst - \item Sollte also immer ausgeführt werden - \begin{itemize} - \item \texttt{FORCE:} definiert eine niemals erfüllte Abhängigkeit, sodass immer ausgeführt wird - \end{itemize} - \end{itemize} -\end{frame} -\begin{frame}{Kontinuierliche Updates} - \begin{center} - \texttt{latexmk \alert{-pvc} --interaction=nonstopmode … document.tex} - \end{center} - \begin{itemize} - \item \texttt{latexmk} merkt, wenn ihr eure Dateien ändert - \item Kompiliert automatisch neu - \item Öffnet den Standard-PDF-Betrachter - \item Einfach im Hintergrund laufen lassen - \end{itemize} -\end{frame} diff --git a/latex/content/make.tex b/latex/content/make.tex deleted file mode 100644 index 967935fb..00000000 --- a/latex/content/make.tex +++ /dev/null @@ -1,53 +0,0 @@ -\subsection{Makefiles} - -\begin{frame}[fragile]{\texttt{build}-Ordner} - \LuaTeX\ und \texttt{biber} bieten Optionen an, um einen \texttt{build}-Ordner zu benutzen. - \begin{block}{Aufrufe} - \begin{minted}{text} - lualatex --output-directory=build file.tex - biber build/file.bcf - \end{minted} - \end{block} - - Um Dateien aus dem \texttt{build}-Ordner zu finden (Plots, Tabellen): - \begin{block}{Aufrufe} - \begin{minted}{text} - TEXINPUTS=build: lualatex --output-directory=build file.tex - biber build/file.bcf - \end{minted} - \end{block} - \vspace*{-0.5em} - \begin{itemize} - \item \texttt{TEXINPUTS}, \texttt{BIBINPUTS}: Suchpfade für \TeX- und \texttt{.bib}-Dateien - \item Elemente getrennt mit \texttt{:}, der erste Treffer wird genommen (wie \texttt{PATH}) - \item Hilfreich um z.\,B.\ den Header nur einmal für alle Protokolle abzuspeichern. (Siehe latex-template) - \item \texttt{TEXINPUTS} auch für \mintinline{latex}+\includegraphics+ - \item \texttt{:} am Ende der Liste: Standardsuchpfade anhängen (wichtig!) - \item \texttt{.} (der aktuelle Ordner) ist am Anfang der Standardliste, braucht man also nicht selbst angeben - \item Endet ein Element mit \texttt{//}, werden auch alle Unterordner durchsucht - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{\texttt{nonstopmode}} - In Makefiles will man keine Interaktion. - - \begin{block}{Keine Interaktion} - \begin{minted}{text} - lualatex --interaction=nonstopmode file.tex - \end{minted} - \end{block} - - \begin{block}{Beim ersten Fehler abbrechen} - \begin{minted}{text} - lualatex --interaction=nonstopmode --halt-on-error file.tex - \end{minted} - \end{block} - - Neben \texttt{nonstopmode} gibt es auch \texttt{batchmode}, was die Ausgabe nur in der \texttt{.log}-Datei speichert, aber nicht ausgibt. - - \begin{block}{Log schöner machen} - \begin{minted}{text} - max_print_line=1048576 lualatex file.tex - \end{minted} - \end{block} -\end{frame} diff --git a/latex/latex.tex b/latex/latex.tex index 4ac70416..fb5ac2b3 100644 --- a/latex/latex.tex +++ b/latex/latex.tex @@ -89,7 +89,7 @@ \input{content/footnotes.tex} \input{content/bibliography.tex} \input{content/advanced.tex} -\input{content/latexmk.tex} +%\input{content/latexmk.tex} \input{content/tlmgr.tex} \input{content/matplotlib.tex} \input{content/beamer.tex} From 7c631aab4c91df2c76290cd4c4e27391a4324d82 Mon Sep 17 00:00:00 2001 From: chrbeckm Date: Sun, 23 Jun 2024 21:26:35 +0200 Subject: [PATCH 2/4] integrate latexmk and latex related slides to make --- make/content/advanced.tex | 59 ++++++++ make/content/build.tex | 62 ++++++++ make/content/functions.tex | 58 ++++++++ make/content/latexmk.tex | 89 ++++++++++++ make/content/make.tex | 263 ---------------------------------- make/content/motivation.tex | 44 ++++++ make/content/simple_start.tex | 70 +++++++++ make/make.tex | 9 +- 8 files changed, 389 insertions(+), 265 deletions(-) create mode 100644 make/content/advanced.tex create mode 100644 make/content/build.tex create mode 100644 make/content/functions.tex create mode 100644 make/content/latexmk.tex delete mode 100644 make/content/make.tex create mode 100644 make/content/motivation.tex create mode 100644 make/content/simple_start.tex diff --git a/make/content/advanced.tex b/make/content/advanced.tex new file mode 100644 index 00000000..f220acab --- /dev/null +++ b/make/content/advanced.tex @@ -0,0 +1,59 @@ +\headlineframe{Is the cake a lie?} + +\begin{frame}[fragile]{Vergleich: Kuchen backen} + \begin{center} + \begin{minted}{make} + Kuchen: Teig Backofen + Ofen auf 140°C vorheizen + Teig in Backform geben und in den Ofen schieben + Kuchen nach 40 min herausnehmen + + Teig: Eier Mehl Zucker Milch Rumrosinen | Schüssel + Eier schlagen + Mehl, Zucker und Milch hinzugeben + Rumrosinen unterrühren + + Rumrosinen: Rum Rosinen + Rosinen in Rum einlegen + Vier Wochen stehen lassen + + Schüssel: + Rührschüssel auf den Tisch stellen, wenn nicht vorhanden + + clean: + Kuchen essen + Küche sauber machen und aufräumen + \end{minted} + \end{center} +\end{frame} + +\begin{frame}[fragile]{Expert} + Können mehrere unabhängige Auswertungen parallel ausgeführt werden? \\ + → Ja: \;\texttt{make -j4}\; (nutzt 4 Prozesse gleichzeitig, Anzahl beliebig) + + Problem: Manchmal führt \texttt{make} Skripte gleichzeitig zweimal aus (hier \texttt{plot.py}) + \begin{center} + \begin{minted}{make} + all: report.txt + + report.txt: plot1.pdf plot2.pdf + touch report.txt + + plot1.pdf plot2.pdf: plot.py data.txt + python plot.py # plot.py produziert sowohl plot1.pdf als auch plot2.pdf + \end{minted} + \end{center} + + Lösung: manuell synchronisieren + \begin{center} + $\vdots$ \\ + \begin{minted}{make} + plot1.pdf: plot.py data.txt + python plot.py + + plot2.pdf: plot1.pdf + \end{minted} + \end{center} + + Wenn man \texttt{plot2.pdf} aber nicht \texttt{plot1.pdf} löscht, kann \texttt{make} nicht mehr \texttt{plot2.pdf} erstellen. +\end{frame} diff --git a/make/content/build.tex b/make/content/build.tex new file mode 100644 index 00000000..52f458ff --- /dev/null +++ b/make/content/build.tex @@ -0,0 +1,62 @@ +\headlineframe{Projekte \enquote{sauber} halten} + +\begin{frame}[fragile]{\texttt{build}-Ordner} + \texttt{build}-Ordner: Projekt sauber halten + + \begin{center} + \begin{minted}{make} + all: build/report.pdf + + build/plot.pdf: plot.py data.txt | build + python plot.py # savefig('build/plot.pdf') + + build/report.pdf: report.tex build/plot.pdf | build + lualatex --output-directory=build report.tex + + build: + mkdir -p build + + clean: + rm -rf build + + .PHONY: all clean + \end{minted} + \end{center} + + \begin{itemize} + \item \texttt{| build} ist ein order-only Prerequisite: Alter wird ignoriert + \item Targets, die bei \texttt{.PHONY} genannt werden, erzeugen keine Dateien (guter Stil). + Bsp: \textbf{\texttt{clean}} löscht Dateien, wird versehentlich eine Datei clean erstellt, + soll trotzdem \textbf{\texttt{clean}} ausgeführt werden. + Nennung hier hebt die Verwirrung von \texttt{make} auf, beugt vor. + \end{itemize} +\end{frame} + + +\begin{frame}[fragile]{\texttt{build}-Ordner} + \LuaTeX\ und \texttt{biber} bieten Optionen an, um einen \texttt{build}-Ordner zu benutzen. + \begin{block}{Aufrufe} + \begin{minted}{text} + lualatex --output-directory=build file.tex + biber build/file.bcf + \end{minted} + \end{block} + + Um Dateien aus dem \texttt{build}-Ordner zu finden (Plots, Tabellen): + \begin{block}{Aufrufe} + \begin{minted}{text} + TEXINPUTS=build: lualatex --output-directory=build file.tex + biber build/file.bcf + \end{minted} + \end{block} + \vspace*{-0.5em} + \begin{itemize} + \item \texttt{TEXINPUTS}, \texttt{BIBINPUTS}: Suchpfade für \TeX- und \texttt{.bib}-Dateien + \item Elemente getrennt mit \texttt{:}, der erste Treffer wird genommen (wie \texttt{PATH}) + \item Hilfreich um z.\,B.\ den Header nur einmal für alle Protokolle abzuspeichern. (Siehe latex-template) + \item \texttt{TEXINPUTS} auch für \mintinline{latex}+\includegraphics+ + \item \texttt{:} am Ende der Liste: Standardsuchpfade anhängen (wichtig!) + \item \texttt{.} (der aktuelle Ordner) ist am Anfang der Standardliste, braucht man also nicht selbst angeben + \item Endet ein Element mit \texttt{//}, werden auch alle Unterordner durchsucht + \end{itemize} +\end{frame} diff --git a/make/content/functions.tex b/make/content/functions.tex new file mode 100644 index 00000000..b58c21cb --- /dev/null +++ b/make/content/functions.tex @@ -0,0 +1,58 @@ +\begin{frame}{Funktionsweise} + \begin{center} + \begin{tikzpicture} + \graph [ + grow down, + branch right sep, + nodes={ + node font=\ttfamily, + }, + ] { + "all" [x=3.5] -> "report.pdf" [x=3] -> { + "report.tex", + "plot.pdf" -> { + "plot.py", "data.txt" + }, + "plot2.pdf" -> { + "plot2.py", "data.txt", "data2.txt" + }, + }, + }; + \end{tikzpicture} + \end{center} + + \begin{itemize} + \item Abhängigkeiten bilden einen DAG (directed acyclic graph/gerichteter azyklischer Graph) + \item Dateien werden neu erstellt, falls sie nicht existieren oder älter als ihre Prerequisites sind + \item Prerequisites werden zuerst erstellt + \item top-down Vorgehen + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Argumente für \texttt{make}} + \begin{tblr}{ + colspec = {l X[l]}, + column{1} = {font=\ttfamily}, + } + make \textit{target} & statt des ersten in der \texttt{Makefile} genannten Targets (meist \texttt{all}) nur \texttt{target} erstellen \\ + make -n & dry run: Befehle anzeigen aber nicht ausführen \\ + make -B & Force: ausführen aller Schritte, ignorieren des Alters aller Dateien \\ + make -p & Datenbank aller Abhängigkeiten ausgeben + \end{tblr} + \begin{itemize} + \item Nützlich, wenn man einen Plot bearbeitet: \texttt{make plot.pdf} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{\texttt{make clean}} + (Nützliche) Konvention: \texttt{make clean} löscht alle vom \texttt{Makefile} erstellten Dateien/Ordner. + + \begin{center} + \begin{minted}{make} + clean: + rm plot.pdf report.pdf + \end{minted} + \end{center} + + Das Projekt sollte dann so aussehen, wie vor dem ersten Ausführen von \texttt{make}. +\end{frame} diff --git a/make/content/latexmk.tex b/make/content/latexmk.tex new file mode 100644 index 00000000..4e77335a --- /dev/null +++ b/make/content/latexmk.tex @@ -0,0 +1,89 @@ +\headlineframe{\LaTeX{} noch besser integrieren} + +\begin{frame}[fragile]{\texttt{nonstopmode}} + In Makefiles will man keine Interaktion. + + \begin{block}{Keine Interaktion} + \begin{minted}{text} + lualatex --interaction=nonstopmode file.tex + \end{minted} + \end{block} + + \begin{block}{Beim ersten Fehler abbrechen} + \begin{minted}{text} + lualatex --interaction=nonstopmode --halt-on-error file.tex + \end{minted} + \end{block} + + Neben \texttt{nonstopmode} gibt es auch \texttt{batchmode}, was die Ausgabe nur in der \texttt{.log}-Datei speichert, aber nicht ausgibt. + + \begin{block}{Log schöner machen} + \begin{minted}{text} + max_print_line=1048576 lualatex file.tex + \end{minted} + \end{block} +\end{frame} + +\begin{frame}[fragile]{ + \texttt{latexmk} + \hfill + \doc{http://mirrors.ctan.org/support/latexmk/latexmk.pdf}{latexmk} +} + \begin{itemize} + \item Problem: Mehrfaches Kompilieren von Dokumenten ist aufwändig und fehleranfällig + \item \texttt{latexmk} ist ein Kommandozeilenwerkzeug, das automatisch \texttt{tex} (und andere Programme wie \texttt{biber}) oft genug aufruft + \item Bei TeXLive mitgeliefert + \item Auswahl von \LuaLaTeX\ durch Parameter \texttt{--lualatex} + \item Versteht auch viele \texttt{tex}-Argumente wie \texttt{--interaction} und \texttt{--halt-on-error} + \end{itemize} + + \begin{block}{Aufruf auf der Kommandozeile} + \begin{minted}{latex} + latexmk --lualatex --output-directory=build --interaction=nonstopmode --halt-on-error file.tex + \end{minted} + \end{block} + + \begin{itemize} + \item Noch mehr Kontrolle durch Konfigurationsdatei \texttt{latexmkrc} + \item Siehe dazu \href{http://mirrors.ctan.org/support/latexmk/latexmk.pdf}{Dokumentation} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{\texttt{latexmk} im \texttt{Makefile}} + \begin{block}{Im \texttt{Makefile}} + \begin{minted}{make} + build/file.pdf: FORCE plots... tabellen... + TEXINPUTS=build: \ + max_print_line=1048576 \ + latexmk \ + --lualatex \ + --output-directory=build \ + --interaction=nonstopmode \ + --halt-on-error \ + file.tex + + FORCE: + + .PHONY: FORCE all clean + \end{minted} + \end{block} + + \begin{itemize} + \item \texttt{latexmk} bestimmt Abhängigkeiten selbst + \item Sollte also immer ausgeführt werden + \begin{itemize} + \item \texttt{FORCE:} definiert eine niemals erfüllte Abhängigkeit, sodass immer ausgeführt wird + \end{itemize} + \end{itemize} +\end{frame} +\begin{frame}{Kontinuierliche Updates} + \begin{center} + \texttt{latexmk \alert{-pvc} --interaction=nonstopmode … document.tex} + \end{center} + \begin{itemize} + \item \texttt{latexmk} merkt, wenn ihr eure Dateien ändert + \item Kompiliert automatisch neu + \item Öffnet den Standard-PDF-Betrachter + \item Einfach im Hintergrund laufen lassen + \end{itemize} +\end{frame} diff --git a/make/content/make.tex b/make/content/make.tex deleted file mode 100644 index 1693a715..00000000 --- a/make/content/make.tex +++ /dev/null @@ -1,263 +0,0 @@ -\begin{frame}{Automatisierte, reproduzierbare Prozesse} - - {\huge Problem:}\\ - \vspace{1em} - Kurz vor Abgabe noch neue Korrekturen einpflegen - \begin{enumerate} - \item Tippfehler korrigieren, Plots bearbeiten - \item \TeX{} ausführen, ausdrucken - \end{enumerate} - \begin{itemize} - \item vergessen, Plots neu zu erstellen - \item zurück zu Schritt 1 ... - \end{itemize} -\end{frame} - -\begin{frame}{Automatisierte, reproduzierbare Prozesse} - - {\huge Lösung: Make} - \vspace{1em} - \begin{itemize} - \item prüft, welche Dateien geändert wurden - \item berechnet nötige Operationen um Abhängigkeiten zu erfüllen - \item führt Befehle aus - \begin{itemize} - \item Python-Skripte - \item \TeX{} - \item etc ... - \end{itemize} - \end{itemize} -\end{frame} - -\begin{frame}{Motivation} - {\huge Warum?} - \vspace{1em} - \begin{itemize} - \item \textbf{Automatisierung} verhindert Fehler - \item Dient als \textbf{Dokumentation} - \item \textbf{Reproduzierbarkeit}: unverzichtbar in der Wissenschaft - \item \textbf{Spart Zeit}: nur notwendige Operationen werden ausgeführt - \end{itemize} - \vspace{1em} - \textbf{Ziel:} Eingabe von \texttt{make} erstellt komplettes Protokoll/Paper aus Daten -\end{frame} - -\begin{frame}[fragile]{Makefile} - \begin{itemize} - \item Von \texttt{make} benutzte Datei heißt \texttt{Makefile} (keine Endung) - \begin{itemize} - \item bei Windows Dateiendungen einschalten, siehe - \url{http://techmixx.de/windows-10-dateiendungen-anzeigen-oder-ausblenden/} - \end{itemize} - \item \texttt{Makefile} besteht aus Regeln (Rules): - \end{itemize} - \begin{block}{Rule} - \centering - \begin{minted}{make} - target: prerequisites - recipe - \end{minted} - \end{block} - \begin{description} - \item[\texttt{\hphantom{prerequisites}\llap{target}}] Datei(en), die von dieser Rule erzeugt werden - \item[\texttt{prerequisites}] Dateien, von denen diese Rule abhängt - \item[\texttt{\hphantom{prerequisites}\llap{recipe}}] Befehle, um vom \texttt{prerequisites} zu \texttt{target} zu kommen - \begin{itemize} - \item wird mit Tab unter \texttt{target: prerequisites} eingerückt - \end{itemize} - \end{description} -\end{frame} - -\begin{frame}[fragile]{Einfachstes Beispiel} - \begin{center} - \begin{minted}{make} - plot.pdf: plot.py data.txt - python plot.py - \end{minted} - \end{center} - \begin{itemize} - \item Wir wollen \texttt{plot.pdf} erzeugen (\texttt{target}) - \begin{itemize} - \item \texttt{plot.pdf} hängt von \texttt{plot.py} und \texttt{data.txt} ab (\texttt{prerequisites}) - \item Der Befehl, um \texttt{plot.pdf} aus den \texttt{prerequisites} zu erhalten ist \texttt{python plot.py} - \end{itemize} - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{Beispiel} - \begin{center} - \begin{minted}{make} - all: report.pdf # convention - - plot.pdf: plot.py data.txt - python plot.py - - report.pdf: report.tex - lualatex report.tex - - report.pdf: plot.pdf # add prerequisite - \end{minted} - \end{center} - \vspace{1em} - - \texttt{make} eingeben: - \begin{itemize} - \item \texttt{all} braucht \texttt{report.pdf} - \begin{itemize} - \item \texttt{report.pdf} braucht \texttt{plot.pdf} - \begin{itemize} - \item \texttt{python plot.py} - \end{itemize} - \item \texttt{lualatex report.tex} - \end{itemize} - \end{itemize} -\end{frame} - -\begin{frame}{Funktionsweise} - \begin{center} - \begin{tikzpicture} - \graph [ - grow down, - branch right sep, - nodes={ - node font=\ttfamily, - }, - ] { - "all" [x=3.5] -> "report.pdf" [x=3] -> { - "report.tex", - "plot.pdf" -> { - "plot.py", "data.txt" - }, - "plot2.pdf" -> { - "plot2.py", "data.txt", "data2.txt" - }, - }, - }; - \end{tikzpicture} - \end{center} - - \begin{itemize} - \item Abhängigkeiten bilden einen DAG (directed acyclic graph/gerichteter azyklischer Graph) - \item Dateien werden neu erstellt, falls sie nicht existieren oder älter als ihre Prerequisites sind - \item Prerequisites werden zuerst erstellt - \item top-down Vorgehen - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{Argumente für \texttt{make}} - \begin{tblr}{ - colspec = {l X[l]}, - column{1} = {font=\ttfamily}, - } - make \textit{target} & statt des ersten in der \texttt{Makefile} genannten Targets (meist \texttt{all}) nur \texttt{target} erstellen \\ - make -n & dry run: Befehle anzeigen aber nicht ausführen \\ - make -B & Force: ausführen aller Schritte, ignorieren des Alters aller Dateien \\ - make -p & Datenbank aller Abhängigkeiten ausgeben - \end{tblr} - \begin{itemize} - \item Nützlich, wenn man einen Plot bearbeitet: \texttt{make plot.pdf} - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{\texttt{make clean}} - (Nützliche) Konvention: \texttt{make clean} löscht alle vom \texttt{Makefile} erstellten Dateien/Ordner. - - \begin{center} - \begin{minted}{make} - clean: - rm plot.pdf report.pdf - \end{minted} - \end{center} - - Das Projekt sollte dann so aussehen, wie vor dem ersten Ausführen von \texttt{make}. -\end{frame} - -\begin{frame}[fragile]{Advanced} - \texttt{build}-Ordner: Projekt sauber halten - - \begin{center} - \begin{minted}{make} - all: build/report.pdf - - build/plot.pdf: plot.py data.txt | build - python plot.py # savefig('build/plot.pdf') - - build/report.pdf: report.tex build/plot.pdf | build - lualatex --output-directory=build report.tex - - build: - mkdir -p build - - clean: - rm -rf build - - .PHONY: all clean - \end{minted} - \end{center} - - \begin{itemize} - \item \texttt{| build} ist ein order-only Prerequisite: Alter wird ignoriert - \item Targets, die bei \texttt{.PHONY} genannt werden, erzeugen keine Dateien (guter Stil). - Bsp: \textbf{\texttt{clean}} löscht Dateien, wird versehentlich eine Datei clean erstellt, - soll trotzdem \textbf{\texttt{clean}} ausgeführt werden. - Nennung hier hebt die Verwirrung von \texttt{make} auf, beugt vor. - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{Vergleich: Kuchen backen} - \begin{center} - \begin{minted}{make} - Kuchen: Teig Backofen - Ofen auf 140°C vorheizen - Teig in Backform geben und in den Ofen schieben - Kuchen nach 40 min herausnehmen - - Teig: Eier Mehl Zucker Milch Rumrosinen | Schüssel - Eier schlagen - Mehl, Zucker und Milch hinzugeben - Rumrosinen unterrühren - - Rumrosinen: Rum Rosinen - Rosinen in Rum einlegen - Vier Wochen stehen lassen - - Schüssel: - Rührschüssel auf den Tisch stellen, wenn nicht vorhanden - - clean: - Kuchen essen - Küche sauber machen und aufräumen - \end{minted} - \end{center} -\end{frame} - -\begin{frame}[fragile]{Expert} - Können mehrere unabhängige Auswertungen parallel ausgeführt werden? \\ - → Ja: \;\texttt{make -j4}\; (nutzt 4 Prozesse gleichzeitig, Anzahl beliebig) - - Problem: Manchmal führt \texttt{make} Skripte gleichzeitig zweimal aus (hier \texttt{plot.py}) - \begin{center} - \begin{minted}{make} - all: report.txt - - report.txt: plot1.pdf plot2.pdf - touch report.txt - - plot1.pdf plot2.pdf: plot.py data.txt - python plot.py # plot.py produziert sowohl plot1.pdf als auch plot2.pdf - \end{minted} - \end{center} - - Lösung: manuell synchronisieren - \begin{center} - $\vdots$ \\ - \begin{minted}{make} - plot1.pdf: plot.py data.txt - python plot.py - - plot2.pdf: plot1.pdf - \end{minted} - \end{center} - - Wenn man \texttt{plot2.pdf} aber nicht \texttt{plot1.pdf} löscht, kann \texttt{make} nicht mehr \texttt{plot2.pdf} erstellen. -\end{frame} diff --git a/make/content/motivation.tex b/make/content/motivation.tex new file mode 100644 index 00000000..85cb4295 --- /dev/null +++ b/make/content/motivation.tex @@ -0,0 +1,44 @@ +\begin{frame}{Automatisierte, reproduzierbare Prozesse} + + {\huge Problem:}\\ + \vspace{1em} + Kurz vor Abgabe noch neue Korrekturen einpflegen + \begin{enumerate} + \item Tippfehler korrigieren, Plots bearbeiten + \item \TeX{} ausführen, ausdrucken + \end{enumerate} + \begin{itemize} + \item vergessen, Plots neu zu erstellen + \item zurück zu Schritt 1 ... + \end{itemize} +\end{frame} + +\begin{frame}{Automatisierte, reproduzierbare Prozesse} + + {\huge Lösung: Make} + \vspace{1em} + \begin{itemize} + \item prüft, welche Dateien geändert wurden + \item berechnet nötige Operationen um Abhängigkeiten zu erfüllen + \item führt Befehle aus + \begin{itemize} + \item Python-Skripte + \item \TeX{} + \item etc ... + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Motivation} + + {\huge Warum?} + \vspace{1em} + \begin{itemize} + \item \textbf{Automatisierung} verhindert Fehler + \item Dient als \textbf{Dokumentation} + \item \textbf{Reproduzierbarkeit}: unverzichtbar in der Wissenschaft + \item \textbf{Spart Zeit}: nur notwendige Operationen werden ausgeführt + \end{itemize} + \vspace{1em} + \textbf{Ziel:} Eingabe von \texttt{make} erstellt komplettes Protokoll/Paper aus Daten +\end{frame} diff --git a/make/content/simple_start.tex b/make/content/simple_start.tex new file mode 100644 index 00000000..f896f3e0 --- /dev/null +++ b/make/content/simple_start.tex @@ -0,0 +1,70 @@ +\begin{frame}[fragile]{Makefile} + \begin{itemize} + \item Von \texttt{make} benutzte Datei heißt \texttt{Makefile} (keine Endung) + \begin{itemize} + \item bei Windows Dateiendungen einschalten, siehe + \url{http://techmixx.de/windows-10-dateiendungen-anzeigen-oder-ausblenden/} + \end{itemize} + \item \texttt{Makefile} besteht aus Regeln (Rules): + \end{itemize} + \begin{block}{Rule} + \centering + \begin{minted}{make} + target: prerequisites + recipe + \end{minted} + \end{block} + \begin{description} + \item[\texttt{\hphantom{prerequisites}\llap{target}}] Datei(en), die von dieser Rule erzeugt werden + \item[\texttt{prerequisites}] Dateien, von denen diese Rule abhängt + \item[\texttt{\hphantom{prerequisites}\llap{recipe}}] Befehle, um vom \texttt{prerequisites} zu \texttt{target} zu kommen + \begin{itemize} + \item wird mit Tab unter \texttt{target: prerequisites} eingerückt + \end{itemize} + \end{description} +\end{frame} + +\begin{frame}[fragile]{Einfachstes Beispiel} + \begin{center} + \begin{minted}{make} + plot.pdf: plot.py data.txt + python plot.py + \end{minted} + \end{center} + \begin{itemize} + \item Wir wollen \texttt{plot.pdf} erzeugen (\texttt{target}) + \begin{itemize} + \item \texttt{plot.pdf} hängt von \texttt{plot.py} und \texttt{data.txt} ab (\texttt{prerequisites}) + \item Der Befehl, um \texttt{plot.pdf} aus den \texttt{prerequisites} zu erhalten ist \texttt{python plot.py} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Beispiel} + \begin{center} + \begin{minted}{make} + all: report.pdf # convention + + plot.pdf: plot.py data.txt + python plot.py + + report.pdf: report.tex + lualatex report.tex + + report.pdf: plot.pdf # add prerequisite + \end{minted} + \end{center} + \vspace{1em} + + \texttt{make} eingeben: + \begin{itemize} + \item \texttt{all} braucht \texttt{report.pdf} + \begin{itemize} + \item \texttt{report.pdf} braucht \texttt{plot.pdf} + \begin{itemize} + \item \texttt{python plot.py} + \end{itemize} + \item \texttt{lualatex report.tex} + \end{itemize} + \end{itemize} +\end{frame} diff --git a/make/make.tex b/make/make.tex index 1b2112e6..8e2431e7 100644 --- a/make/make.tex +++ b/make/make.tex @@ -4,7 +4,12 @@ \begin{document} -\maketitle -\input{content/make.tex} + \maketitle + \input{content/motivation.tex} + \input{content/simple_start.tex} + \input{content/functions.tex} + \input{content/build.tex} + \input{content/latexmk.tex} + \input{content/advanced.tex} \end{document} From be62bba159455e1a50f5e618b00815a936dd3b5d Mon Sep 17 00:00:00 2001 From: Christian Beckmann Date: Fri, 5 Jul 2024 08:55:20 +0200 Subject: [PATCH 3/4] make slides implement comments --- make/content/advanced.tex | 2 +- make/content/build.tex | 13 +++++++++++++ make/content/functions.tex | 13 ------------- make/content/motivation.tex | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/make/content/advanced.tex b/make/content/advanced.tex index f220acab..7ec2f577 100644 --- a/make/content/advanced.tex +++ b/make/content/advanced.tex @@ -29,7 +29,7 @@ \begin{frame}[fragile]{Expert} Können mehrere unabhängige Auswertungen parallel ausgeführt werden? \\ - → Ja: \;\texttt{make -j4}\; (nutzt 4 Prozesse gleichzeitig, Anzahl beliebig) + → Ja: \;\texttt{make -j4}\; (nutzt 4 Prozesse (\texttt{j}: jobs) gleichzeitig, Anzahl beliebig) Problem: Manchmal führt \texttt{make} Skripte gleichzeitig zweimal aus (hier \texttt{plot.py}) \begin{center} diff --git a/make/content/build.tex b/make/content/build.tex index 52f458ff..9d280177 100644 --- a/make/content/build.tex +++ b/make/content/build.tex @@ -1,5 +1,18 @@ \headlineframe{Projekte \enquote{sauber} halten} +\begin{frame}[fragile]{\texttt{make clean}} + (Nützliche) Konvention: \texttt{make clean} löscht alle vom \texttt{Makefile} erstellten Dateien/Ordner. + + \begin{center} + \begin{minted}{make} + clean: + rm plot.pdf report.pdf + \end{minted} + \end{center} + + Das Projekt sollte dann so aussehen, wie vor dem ersten Ausführen von \texttt{make}. +\end{frame} + \begin{frame}[fragile]{\texttt{build}-Ordner} \texttt{build}-Ordner: Projekt sauber halten diff --git a/make/content/functions.tex b/make/content/functions.tex index b58c21cb..96b60f9d 100644 --- a/make/content/functions.tex +++ b/make/content/functions.tex @@ -43,16 +43,3 @@ \item Nützlich, wenn man einen Plot bearbeitet: \texttt{make plot.pdf} \end{itemize} \end{frame} - -\begin{frame}[fragile]{\texttt{make clean}} - (Nützliche) Konvention: \texttt{make clean} löscht alle vom \texttt{Makefile} erstellten Dateien/Ordner. - - \begin{center} - \begin{minted}{make} - clean: - rm plot.pdf report.pdf - \end{minted} - \end{center} - - Das Projekt sollte dann so aussehen, wie vor dem ersten Ausführen von \texttt{make}. -\end{frame} diff --git a/make/content/motivation.tex b/make/content/motivation.tex index 85cb4295..60ca0426 100644 --- a/make/content/motivation.tex +++ b/make/content/motivation.tex @@ -9,7 +9,7 @@ \end{enumerate} \begin{itemize} \item vergessen, Plots neu zu erstellen - \item zurück zu Schritt 1 ... + \item zurück zu Schritt 1 \dots \end{itemize} \end{frame} @@ -24,7 +24,7 @@ \begin{itemize} \item Python-Skripte \item \TeX{} - \item etc ... + \item etc \dots \end{itemize} \end{itemize} \end{frame} From 1a1b934af533e1147a0be281e1d538f012b30895 Mon Sep 17 00:00:00 2001 From: Christian Beckmann Date: Fri, 5 Jul 2024 08:55:38 +0200 Subject: [PATCH 4/4] latex make update, remove make completly --- latex/content/advanced.tex | 1 - latex/latex.tex | 1 - 2 files changed, 2 deletions(-) diff --git a/latex/content/advanced.tex b/latex/content/advanced.tex index 1944c969..26742002 100644 --- a/latex/content/advanced.tex +++ b/latex/content/advanced.tex @@ -7,4 +7,3 @@ \section{Fortgeschritten} \input{content/texorpdfstring.tex} \input{content/links.tex} \input{content/width.tex} -%\input{content/debug.tex} diff --git a/latex/latex.tex b/latex/latex.tex index fb5ac2b3..c655e9a6 100644 --- a/latex/latex.tex +++ b/latex/latex.tex @@ -89,7 +89,6 @@ \input{content/footnotes.tex} \input{content/bibliography.tex} \input{content/advanced.tex} -%\input{content/latexmk.tex} \input{content/tlmgr.tex} \input{content/matplotlib.tex} \input{content/beamer.tex}