Quellcode Hervorhebung in LaTeX
-
21-09-2019 - |
Frage
Ich muss Highlight Quellcode in LaTeX. Das Paket listings
scheint die beste Wahl für die meisten Anwendungsfälle zu sein, und für mich war es, bis jetzt.
Aber jetzt muss ich noch mehr Flexibilität. Im Allgemeinen, was ich suche ist ein real Lexer. Insbesondere muss ich (für eine eigene Sprachdefinition) zu definieren (und markieren!) Eigene Nummer Stile. listings
erlaubt keine Zahlen in Code hervorheben. Ich brauche aber etwas zu produzieren:
listings
kann auch nicht mit beliebigen Begrenzungszeichen für Strings bewältigen. Betrachten Sie den folgenden gültigen Ruby-Code:
s = %q!this is a string.!
Hier können !
um fast ersetzt werden jeder Trennzeichen.
(Das listings
kann nicht Unicode behandeln ist auch ziemlich ärgerlich, aber das ist ein anderes Thema.)
Im Idealfall, ich suche für eine Verlängerung der listings
, die mir komplexere lexing Regeln bieten können. Aber abgesehen, dass ich auch für tragfähige Alternativen zu suchen.
Andere Themen haben vorgeschlagen, mit Pygments die LaTeX-Ausgabe erzeugen kann. Es gibt sogar ein Paket - texments
- den Übergang zu erleichtern.
Dies ist jedoch schmerzlich vermisst Funktionen. Insbesondere interessiert mich in listings
-Stil Zeilennummerierung, Quellcodezeile Referenzen und die Möglichkeit LaTeX im Quellcode der Einbettung (Optionen texcl
und mathescape
in listings
).
Als Beispiel ist hier ein Quellcode typeset mit listings
, die zeigt einige der Dinge, die ein Ersatz sollte auch bieten:
[ „Sideways Zusatz“ geändert von Bit Twiddling Hacks]
Lösung
Unter Norman Rat zu Herzen, habe ich gehackt zusammen eine Lösung, die (a gepatchten ) Pygments für die Hervorhebung und schob in so viele Funktionen wie möglich, ohne zu platzen; -)
Ich habe auch ein LaTeX-Paket erstellt, sobald mein Pygments Patch veröffentlicht wurde Version 1.2 ...
Presenting Geprägt
Geprägt ist ein Paket, dass Anwendungen Pygments erstklassige Syntax in LaTeX Hervorhebung zur Verfügung zu stellen. Zum Beispiel ermöglicht es die folgende Ausgabe.
Hier ist eine minimal-Datei mit dem obigen Code (beachten Sie, dass Unicode-Zeichen einschließlich könnte XeTeX erfordern) zu reproduzieren!
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}
\setsansfont{Calibri}
\setmonofont{Consolas}
\begin{document}
\renewcommand{\theFancyVerbLine}{
\sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}}
\begin{minted}[mathescape,
linenos,
numbersep=5pt,
gobble=2,
frame=lines,
framesep=2mm]{csharp}
string title = "This is a Unicode π in the sky"
/*
Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
of an $n$-sided regular polygon circumscribing a
circle of diameter $d$.
*/
const double pi = 3.1415926535
\end{minted}
\end{document}
Dies kann mit dem folgenden Befehl sein typeset:
xelatex -shell-escape test.tex
(aber Geprägt funktioniert auch mit latex
und pdflatex
...)
minted.sty
funktioniert ähnlich wie texments.sty
sondern ermöglicht zusätzliche Funktionen.
Wie es
bekommen-
Geprägt aufgelistet auf CTAN ( Paketinformationen )
-
Dokumentation ist natürlich enthalten.
-
Geprägt jetzt von Geoffrey Poore gehalten wird. Die Entwickler-Version, einschließlich der neuesten
.sty
Datei , finden Sie unter github.com/gpoore/minted und kann von dort aus. geklont werden
Noch einmal vielen Dank an Norman für mich motivieren, dieses Paket zu erzeugen.
Andere Tipps
ist TeX (bekanntlich) Turing-vollständig, aber ich bin ziemlich sicher, dass du gehst, diese Erweiterung selbst schreiben zu müssen. Die Dokumentation macht deutlich, dass der ursprüngliche Autor von listings
es im Jahr 2004 verwaiste, und dass es nicht aktualisiert wurde seit 2006. Das Paket wurde nicht die Formatierung von numerischen Literalen außer Kraft zu setzen entworfen, aber Sie könnten in der Lage sein, es zu ändern, indem die Definition von \lst@ProcessDigit
. Wenn das nicht funktioniert, müssen Sie im Detail, wie die „identifier“ Optionen arbeiten, zu verstehen, und Sie werden feststellen, dass Maschinen Duplikat für Ihre Zahlenliterale müssen.
Ich verstehe nicht ganz, warum bist du so widerstrebend ein externes Tool in der Werkzeugkette einzuführen, sondern weil Sie sind, werden Sie zusätzliche Arbeit zu tun haben. Nach einem Blick auf den Quellcode, erwarte ich, dass listings
Modifizierung möglich sein sollte, aber ich persönlich würde wählen meine LaTeX statt vorverarbeitet.
Diese ist ein Paket, das Quellcode TeX und LaTeX mit Syntaxhervorhebung umwandelt. Es ist möglich, benutzerdefinierte Definitionen Programmiersprache leicht hinzuzufügen.
Highlight unterstützt 100 Programmiersprachen und umfasst 50 Farbthemen. Es verfügt über Code Neuformatierung und Einrücken.
Ich habe es nicht zu wissen, wie gut es funktioniert, aber jemand anderes Ich weiß es sagte, dass es ziemlich gut funktioniert. Wenn ich eine Chance, ich werde versuchen, es aus mir selbst und sehen.