LaTeX-Paket zur Syntaxhervorhebung von Code in verschiedenen Sprachen

164

Ich suche ein LaTeX-Paket, das Syntaxhervorhebungen für Code ausführt. Zum Beispiel benutze ich gerade den wörtlichen Block, um Code zu schreiben:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

Und das funktioniert gut, um den Code in meinem Dokument anzuzeigen. Angenommen, ich wollte das HTML-Markup so hervorheben, wie es eine IDE im Ausgabedokument tun würde. Gibt es ein Paket, das helfen könnte?

Ich möchte dasselbe für verschiedene Sprachen wie Java, C #, HTML, CSS usw. tun.

Vincent Ramdhanie
quelle
4
Ich bin nicht zufrieden mit lstlisting. XML-Code wird überhaupt nicht hervorgehoben und bei Verwendung von fremden Unicode-Zeichen vermasselt. JavaScript wird anscheinend auch nicht unterstützt. Kann LGrind mit solchen Dingen umgehen?
Webjunkie

Antworten:

157

Sie können das Listings- Paket verwenden. Es unterstützt viele verschiedene Sprachen und es gibt viele Optionen zum Anpassen der Ausgabe.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}
ChrisN
quelle
20
Tut dies standardmäßig Farben? Ich sehe keine farbige Ausgabe in meiner Testverwendung und bin mir nicht sicher, ob dies ein Fehler meinerseits oder einfach keine Funktion ist.
Benson
12
Ich habe hier eine Antwort gefunden: tjansson.dk/?p=419 . Sie können einfach den Befehl lstset verwenden, um alle Arten von Stilen für verschiedene Eigenschaften festzulegen.
Benson
144

Nachdem ich eine ähnliche Frage gestellt habe, habe ich ein anderes Paket erstellt, das Pylements verwendet und einige Optionen mehr bietet als texments. Es heißt mintedund ist ziemlich stabil und brauchbar.

Um es zu demonstrieren, hier ist ein Code, der mit geprägt geprägt ist:

Beispielcode

Konrad Rudolph
quelle
Das ist eigentlich ein ziemlich guter Job. Die Installation von Pylements ist eine Herausforderung, aber ich bin sicher, dass die meisten Personen dazu bereit sind.
Vincent Ramdhanie
1
@ Vincent: Leider ist die Installation von Pylements unter Windows im Moment etwas komplizierter (der Benutzer muss die PATHVariable anpassen und ein Cmd-Skript erstellen). Ich hoffe, die Pylements-Betreuer davon zu überzeugen, pygmentizemit einem .exeWrapper zu versenden , um diesen Schritt zu vereinfachen.
Konrad Rudolph
1
Nachdem ich sowohl Listings als auch Minted / Pylements ausprobiert hatte, entschied ich, dass Minted viel besser (flexibler) war. Es wird jedoch erforderlich sein, durch ein Dutzend Reifen zu springen, auf MiKTeX 2.8 zu aktualisieren, Python zu installieren, andere Komponenten zu installieren und so weiter. Die geprägte Dokumentation ist schlecht und unterstützt nicht das Brechen langer Zeilen. Aber irgendwann habe ich es geschafft, Java / XML in Eclipse-Farben zu rendern! jevon.org/wiki/Eclipse_Pylements_Style
jevon
@soundasleepful: Die geprägte Dokumentation wird ständig aktualisiert. ;-) Ich finde es eigentlich ziemlich umfangreich (natürlich bin ich voreingenommen), aber ich gehe gerne auf Beschwerden ein. So wie es aussieht, ist der Abschnitt „Anforderungen“ zugegebenermaßen schrecklich.
Konrad Rudolph
3
mintedist installiert und funktioniert sowohl auf ShareLatex als auch auf Overleaf. Sparen Sie sich die Kopfschmerzen bei der Installation von Pylements;)
grofte
21

Ich empfehle Pylements . Es akzeptiert einen Code in einer beliebigen Sprache und gibt die Syntax des hervorgehobenen LaTeX-Codes aus. Es verwendet fancyvrb und Farbpakete seine Ausgabe zu erzeugen. Ich persönlich bevorzuge es dem Listing-Paket. Ich denke, Fancyvrb schafft viel schönere Ergebnisse.

Umprogrammierer
quelle
1
Obwohl ich die Makrologie hinter den Auflistungen bewundere, stimme ich auch zu, dass Pygimente den Vorteil haben: eine schönere Hervorhebung, eine einfachere Anpassung, eine gewisse Fähigkeit zum Mischen von Syntaxen und die Fähigkeit, in andere Formate als Latex wie HTML auszugeben.
Charles Stewart
In einem beamerTypdokument ist dies anscheinend die einzige funktionale Option. Weder mintednoch listingsrichtig kompilieren mit beamer.
Luís de Sousa
Ja, ich habe listingsmit verwendet beamer, aber Sie müssen angeben, dass Frames, die Listings enthalten, sind [fragile].
Supernormal
11

LGrind macht das. Es ist ein ausgereiftes LaTeX-Paket, das es gibt, seit Adam ein Cowboy war und das viele Programmiersprachen unterstützt.

ConcernedOfTunbridgeWells
quelle
10

Ich würde das geprägte Paket wie vom Entwickler Konrad Rudolph erwähnt anstelle des Listenpakets verwenden . Hier ist warum:

Auflistungspaket

Das Auflistungspaket unterstützt standardmäßig keine Farben. So verwenden Sie Farben , die Sie müssten die Farbe Paket enthalten und definieren farb Regeln selbst mit dem \ lstset Befehl wie für MATLAB - Code erklärt hier .

Das Listenpaket funktioniert auch nicht gut mit Unicode, aber Sie können diese Probleme wie hier und hier erläutert beheben .

Der folgende Code

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

erzeugt folgendes Bild:

Geben Sie hier die Bildbeschreibung ein

geprägtes Paket

Das geprägte Paket unterstützt Farben, Unicode und sieht fantastisch aus. Um es verwenden zu können, benötigen Sie jedoch Python 2.6 und Pylements . In Ubuntu können Sie Ihre Python-Version im Terminal mit überprüfen

python --version

und Sie können pylements mit installieren

sudo apt-get install python-pygments

Da minted dann Aufrufe aufruft, müssen Sie es mit -shell-Escape wie folgt kompilieren

pdflatex -shell-escape yourfile.tex

Wenn Sie einen Latex-Editor wie TexMaker oder ähnliches verwenden, würde ich empfehlen, einen Benutzerbefehl hinzuzufügen, damit Sie ihn weiterhin im Editor kompilieren können.

Der folgende Code

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

erzeugt folgendes Bild:

Geben Sie hier die Bildbeschreibung ein

Adam
quelle
4

Ich verwende meistens lstlistings in Papieren, aber für farbige Ausgaben (für Folien) verwende ich stattdessen pylements.

Paul Biggar
quelle
-1

Ich würde vorschlagen, Ihr eigenes Paket basierend auf dem folgenden Tex-Code zu definieren. Dies gibt Ihnen völlige Freiheit. http://ubuntuforums.org/archive/index.php/t-331602.html

okm
quelle
Der Link zeigt nur bestimmte Einstellungen für die Syntax, die Python-Code mit dem Paket 'Listings'
hervorhebt