Ошибка или неправильное использование?

Ошибка или неправильное использование?

Рассмотрим следующий отчеканенный код:

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

что работает так, как и ожидалось, т.е. экранированный текст действительно экранируется.

Однако если мы изменим язык с ocamlна prolog, то экранированный текст больше не будет экранированным:

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

Это баг minted или я неправильно использовал пакет minted? Я пробовал несколько экранирующих символов, но ничего не вышло.

решение1

mintedиспользуетПигментыдля выполнения фактического выделения, и это включает в себя escapeinside. Реализация Pygment escapeinsideможет бытьхрупкий в некоторых обстоятельствах, и не работает внутри строк или комментариев.

В данном prologслучае fooэтотокенизирован какString.Atom, поэтому, когда лексер достигает первого |, он находится в неправильном режиме для начала побега. Напротив, в случае ocamlтокенизирован fooкак Name, поэтому лексер интерпретирует |как побег. В конечном итоге это сводится к взаимодействию между способом, которым Pygments реализует escapeinside, и способом, которым prologработает лексер.

Связанный контент