발행된 버그 또는 오용?

발행된 버그 또는 오용?

다음과 같은 생성된 코드를 고려하세요.

\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}

이것은 작성된 버그입니까, 아니면 제가 작성된 패키지를 오용한 것입니까? 여러 이스케이프 문자를 시도했지만 아무것도 효과가 없었습니다.

답변1

minted용도피그먼트실제 강조 표시를 수행하려면 여기에는 가 포함됩니다 escapeinside. Pygment의 구현은 escapeinside다음과 같습니다.어떤 상황에서는 취약하다, 문자열이나 주석 내에서는 작동하지 않습니다.

prolog경우 foo에는로 토큰화됨String.Atom, 따라서 어휘 분석기가 첫 번째 에 도달하면 |탈출을 시작하기 위한 잘못된 모드에 있는 것입니다. 대조적으로, 이 ocaml경우 에는 foo로 토큰화되므로 Name어휘분석기는 |이스케이프로 해석합니다. 궁극적으로 이는 Pygments가 구현하는 방식 escapeinside과 어휘 분석기가 작동하는 방식 사이의 상호 작용으로 귀결됩니다 prolog.

관련 정보