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'''<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
Verfasser: hagbard







