Kurztipp - Quellcodelistings in LaTeX

From macwrench
Jump to navigation Jump to search

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

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