Programmcode in Lyx und Latex sauber darstellen

Tja es gibt immer wieder was zu lernen und heute ist es das Programmlisting bei LyX bzw. LaTeX.

Wer kennt es nicht? Man hat einen schönen Programmeditor und hat sich durchs Programmieren schon so an das Codelayout gewöhnt, dass man es am liebsten gleich bei seiner Arbeit verwenden möchte. Gesagt getan. Mit folgendem Code erreicht man das ganz einfach.

%Farben fuer Programmlisting
\usepackage{listings,xcolor}
\definecolor{pl_background}{rgb}{0.95,0.95,0.95}
\definecolor{pl_comment}{rgb}{0.12, 0.38, 0.18 }
\definecolor{pl_ifelse}{rgb}{0.74,0.74,.29}
\definecolor{pl_keyword}{rgb}{0.37, 0.08, 0.25}
\definecolor{pl_string}{rgb}{0.06, 0.10, 0.98}
% Vordefiniertes Programmlisting
\lstset{
language = php,
basicstyle = \small\sffamily,
backgroundcolor = \color{pl_background},
stringstyle = \color{pl_string},
keywordstyle = \color{pl_keyword}\bfseries,
commentstyle = \color{pl_comment}\itshape,
frame = lrbt,
numbers = left,
showstringspaces = false,
breaklines = true,
xleftmargin = 15pt,
emph = [1]{php},
emphstyle = [1]\color{black},
emph = [2]{if,and,or,else},
emphstyle = [2]\color{pl_ifelse}}

Dieses Beispiel verwendet PHP als Programmcode und lehnt sich an das Design von Eclipse an. Das Ergebnis sieht man dann in folgendem Screenshot:

Programmlisting in Latex und Lyx mit Eclipse-Style

Der oben gezeigte Code muss in den Latex-Vorspann eingefügt werden. Bei Lyx geht das einfach über Dokument –> Einstellungen –> Latex Vorspann. Die Latex-Geeks wissen das sicher auch bei Latex ;).

Ein Programmlisting kann entweder über Einfügen –> Programmlisting eingefügt werden, oder über Einfügen –> Datei –> Unterdokument. Die zweite Methode ist deutlich angenehmer, weil hier die Formatierung (Einrückungen, Leerzeichen etc) der eingefügten Dateien übernommen wird.

Zum Ändern der Farben empfehle ich auch noch diese Seite: http://www.farb-tabelle.de/de/rgb2hex.htm Damit kann man schnell und einfach Farben in den RGB-Raum übersetzten.

Beim Einfügen des Programmlistings per externe Datei, beachtet bitte auch die zwei Felder für den Untertitel (Legende) des Listings und die Marke um sich im Text darauf beziehen zu können:

Programmlisting in Lyx mit Marke und Legende

Ich hoffe ich konnte dem einen oder anderen weiterhelfen. Fragen, Anregungen und Kommentare sind herzlich willkommen :).

6 Gedanken zu „Programmcode in Lyx und Latex sauber darstellen

  1. Pingback: Vorlage für Bachelor- und Master-Arbeit (mit LyX bzw. LaTeX) | Timos Blog

  2. Bastian

    Hallo Timo

    Vielen Dank für deinen Blog. Ich habe bereits wie beschrieben einige MATLAB-Codes in Lyx zugefügt. Jetzt würde ich gerne zusätzlich etwas SQL Code einfügen mit anders definierten Farben. Wie kann ich es hinbekommen eine zweite Programm Listing Definition zu erstellen die sich dann nur auf den SQL Code bezieht aber nicht auf den Matlab Code ?

    Gruß Bastian

    Antworten
    1. marove Beitragsautor

      Hallo Bastian,

      ohne es getestet zu haben: Hast du schon voersucht, vor dem SQL-Teil die Farben umzudefinieren und nach dem SQL-Teil die Farben wieder auf den normalen Stand zu definieren. Es ist zwar nicht schön, aber immerhin ein kleiner Workaround.

      Grüße
      Timo

      Antworten
  3. Bastian

    Hallo Timo

    Danke das wäre natürlich eine Notlösung. Ich hatte eigentlich gehofft im Latexpreamble direkt eine zweite Sprache mit eigenen Farben definieren zu können. Leider funktioniert das scheinbar nicht so einfach.

    Antworten
  4. Bastian

    Hallo Timo

    Ich habe es hinbekommen 😉 Es ist einfacher als gedacht. In LYX: Insert > Program Listing. In dem Kästchen dann Insert > File > Plaintext. Das SQL Dokument auswählen und einfügen. Dann in dem Kasten mit dem Plaintext rechtsklick > Settings > Language. Dort SQL auswählen. Eine Vordefinierung in der Preamble ist nicht notwendig. Viele Andere Sprachen sind ebenfalls verfügbar.

    Antworten
    1. marove Beitragsautor

      Hey Bastian,

      achso klar. Ich dachte du willst dann ein anderes Farbenschema für die Sprache, aber das Standardhighlighting ist auch schon ziemlich gut.
      Schön, dass es geklappt hat und du die Lösung geteilt hast :).

      Grüzi

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.