Quellcode & Listings
Für HTL-Diplomarbeiten ist die Darstellung von Quellcode besonders wichtig. LaTeX bietet dafür das leistungsfähige listings-Paket.
Grundkonfiguration
\usepackage{listings}
\usepackage{xcolor}
\lstset{
basicstyle=\ttfamily\small,
numbers=left,
numberstyle=\tiny\color{gray},
numbersep=8pt,
frame=single,
breaklines=true,
breakatwhitespace=true,
tabsize=2,
showstringspaces=false,
captionpos=b,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{green!60!black}\itshape,
stringstyle=\color{red!70!black},
backgroundcolor=\color{gray!5},
}Code inline und als Block
Inline-Code
Die Funktion \lstinline|calculateSum()| gibt die Summe zurück.
% Oder mit anderem Trennzeichen:
Der Befehl \lstinline!rm -rf /! ist gefährlich.Code-Block direkt im Dokument
\begin{lstlisting}[language=Java, caption={Hauptklasse der Anwendung}, label={lst:main}]
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
\end{lstlisting}Code aus externer Datei einbinden
\lstinputlisting[
language=Python,
caption={Datenverarbeitung},
label={lst:dataprocessing},
firstline=10,
lastline=45
]{code/dataprocessing.py}Best Practice
Bindet Code aus externen Dateien ein statt ihn in die .tex-Datei zu kopieren. So bleibt der Code immer aktuell und ihr vermeidet Synchronisationsprobleme.
Sprachdefinitionen
Listings unterstützt viele Sprachen out-of-the-box:
| Sprache | Code |
|---|---|
| Java | language=Java |
| Python | language=Python |
| C / C++ | language=C / language=C++ |
| C# | language=[Sharp]C |
| JavaScript | language=JavaScript |
| HTML | language=HTML |
| SQL | language=SQL |
| PHP | language=PHP |
| Bash | language=bash |
Eigene Sprachdefinitionen
Für Sprachen wie TypeScript, Kotlin oder Dart müsst ihr eine eigene Definition erstellen:
\lstdefinelanguage{TypeScript}{
keywords={abstract, any, as, async, await, boolean, break,
case, catch, class, const, constructor, continue,
declare, default, delete, do, else, enum, export,
extends, false, finally, for, from, function, get,
if, implements, import, in, instanceof, interface,
let, module, new, null, number, of, package, private,
protected, public, readonly, return, set, static,
string, super, switch, this, throw, true, try, type,
typeof, undefined, var, void, while, yield},
morecomment=[l]{//},
morecomment=[s]{/*}{*/},
morestring=[b]',
morestring=[b]",
morestring=[b]`,
sensitive=true,
}Verschiedene Stile für verschiedene Sprachen
% Java-Stil:
\lstdefinestyle{java}{
language=Java,
keywordstyle=\color{blue!80!black}\bfseries,
commentstyle=\color{green!50!black}\itshape,
stringstyle=\color{orange!80!black},
}
% Python-Stil:
\lstdefinestyle{python}{
language=Python,
keywordstyle=\color{purple!80!black}\bfseries,
commentstyle=\color{gray}\itshape,
stringstyle=\color{green!70!black},
}
% Verwenden:
\begin{lstlisting}[style=java]
// Java-Code hier
\end{lstlisting}
\begin{lstlisting}[style=python]
# Python-Code hier
\end{lstlisting}Alternative: minted
Das Paket minted bietet noch besseres Syntax-Highlighting (nutzt Python Pygments), erfordert aber zusätzliche Installation:
% Benötigt: Python + Pygments installiert
% Kompilieren mit: pdflatex -shell-escape dokument.tex
\usepackage{minted}
\begin{minted}[linenos, frame=single]{python}
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
\end{minted}Hinweis
minted braucht die -shell-escape Option beim Kompilieren und Python muss installiert sein. Für die Diplomarbeit reicht listings völlig aus.Pseudocode & Algorithmen
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{algorithm}[htbp]
\caption{Binäre Suche}
\label{alg:binsearch}
\begin{algorithmic}[1]
\Procedure{BinarySearch}{$arr, target$}
\State $low \gets 0$
\State $high \gets \text{length}(arr) - 1$
\While{$low \leq high$}
\State $mid \gets \lfloor (low + high) / 2 \rfloor$
\If{$arr[mid] = target$}
\State \Return $mid$
\ElsIf{$arr[mid] < target$}
\State $low \gets mid + 1$
\Else
\State $high \gets mid - 1$
\EndIf
\EndWhile
\State \Return $-1$
\EndProcedure
\end{algorithmic}
\end{algorithm}Codelistenverzeichnis
Analog zum Abbildungsverzeichnis könnt ihr ein Verzeichnis aller Code-Listings erstellen:
% Im Dokument nach dem Inhaltsverzeichnis:
\lstlistoflistings