Kurztipp - Quellcodelistings in LaTeX
Aus Macwrench
Inhaltsverzeichnis |
Listings in TeX Dokumenten
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
Dazu gib es 2 Möglichkeiten, entweder direkt im TeX Dokument (inline) oder als eigenständige Datei:
inline
\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}
externe Datei
Hier im Beispiel eine Datei namens beispiel.java
\lstinputlisting
[caption={Ein kleines Programm in Java}
\label{lst:javaclass},
captionpos=t,language=JAVA]
{listings/beispiel.java}
Hinweise
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
Farben
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
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
\ttfamily: typewriter
\tiny: klein
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
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
Die Änderungen gegenüber der Originale sind jeweils hervorgehoben
Verfasser: hagbard







