Source Code Listings with LaTeX
Listings in TeX Dokumenten[edit]
Um in TeX Dokumenten Quelltexte (Programmlistings) einzufügen, bietet sich die Verwendung des Pakets listings an. Dazu muss das Paket zuerst mit
\usepackage{listings}
eingebunden werden, außerdem empfiehlt sich für farbiges Syntax-Highlighting die Verwendung des Pakets color
\usepackage{color}
Quellcode einbinden[edit]
Dazu gib es 2 Möglichkeiten, entweder direkt im TeX Dokument (inline) oder als eigenständige Datei:
inline[edit]
\begin{lstlisting}
[caption={ein paar Zeilen code}\label{lst:test123},captionpos=t]
for i:=maxint to 0 do
begin
j:=square(root(i));
end;
\end{lstlisting}syntaxhighlight
externe Datei[edit]
Hier im Beispiel eine Datei namens beispiel.java < lang="latex">
\lstinputlisting [caption={Ein kleines Programm in Java} \label{lst:javaclass}, captionpos=t,language=JAVA] {listings/beispiel.java}
</syntaxhighlight>
Hinweise[edit]
label: Label für Referenzen auf das Listing mit \ref{lst:xyz}
caption: Beschreibungstext
captionpos: Position des Beschreibungstextes (t=top, b=bottom)
language: [Dialekt]Sprache - Angabe einer Programmiersprache (z.B. JAVA, XML, C, C++) oder eines Dialekts (z.B. [LaTeX]TeX)
Formatierung[edit]
Farben[edit]
Mit Hilfe des Pakets color lassen sich mit Hilfe von
\color{<colour>}
Farbwerte verwenden sowie eigene definieren, z.B.:
\definecolor{middlegray}{rgb}{0.5,0.5,0.5}
\definecolor{lightgray}{rgb}{0.8,0.8,0.8}
\definecolor{orange}{rgb}{0.8,0.3,0.3}
\definecolor{yac}{rgb}{0.6,0.6,0.1}
Quellcode[edit]
Die Darstellung der Quellcodeabschnitte wird über
\lstset{}
formatiert, dabei stehen mehrere Variablen zur Verfügung, z.B.:
Variable | Beschreibung | Beispiel |
---|---|---|
backgroundcolor | Hintergrundfarbe | \color{lightgray} |
basicstyle | Schriftformatierung | \scriptsize\ttfamily |
keywordstyle | Schlüsselwörter | \bfseries\ttfamily\color{orange}, |
stringstyle | Variablen | \color{green}\ttfamily, |
commentstyle | Kommentare | \color{middlegray}\ttfamily, |
emph emphstyle emph emphstyle |
Variablen | square \color{blue}\texttt [2]root,base [2]\color{yac}\texttt |
showstringspaces | leerzeichen in Strings darstellen | true / false |
flexiblecolumns | Spaltenbreite dynamisch/fest | true / false |
tabsize | Tabulatorenbreite | 2, |
numbers | Position der Zeilennummern | left / right |
numberstyle | Größe der Zeilennummern | \tiny |
numberblanklines | leere Zeilen durchnummerieren | true / false |
stepnumber | Beginn der Nummerierung | 1 |
numbersep | Abstand zwischen Zeilennummern und Quellcode | 10pt |
xleftmargin | Abstand zum Rand | 15pt |
Anm.:
Formatierung immer $key={$value}, Trennung mehrerer Definitionen durch Kommata
\bfseries: '''fettgedruckt'''<br />
\ttfamily: <font face="courier">typewriter</font><br />
\tiny: <small>klein</small>
Beispiel:
\lstset{
basicstyle=\scriptsize\ttfamily,
keywordstyle=\bfseries\ttfamily\color{orange},
stringstyle=\color{green}\ttfamily,
commentstyle=\color{middlegray}\ttfamily,
emph={square},
emphstyle=\color{blue}\texttt,
emph={[2]root,base},
emphstyle={[2]\color{yac}\texttt},
showstringspaces=false,
flexiblecolumns=false,
tabsize=2,
numbers=left,
numberstyle=\tiny,
numberblanklines=false,
stepnumber=1,
numbersep=10pt,
xleftmargin=15pt
}
Quellcodeverzeichnis[edit]
Analog zu Abbildungs- und Tabellenverzeichnis kann auch ein Quellcodeverzeichnis eingebunden werden, das funktioniert mit
\lstlistoflistings
Um einen Eintrag im Inhaltsverzeichnis zu ermöglichen, sind jedoch einige Handgriffe erforderlich, so sind im TeX-Kopf (also vor \begin{document}) einige Elemente aus dem Dokumentenstyle (hier book.cls) und listings.sty zu überladen. Zur Info: die beiden Dateien befinden sich üblicherweise an den Orten
/usr/local/teTeX/share/texmf.tetex/tex/latex/base/book.cls
bzw.
/usr/local/teTeX/share/texmf.tetex/tex/latex/listings/listings.sty
wobei diese Dateien ja nicht editiert werden. Das erfolgt durch Einfügen des Code in das TeX-Dokument, und zwar zwischen die Tags
\makeatletter
...
\makeatother
mit Hilfe der Anweisungen
\renewcommand (einen existierenden Befehl überschreiben)
\newcommand (einen neuen Befehl erzeugen)
Das sieht dann - analog zu den Verzeichnissen etwa so aus:
\makeatletter
% Festlegen des Kapitelnamen (nicht unbedingt notwendig):
% aus listing.sty
\renewcommand\lstlistlistingname{Quellcode}
% Erzeugen eines Eintrags im Inhaltsverzeichnis:
% aus book.cls
\newcommand\loltableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
% \@mkboth{%
% \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
\chapter{\lstlistlistingname}
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}
% Erzeugen des Quellcodeverzeichnisses:
% aus listing.sty
\renewcommand\lstlistoflistings{\bgroup
\let\contentsname\lstlistlistingname
\let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
\loltableofcontents \egroup}
\makeatother