バグか誤用か?

バグか誤用か?

次のような生成されたコードを考えてみましょう。

\begin{minted}[escapeinside=||]{ocaml}
  foo |this is escaped| bar
\end{minted}

これは期待どおりに動作します。つまり、エスケープされたテキストは実際にエスケープされます。

ただし、言語を から に変更するとocamlprologエスケープされたテキストはエスケープされなくなります。

\begin{minted}[escapeinside=||]{prolog}
  foo |this is no longer escaped| bar
\end{minted}

これは minted のバグでしょうか、それとも minted パッケージを誤って使用したのでしょうか? いくつかのエスケープ文字を試しましたが、何もうまくいきませんでした。

答え1

minted用途ピグメント実際のハイライトを行うには が必要です。これには が含まれます。Pygmentescapeinsideの の実装はescapeinside状況によっては脆弱文字列やコメント内では機能しません。

この場合prologfooトークン化されたString.Atomなので、レクサーが最初の に到達したとき|、エスケープを開始するには間違ったモードになっています。対照的に、 のocaml場合、fooは としてトークン化されるNameため、レクサーは をエスケープとして解釈します。最終的に、これは Pygments が を実装する方法とレクサーが機能する方法|の間の相互作用に帰着します。escapeinsideprolog

関連情報