@slide(layout=chapter-slide) @title 12 Quelltext-Listings @slide(layout=content-only) @title Unsere Optionen @content Es gibt zwei verbreitete Wege, Quelltext in LaTeX-Dokumenten zu zeigen. * ++ **`minted`** erstellt **sehr hübsche** Quelltext-Listings, aber es benötigt **etwas mehr Konfiguration** und funktioniert nicht auf allen Betriebssystemen zuverlässig. * ++ **`listings`** ist eine **einfach zu nutzende** (aber nicht so hübsche) Alternative für diejenigen, die Probleme mit `minted` haben. ++ Die Befehle beider Pakete sind sehr ähnlich. @slide(layout=content-and-preview) @title Installation 🖥️ @content `minted` benötigt die Programmiersprache Python. Nach der **[Installation von Python](https://www.python.org/)** kann das zugehörige Paket **[`Pygments`](http://pygments.org/)** in der Eingabeaufforderung installiert werden durch: ``` {.lang-sh .hljs} pip install Pygments ``` Anschließend muss das Paket `minted` (oder `listings`) nur noch eingebunden werden: ``` {.lang-tex .hljs} \usepackage{minted} \usepackage{listings} ``` @preview ![](svg/chapter-10/minted-overview-crop.svg){ .thin-padding } @slide(layout=content-only) @title Anpassungen beim Kompilieren @content
Um Dokumente mit Quelltext-Listings kompilieren zu können, muss die Flag `--shell-escape` an den Compiler übergeben werden.
Dies ist nur bei vertrauenswürdigen Dokumenten empfehlenswert.
In TeXstudio muss diese unter **`Optionen → TeXstudio konfigurieren → Befehle`** (`TeXstudio → Einstellungen` unter macOS) bei PdfLaTeX vor `%.tex` ergänzt werden: pdflatex -synctex=1 -interaction=nonstopmode **\-\-shell-escape** %.tex @slide(layout=content-only) @title Ein Hinweis zu unserem Skript @content Unsere Übungsmaterialien erlauben es, zwischen `minted` und `listings` zu wählen. Von Haus aus nutzen wir `listings`. Um `minted` zu aktivieren muss eine Datei namens `listings-mode.tex` mit dem folgenden Inhalt im Wurzelverzeichnis unseres Projekts erstellt werden: ```{.lang-tex .hljs} \newcommand\listingsmode{minted} ``` Kompiliert erneut und die Listings sollten durch `minted` erstellt worden sein. @slide(layout=content-and-preview-with-category) @category minted @title Code im LaTeX-Quelltext @content ++ In einer eigenen Umgebung: ``` {.lang-tex .hljs .fragment} \section*{Haskell-Magie} Quadrate aller geraden % … \begin{minted}{haskell} [x^2 | x <- [1..200], even x] \end{minted} ``` ++ Inline im Quelltext: ``` {.lang-tex .hljs .fragment} \section*{Ein HTML-Beispiel} Eine Überschrift wird so ausgezeichnet: \mint{html}|

LaTeX im Studium

|. ``` @preview ![](svg/chapter-10/minted-haskell-crop.svg) @slide(layout=content-and-preview-with-category) @category minted @title Externer Code @content Um Redundanz zu vermeiden, ist es manchmal praktisch, den Quelltext direkt aus der Quelldatei einzulesen. ``` {.lang-tex .hljs} \section*{Einfache Java-Anwendung} \inputminted{java}{Test.java} ``` ``` {.lang-java .hljs data-sourcefile="Test.java"} public class Test { public static void main(/*…*/) { System.out.println(/*…*/); } } ``` @preview ![](svg/chapter-10/minted-java-crop.svg) @slide(layout=content-only-with-category) @category minted @title Themen und Stile @content Durch optionale Parameter können Zeilennummerierung, Umbrüche und Farben ausgewählt werden. Außerdem sind zahlreiche Themes verfügbar. ``` {.lang-tex .hljs} \usemintedstyle{monokai} \begin{minted}[ linenos=true, breaklines=true, ]{javascript} % ... \end{minted} ``` 🔗 **[Einführung](https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted)** und **[offizielle Dokumentation](https://ctan.kako-dev.de/macros/latex/contrib/minted/minted.pdf)** @slide(layout=content-and-preview-with-category) @category listings @title Code im LaTeX-Quelltext @content In einer eigenen Umgebung: ``` {.lang-tex .hljs} \section*{Haskell-Magie} Quadrate aller geraden % … \begin{lstlisting}[language=Haskell] [x^2 | x <- [1..200], even x] \end{lstlisting} ``` Das Paket `listings` stellt keinen Befehl für inline-Listings zur Verfügung. @preview ![](svg/chapter-10/listings-haskell-crop.svg) @slide(layout=content-and-preview-with-category) @category listings @title Externer Code @content Praktischerweise bietet auch `listings` einen Befehl zum Einfügen externen Codes: ``` {.lang-tex .hljs} \section*{Einfache Java-Anwendung} \lstinputlisting[language=Java]{Test.java} ``` ``` {.lang-java .hljs data-sourcefile="Test.java"} public class Test { public static void main(/*…*/) { System.out.println(/*…*/); } } ``` @preview ![](svg/chapter-10/listings-java-crop.svg) @slide(layout=content-only-with-category) @category listings @title Themen und Stile @content `listings` stellt keine eigenen Themes zur Verfügung. Dies kann aber durch die vielen Konfigurationsoptionen ausgeglichen werden. ``` {.lang-tex .hljs} \begin{lstlisting}[ language=Java, basicstyle=\footnotesize\ttfamily, breaklines=true, keywordstyle=\color{ForestGreen}, commentstyle=\color{DarkGray}, literate={ö}{{\"o}}1 ] % … \end{lstlisting} ``` Für die Erstellung eigener Themes ist der Befehl `\lstset` nützlich. @slide(layout=content-only-with-category) @category listings @title Weitere Materialien @content * [Einführung](https://www.overleaf.com/learn/latex/Code_listing#Reference_guide) in das Paket * offizielle [Dokumentation](https://www.overleaf.com/learn/latex/Code_listing#Reference_guide) * das Paket [`xcolor`](https://www.overleaf.com/learn/latex/Using_colours_in_LaTeX) für Farben * zwei [Themes](https://github.com/jez/latex-solarized) im solarized-Stil für `listings` @slide(layout=task) @task-number 10 @title `minted` @content * Im Ordner `exercises/source-code-listings` findet ihr eine Datei namens `Source.java`. * **Bindet** den Java-Quelltext in der Datei `source-code-listings.tex` **ein**. (Beachtet, dass der Dateipfad relativ zu `main.tex` ist.) * Aktiviert das **Syntax-Highlighting** durch Angabe der Sprache Java. * **Nummeriert** die Zeilen und aktiviert **Umbrüche**. * Nutzt das **Theme** `native`. * Ändert die **Hintergrundfarbe** des Themes zu Dunkelblau. * Bindet jetzt nur die **Zeilen 5 bis 7** ein. * Entfernt die **Leerzeichen** am Anfang der Zeilen durch die passende Option (Tipp: Die Dokumentation spricht hier von `gobble`). Seht bei Fragen in der Dokumentation des Paketes `minted` nach. @slide(layout=task) @task-number 10 @title `listings` @content * Im Ordner `exercises/source-code-listings` findet ihr eine Datei namens `Source.java`. * **Bindet** den Java-Quelltext in der Datei `source-code-listings.tex` **ein**. (Beachtet, dass der Dateipfad relativ zu `main.tex` ist.) * Aktiviert das **Syntax-Highlighting** durch Angabe der Sprache Java. * **Nummeriert** die Zeilen und aktiviert **Umbrüche**. * Setzt mit dem Parameter `basicstyle` eine dicktengleiche Schrift (`\ttfamily \small`). * Ändert die Schlüsselwortfarbe zu Blau. * Verbergt die Sonderzeichen, die **Leerzeichen in Zeichenketten** markieren. Seht bei Fragen in der Dokumentation des Paketes `listings` nach.