Zum Inhalt springen

Source Code in LaTeX Dokumente einbetten

Das einbetten von Sourcecode-Elementen in LaTeX mittels \verb bzw. durch verbatim-Umgebungen ist eine recht unschöne Angelegenheit. Es kann zu Problemen mit den Zeilen- und Seitenumbrüchen kommen. Abhilfe schafft das Paket listings. Hier eine kleine Info, welche Settings ich gerade für meine Schulungsunterlagen verwende.

Im Kopf der LaTex Datei muss zunächst das Paket eingeladen und konfiguriert werden:

\usepackage{listings}
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt}
\lstset{language=Perl}

Dabei können zahlreiche aktuelle Sprachen als language definiert werden. Die dargestellten Parameter werden so von mir verwendet. Dabei gibt es natürlich auch noch viele andere Konfigurationsmöglichkeiten.

Nun gibt es drei Möglichkeiten Source-Code in das Dokument einzufügen:

  1. Als Code-Schnippsel im Fließtext
    \lstinline|print "hello world"|
  2. Als eigenständigen Sourcecode
    \begin{lstlisting}{Name}
    print "hello world";
    \end{lstlisting}
  3. Einbetten einer externen Source-Code-Datei
    \lstinputlisting[frame=single,label=beispielcode,caption=Ein Beispiel]{beispiel.pl}

Dabei wird in der gezeichte Varaiante ein Syntaxhighlightning und eine Zeilennummerierung vorgenommen. Zusätzlich können relevante Code-Passagen z.B. farblich markiert werden.

Download listings aus dem CPAN
Dokumentation auf englisch, PDF-Format

