Matlab-Code mit Syntax-Highlighting in LaTeX

11. Juli 2012 | #latex #lyx #matlab

LaTeX bietet die ausgesprochen praktische Möglichkeit, Syntaxhervorhebungen automatisch vorzunehmen. Das macht es dem Leser des Dokumentes einfacher, sich im Quelltext zurechtzufinden und der Autor spart sich die Mühe, Schlüsselwörter händisch einzufärben oder (noch schlimmer) auf Screenshots auszuweichen.

Hier jeweils die Anleitungen in Stichworten für LaTeX und LyX:

Syntax-Highlighting mit LaTeX

In meinem konkreten Fall brauchte ich Hervorhebungen für Matlab-Skripte. Hierfür (und für viele weitere Programmier- oder Markup-Sprachen) taugt listings (aufgepasst: nicht mit listing – ohne s – verwechseln!).

Folgender Code in der Präambel bietet sich an:

\usepackage{listings}
\usepackage{color}

% Farben für Matlab-Listings
\definecolor{hellgelb}{rgb}{1,1,0.85}     % Hintergrundfarbe
\definecolor{colKeys}{RGB}{0,0,255}       % blau
\definecolor{colIdentifier}{RGB}{0,0,0}   % schwarz
\definecolor{colComments}{RGB}{34,139,34} % gruen
\definecolor{colString}{RGB}{160,32,240}  % violett

\lstset{%
    language=Matlab,%
    backgroundcolor={\color{hellgelb}},%
    basicstyle={\footnotesize\ttfamily},%
    breakautoindent=true,%
    breakindent=10pt,%
    breaklines=true,%
    captionpos=t,%
    columns=fixed,%
    commentstyle={\itshape\color{colComments}},%
    extendedchars=true,%
    float=hbp,%
    frame=single,%
    framerule=1pt,%
    identifierstyle={\color{colIdentifier}},%
    keywordstyle={\color{colKeys}},%
    numbers=left,%
    numbersep=1em,%
    numberstyle={\tiny\ttfamily},%
    showspaces=false,%
    showstringspaces=false,%
    stringstyle={\color{colString}},%
    tabsize=4,%
    xleftmargin=1em,%
    xrightmargin=1em%
}

Obige Listing-Einstellungen habe ich aus einem Forum-Beitrag gemopst und nur leicht verändert. Die Farb-Definitionen sind direkt aus Matlab abgelesen. Lediglich der Hintergrund ist etwas satter, um sich stärker abzuheben:

Bildschirmfoto: So sieht das Ergebnis des obigen Beispiels aus. Der Editor im Hintergrund ist übrigens LyX.

… und mit LyX

LyX-Benutzer gehen wie folgt vor:

  1. Dokumenteinstellungen öffnen (Dokument → Einstellungen…)
  2. Den Bereich Programmlistings öffnen
  3. Die listings-Parameter von oben eingeben – allerdings ohne \lstset{%, ohne die %-Zeichen an den Zeilenenden und ohne das abschließende }:
    language=Matlab,
    backgroundcolor={\color{hellgelb}},
    basicstyle={\footnotesize\ttfamily},
    breakautoindent=true,
    breakindent=10pt,
    breaklines=true,
    captionpos=t,
    columns=fixed,
    commentstyle={\itshape\color{colComments}},
    extendedchars=true,
    float=hbp,
    frame=single,
    framerule=1pt,
    identifierstyle={\color{colIdentifier}},
    keywordstyle={\color{colKeys}},
    numbers=left,
    numbersep=1em,
    numberstyle={\tiny\ttfamily},
    showspaces=false,
    showstringspaces=false,
    stringstyle={\color{colString}},
    tabsize=4,
    xleftmargin=1em,
    xrightmargin=1em
  4. Falls noch nicht geschehen, müssen die Farbdefinitionen und der Aufruf von \usepackage{color} noch im Bereich LaTeX-Vorspann erfolgen:
    \usepackage{color}
    % Farben für Matlab-Listings
    \definecolor{hellgelb}{rgb}{1,1,0.85}     % Hintergrundfarbe
    \definecolor{colKeys}{RGB}{0,0,255}       % blau
    \definecolor{colIdentifier}{RGB}{0,0,0}   % schwarz
    \definecolor{colComments}{RGB}{34,139,34} % gruen
    \definecolor{colString}{RGB}{160,32,240}  % violett

So sollten die Dokumenteneinstellungen in den Bereichen Programmlistings und LaTeX-Vorspann aussehen:

Bildschirmfoto: Listings-Einstellungen in LyX … und der passende Eintrag in der Preamble

Als Alternative kann natürlich auch die komplette Präambel von oben in den Bereich LaTeX-Vorspann eingetragen werden; mir persönlich scheint das sogar etwas übersichtlicher.

Syntax-Highlighting für andere Programmiersprachen

Wer noch etwas verändern möchte oder eine andere Programmiersprache verwendet, schaut am besten mal in das Listings-Handbuch.

Dort gibt es bspw. auch Tipps zum Referenzieren einzelner Code-Zeilen und ähnliche Spezialitäten.