
Ich verwende es, minted
um Code in Python hervorzuheben. In manchen Fällen möchte ich Code mit Ausgabe mischen, die der Benutzer sehen wird. Dadurch erhalte ich die roten Syntaxfehlerfelder, beispielsweise so:
Und manchmal erhalte ich keinen Fehler, möchte aber die Hervorhebung (zweite Zeile) deaktivieren:
Ich würde also gerne wissen, ob es möglich ist, die Hervorhebung für einige Zeilen auszuschalten, gleichzeitig aber Optionen wie die Zeilennummerierung und den Hintergrund beizubehalten.
MWE:
\documentclass{article}
\usepackage{minted}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\newminted{python3}{bgcolor=bg, linenos=true, tabsize=4}
\begin{document}
I want lines 2 and 4 not to be highlighted but still keep the background and line numbering.
\begin{python3code}
>>> type(3.14)
<class 'float'>
>>> print(name)
NameError: name 'name' is not defined
\end{python3code}
\end{document}
Bearbeiten:Zur Verdeutlichung: Es gibt Zeilen, die ich hervorheben möchte, die mit beginnen, >>>
und es gibt Zeilen, die ich hervorheben möchte, die nicht mit beginnen >>>
. Es gibt auch Zeilen, die ich nicht hervorheben möchte. Die Standardeinstellung sollte also sein, dass die Zeile hervorgehoben wird, ich aber für einige Zeilen eine Ausnahme hinzufügen kann.
Antwort1
Kurz gesagt: Schreiben Sie einen speziellen Lexer. Aber Sie haben Glück, er existiert bereits, verwenden Sie ihn einfach pycon
als Sprache.
\newminted{pycon}{bgcolor=bg, linenos=true, tabsize=4}
Antwort2
Eine sehr einfache Lösung für Ihr Problem besteht darin, den Code vorzuverarbeiten, indem Sie #
vor jeder Zeile, die nicht mit einem beginnt, ein hinzufügen >>>
. Dies sieht zumindest OK aus, auch wenn es keine perfekte Kopie der Python-Konsolenausgabe ist. Dies kann mit vielen Editoren mithilfe der Regex-Option oder mithilfe anderer Tools ( sed
zum Beispiel) unter Unix durchgeführt werden.
Die führenden Stellen >>>
könnten den Python-Lexer jedoch immer noch durcheinander bringen. In diesem Fall könnten Sie diese löschen (Sie verlieren dadurch mehr Treue zum Original, aber es wird lesbar sein, da die Ausgabe wie Kommentare aussieht).
Antwort3
Ein kurzer Blick auf minted
die Dokumentation von lässt darauf schließen, dass das Paket diese Funktion nicht unterstützt. In jedem Fall scheint die Angabe bestimmter Zeilennummern ein wirklich hässlicher Ansatz zu sein.
Aber es verwendet pygmentize
als Back-End und die Zeilen, die Sie wollennichtIgnorieren entspricht einem sehr spezifischen Muster, sie beginnen alle mit >>>
und müssen daher leicht programmierbar zu erkennen und zu ignorieren sein.
Anschauendie Pygments-Dokumentation zum Schreiben Ihres eigenen Lexers, es scheint, dass Sie angeben können, dass Sie für einige Muster (reguläre Ausdrücke) die Zeichenfolge von einem anderen Lexer verarbeiten lassen möchten. Sie könnten dann die Zeilen verarbeiten, die nicht mit beginnen, und diejenigen, die damit beginnen (ohne das ), an den regulären Python-Lexer >>>
übergeben .>>>