42 Kommentare

  1. Jan Helber

    Interessieren würde mich jetzt noch, wie man die Schriftgröße des Source-Codes verkleinern kann.

  2. Frank Schwichtenberg

    Schriftgrösse verkleinern:

    \lstset{% general command to set parameter(s)
    basicstyle=\small,

    Dokumentation Seite 5.

  3. Danke für den Tipp. Hat mir sehr bei meiner DPA geholfen.

    Gruss Timo

  4. Gizmo

    Ich würde gerne Farben innerhalb der listing Umgebung für einzelne Begriffe verwenden, Syntaxhighlighting sozusagen. Leider scheint das nicht zu funktionieren, alles Markup wird als Markup gedruckt. Tipps?

  5. Tillmann Rendel

    In der oben verlinkten Dokumentation wird erklärt, wie man eigene Farben für bestimmte Wörter vergibt (Seite 17). Also nicht nur sozusagen, sondern richtiges SyntaxHighlighting. Dort ist auch ein Beispiel zu finden.

  6. Johannes

    Danke für diesen grossartigen Kurztipp! auch meiner DA hilfts ungemein . . . .

  7. Mark Ross

    Vielen Dank für die kurze und sehr gute Anleitung. Hilft mir sehr bei der DA 🙂

  8. Fabian

    wunderbarer Tip hilft wirklich sehr gut 🙂

  9. Alex Schmitt

    Hi Jan,

    lustig, dass ich bei der Google-Suche von „latex code“ auf Dein Technik-Blog gestoßen bin. Hilft mir jedenfalls sehr weiter 🙂

    Gruß
    Alex

  10. Kerstin

    Any ideas how to include a ‚list of listings‘ at the end of my thesis? \listoflistings doesn’t work 🙁

  11. Kerstin

    found my solution
    \lstlistoflistings
    will work 🙂

  12. andreas

    Ich nutze auch das listings Package und binde damit eine externe PHP Datei ein aber das Listings Package bricht die Zeilen aus der PHP Datei nicht um und sie laufen über das Blatt hinaus. Kann mir da jmd weiterhelfen?

  13. Petra

    Versuche mich gerade am listings package.
    Ich möchte per \lstinline PHP-Code einbinden. Sobald jedoch ein $ drin vorkommt, geht es schief. Wie kann ich sowas wie
    \lstinline{str_replace(„.php“, „.html“, $url)}
    lösen?

  14. Das $-Zeichen leitet den Mathemodus ein. Versuch es mal mit einem Backslash zu entwerten. Also in deinem Beispiel würde das so aussehen: \lstinline{str_replace(„.php“, „.html“, \$url)}

  15. Sebastian

    Hi,

    klasse Sache 🙂 vielen Dank… aber wie kann ich auf darauf Bezug nehmen? (also nen Querverweis mit Nummer)?

  16. Jan

    Das Packet hält sich nicht so richtig an den Rand.
    Die Listings sind viel zu weit links …
    Kennt jemand das Problem?

  17. Jens

    Hallo, ich bin bei der suche nach dem listings paket hier fündig geworden und finde die Dokumentation hier schonmal klasse. vorher habe ich mit dem befehl \begin{code}\begin{verbatim} gearbeitet… das hatte mir doxygen automatisch generiert. nun hab ich das beides durch nen begin{lstlisting} ersetzt.

    mein problem ist es nur…früher sah die schrift einfach schöner aus 😀

    kann mir jemand sagen wie ich es konfiguriert kriege das die schriftart so ist wie vorher? hab schon small und ttype genutzt als settings aber der erfolg sieht immer noch nicht so schoen aus wie vorher….kann mir da bitte jemand helfen?

    lg jens

  18. CPU-designer

    probiers mal mit \usepackage{courier} 😉

  19. Christian

    Moin.
    Dieser Blog hat mir schon sehr viel geholfen, vllt ja noch mehr.
    Ich benutze die lstlisting Umgebung und meine Listings gehen alle über die ganze Textbreite, ich möchte dir aber schmaller machen, weiß jemand wie das geht ?

  20. Jan Schultze

    Um das ganze in einer Beamer Präsentation zu benutzen, gehe ich wie folgt vor:

    \begin{frame}[fragile]
    \begin{lstlisting}
    print({n in {2..N} | forall m in {2..n – 1} | n mod m > 0});

    \end{lstlisting}
    \end{frame}

    Funktioniert wohl erst ab Beamer 3.01.

  21. Danke für die Ergänzung zur Nutzung von lstlisting und beamer in LaTeX!

  22. Dennis

    Moin 🙂 ich habe das ganze jetzt auch erfolgreich genutzt (vielen Dank), jedoch steht links über dem Code im kompilierten PDF immer „numberstyle“. Wie kann ich das los werden?

  23. Antje

    Wunderbare Dokumentation..
    habe bisher noch nichts besseres gefunden 😉

    Danke

  24. Christian

    Hi,

    gute Seite. Ich hoffe, dass mir hier jemand weiter helfen kann. Ich möchte innerhalb einer lstlisting Umgebung einen Verweis auf eine andere lstlisting Umgebung machen. Bsp:

    \begin{lstlisting}[caption={Quelltext}, label=lstlisting1]
    blah
    \ref{lstlsiting2}
    \end{lstlisting}

    Allerdings wird mir kein Verweis gebracht, sondern der Befehl „\ref{lstlsiting2}“ selber angezeigt. Vorschläge?

    Gruß
    Christian

  25. Jan

    Ich bette in einem Report externen Sourcecode nur teilweise (linerange) ein. Z.B. folgendermaßen:

    \lstinputlisting[caption=Sourcecode\label{lst:Sourcecode},language=C,linerange={9-36},firstnumber=9]{SourceCode.c}

    Wenn ich im nachhinein etwas am Sourcecode ändere, dann muss ich auch im Report den linerange wieder anpassen.

    Gibt es eventuell eine Möglichkeit einen Tag im Sourcecode ein Start- und Ende-Label zu hinterlegen und sich dann dieses zu referenzieren? So dass im Report immer der Sourcecode vom Start- bis zum Ende-Label eingefügt wird.

    Dadurch würde das lästige linerange-anpassen im Report entfallen.

  26. Cheikh

    Hallo
    kann mir jemanden helfen, ich schreibe gerade mein Abschlussarbeit und hänge an folgenden Probelm.
    ich benutze lstlisting für codedarestellung, aber ich die Quellen für mein Listing angeben, da ich es sich auf ein externen Dokumen bezieht.

    bin dnakbar für jede Hilfe.

  27. Danke! Ich hatte das mal verwendet, wusste aber nicht mehr welches Package das war… wunderhübsch!

  28. John

    Hey,

    wie kann ich eigentlich für jede Zeile eine andere Hintergrundfarbe benutzen? Also quasi hell/dunkel abwechseln lassen, gerade bei längeren Auszügen sollte dass die Lesbarkeit nochmals erhöhen.

    grüße

    John S.

  29. Coopar

    Hallo,

    ich nutze auch das lstlisting, habe aber nun ein kleines Problem.
    Mein Quellcode beinhaltet französische Anführungszeichen, auch Gillemots gennant (das ist so eine art doppelpfeil nach links, bzw. recht). Wenn ich das Zeichen so direkt in das Listing schreibe, bekomme ich nen Fehler… Wenn ich stattdessen die Latex-Befhele \flqq, \frqq verwende, werden die befehle angezeigt.. hat jmd eine Idee??

  30. Anonymous

    Danke! Ich hatte das mal verwendet, wusste aber nicht mehr welches Package das war… wunderhübsch!

  31. Viktor

    Hallo,
    ich habe folgende Frage: wie bringe ich lstlisting dazu, dass es mir das ==-Zeichen in C/C++ nicht zu einem langen =-Zeichen umwandelt?

    Danke.

  32. Helmut

    Hallo zusammen,
    weiß vielleicht jemand ob es möglich ist die „listings“-umgebung so zu modifizieren dass die captions nicht mehr mit „Listing“ sondern mit einem äquivalenten deutschen Ausdruck benannt werden?

    Gruß an alle

  33. jutzin

    @helmut:

    \renewcommand\lstlistlistingname{der neue name für das verzeichnis}

  34. jutzin

    @dennis: bisschen spät, aber vielleicht hilft’s ja jemand anderem: das hört sich ganz so an, als hättest Du in \lstset{<key_1>=<value_1>, <key_2>=<value_2>, … , <key_n>=<value_n>} an der stelle vor numberstyle=<value> das komma vergessen.

  35. Benny

    Danke für den Eintrag, hat mir gut geholfen. =)

  36. Phil

    Hi, danke für das kurze und gut verständliche Tutorial, aber wie mache ich Sonderzeichen. Z.b. ü. Mit \“u funktioniert es leider nicht mehr.

  37. @Phil:

    Hast du es schon mal mit dem Inputencoding probiert, so dass du die Zeichen direkt eingeben kannst?

    Beispielsweise mit \usepackage[latin1]{inputenc}

  38. Phil

    @Jan
    Danke für den Tipp. Im Nachhinein habe ich mich nun für Highlight von Andre Simon entschieden. Die farbliche Markierung macht den Code noch besser lesbar als dies bei dem Paket listings möglich ist.

  39. Stefan

    Hallo. Ich habe verschiedene Ansätze getestet um im Quellcode das $-Zeichen zu verwenden. Hat jemand eine Lösung dafür? Escapen klappt leider mit \$ nicht. Oder gibts eine Umgebung? Verbatim ist keine Lösung in diesem Fall. Danke.

    Stefan

  40. Lukas

    3 Jahre später: Das hier beschiebene „listings“ Paket hat keine Probleme mit „$“ Zeichen.

Schreibe einen Kommentar

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