
Betrachten Sie den folgenden geprägten Code:
\begin{minted}[escapeinside=||]{ocaml}
foo |this is escaped| bar
\end{minted}
Das funktioniert wie erwartet, d. h. der maskierte Text wird tatsächlich maskiert.
Wenn wir jedoch die Sprache von ocaml
in ändern prolog
, wird der maskierte Text nicht mehr maskiert:
\begin{minted}[escapeinside=||]{prolog}
foo |this is no longer escaped| bar
\end{minted}
Ist das ein Minted-Fehler oder habe ich das Minted-Paket falsch verwendet? Ich habe mehrere Escape-Zeichen ausprobiert, aber nichts hat funktioniert.
Antwort1
minted
VerwendetPygmenteum die eigentliche Hervorhebung durchzuführen, und dazu gehört escapeinside
. Pygments Implementierung von escapeinside
kann seinunter Umständen zerbrechlich, und funktioniert nicht innerhalb von Zeichenfolgen oder Kommentaren.
In diesem prolog
Fall foo
isttokenisiert alsString.Atom
, wenn der Lexer also das erste erreicht |
, ist er im falschen Modus, um einen Escape zu starten. Im Gegensatz dazu wird in diesem ocaml
Fall foo
als tokenisiert Name
, sodass der Lexer es als Escape interpretiert |
. Letztendlich läuft dies auf eine Interaktion zwischen der Art und Weise hinaus, wie Pygments implementiert escapeinside
, und der Art und Weise, wie der prolog
Lexer arbeitet.