Kurztipp - Quellcodelistings in LaTeX


Aus Macwrench

Wechseln zu: Navigation, Suche

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

Persönliche Werkzeuge