wake-up-neo.com

Quellcode-Hervorhebung in LaTeX

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:

Required result

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:

LaTeX listings example: Sideways addition["Sideways Addition" modifiziert von Bit Twiddling Hacks]

184
Konrad Rudolph

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.

Präsentieren geprägt

geprägt ist ein Paket, das Pygments verwendet, um Top- Hervorhebung der Notch-Syntax in LaTeX. Beispielsweise ermöglicht es die folgende Ausgabe.

fancy LaTeX example

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.

Wie bekomme ich es?

  • 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.

336
Konrad Rudolph

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.

5
Norman Ramsey

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.

3
homerj