@slide(layout=chapter-slide)

@number
11

@title
Quelltext-Listings


@slide(layout=content-and-preview)

@title
Direkt im LaTeX-Quelltext

@content
Das Paket `listings` bietet zum Einfügen von Code eine eigene Umgebung:

``` {.lang-tex .hljs}
\section*{Haskell-Magie}
Quadrate aller geraden % …
\begin{lstlisting}[language=Haskell]
[x^2 | x <- [1..200], even x]
\end{lstlisting}
```

@preview
![](svg/source-code-listings/listings-haskell-crop.svg)


@slide(layout=content-and-preview)

@title
Externer Code

@content
Praktischerweise bietet `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/source-code-listings/listings-java-crop.svg)


@slide(layout=content-only)

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

@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)
* vordefinierte [UTF-8-Konfiguration](https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue)
* 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
11

@title
Listings

@content
* **Bindet** den Java-Quelltext (zu finden in `Source.java`) in der Datei `source-code-listings.tex` **ein** (relativer Dateipfad!).
* Erlaubt die Verwendung von **Sonderzeichen** durch Angabe der `literate`-Option.
* Aktiviert das **Syntax-Highlighting**.
* **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.
