293 lines
7.1 KiB
Markdown
293 lines
7.1 KiB
Markdown
@slide(layout=chapter-slide)
|
|
|
|
@title
|
|
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 <span class="emoji">🖥️</span>
|
|
|
|
@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
|
|
{ .thin-padding }
|
|
|
|
@slide(layout=content-only)
|
|
|
|
@title
|
|
Anpassungen beim Kompilieren
|
|
|
|
@content
|
|
<div class="box warning">
|
|
Um Dokumente mit Quelltext-Listings kompilieren zu können, muss die Flag `--shell-escape` an den Compiler übergeben werden.<br />
|
|
<strong>Dies ist nur bei vertrauenswürdigen Dokumenten empfehlenswert.</strong>
|
|
</div>
|
|
|
|
In TeXstudio muss diese unter **`Optionen → TeXstudio konfigurieren → Befehle`** (`TeXstudio → Einstellungen` unter macOS) bei PdfLaTeX vor `%.tex` ergänzt werden:
|
|
|
|
<code>pdflatex -synctex=1 -interaction=nonstopmode **\-\-shell-escape** %.tex</code>
|
|
|
|
|
|
@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}|<h2>LaTeX im Studium</h2>|.
|
|
```
|
|
|
|
@preview
|
|

|
|
|
|
|
|
@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
|
|

|
|
|
|
|
|
@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}
|
|
```
|
|
|
|
<span class="emoji">🔗</span> **[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
|
|

|
|
|
|
|
|
@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
|
|

|
|
|
|
|
|
@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.
|