Ich muss den Quellcode in LaTeX markieren. Das Paket listings
scheint für die meisten Anwendungsfälle die beste Wahl zu sein, und für mich war es bis jetzt die beste Wahl.
Jetzt brauche ich jedoch mehr Flexibilität. Im Allgemeinen suche ich einen real Lexer. Insbesondere muss ich (für eine eigene Sprachdefinition) eigene Zahlenstile definieren (und hervorheben!). listings
erlaubt keine Hervorhebung von Zahlen im Code. Allerdings muss ich so etwas produzieren:
listings
kann auch keine willkürlichen Trennzeichen für Zeichenfolgen verarbeiten. Betrachten Sie den folgenden gültigen Ruby Code:
s = %q!this is a string.!
Hier, !
kann durch fast any Trennzeichen ersetzt werden.
(Dass listings
nicht mit Unicode umgehen kann, ist auch ziemlich ärgerlich, aber das ist ein anderes Problem.)
Im Idealfall suche ich nach einer Erweiterung von listings
, mit der ich komplexere Lexing-Regeln bereitstellen kann. Aber abgesehen davon suche ich auch nach Alternativen.
Andere Threads haben die Verwendung von Pygments vorgeschlagen, die eine LaTeX-Ausgabe erzeugen können. Es gibt sogar ein Paket - texments
-, um den Übergang zu erleichtern.
Diesem fehlen jedoch die Funktionen. Insbesondere interessiert mich die Zeilennummerierung im listings
-Stil, die Quellcode-Zeilenreferenzen und die Möglichkeit, LaTeX in den Quellcode einzubetten (Optionen texcl
und mathescape
in listings
).
Als Beispiel sehen Sie hier einen Quellcode-Satz mit listings
, der einige der Dinge zeigt, die ein Ersatz auch bieten sollte:
["Sideways Addition" modifiziert von Bit Twiddling Hacks]
Ausgehend von Normans Ratschlägen habe ich eine Lösung gehackt, die (ein gepatchtes ) Pygment zum Hervorheben verwendete und so viele Funktionen wie möglich einbaute, ohne zu platzen ;-)
Ich habe auch ein LateX-Paket erstellt, nachdem mein Pygments-Patch in Version 1.2 veröffentlicht wurde.
geprägt ist ein Paket, das Pygments verwendet, um Top- Hervorhebung der Notch-Syntax in LaTeX. Beispielsweise ermöglicht es die folgende Ausgabe.
Hier ist eine minimale Datei, um den obigen Code zu reproduzieren (Beachten Sie, dass für das Einfügen von Unicode-Zeichen möglicherweise XeTeX erforderlich ist)!
\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 gesetzt werden:
xelatex -Shell-escape test.tex
(Aber geprägt funktioniert auch mit latex
und pdflatex
…)
minted.sty
funktioniert ähnlich wie texments.sty
erlaubt aber zusätzliche Funktionen.
geprägt ist in der CTAN ( Paketinformation aufgeführt
Dokumentation ist selbstverständlich enthalten.
geprägt wird jetzt von Geoffrey Poore gepflegt. Die Entwicklungsversion, einschließlich der neuesten .sty
file , ist unter github.com/gpoore/minted verfügbar und kann von dort geklont werden.
Nochmals vielen Dank an Norman, der mich motiviert hat, dieses Paket zu produzieren.
TeX ist (bekanntlich) vollständig, aber ich bin mir ziemlich sicher, dass Sie diese Erweiterung selbst schreiben müssen. Aus der Dokumentation geht hervor, dass der ursprüngliche Autor von listings
es im Jahr 2004 verwaist hat und dass es seit 2006 nicht aktualisiert wurde. Das Paket wurde nicht entwickelt, um die Formatierung von numerischen Literalen zu überschreiben, aber Sie sind möglicherweise in der Lage Um es zu ändern, ändern Sie die Definition von \[email protected]
. Wenn dies nicht funktioniert, müssen Sie im Detail verstehen, wie die Optionen "Bezeichnerstil" funktionieren, und Sie müssen diese Maschinerie für Ihre numerischen Literale duplizieren.
Ich verstehe nicht ganz, warum Sie so ungern ein externes Tool in Ihre Toolchain aufnehmen, aber weil Sie es sind, müssen Sie zusätzliche Arbeit leisten. Nach einem Blick auf den Quellcode erwarte ich, dass das Ändern von listings
möglich sein sollte, aber ich persönlich würde mich dafür entscheiden, stattdessen mein LaTeX vorzuverarbeiten.
This ist ein Paket, das Quellcode mit Syntaxhervorhebung in TeX und LaTeX konvertiert. Es ist einfach möglich, benutzerdefinierte Programmiersprachendefinitionen hinzuzufügen.
Highlight unterstützt 100 Programmiersprachen und enthält 50 Farbthemen. Es enthält Funktionen zum Neuformatieren und Einrücken von Code.
Ich habe es nicht benutzt, um zu wissen, wie gut es funktioniert, aber jemand anderes, den ich kenne, sagte, dass es ziemlich gut funktioniert hat. Wenn ich die Chance dazu bekomme, werde ich es selbst ausprobieren und sehen.