Geprägter Fehler oder Missbrauch?

Geprägter Fehler oder Missbrauch?

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 ocamlin ä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

mintedVerwendetPygmenteum die eigentliche Hervorhebung durchzuführen, und dazu gehört escapeinside. Pygments Implementierung von escapeinsidekann seinunter Umständen zerbrechlich, und funktioniert nicht innerhalb von Zeichenfolgen oder Kommentaren.

In diesem prologFall fooisttokenisiert 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 ocamlFall fooals 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 prologLexer arbeitet.

verwandte Informationen