발행된 환경을 따르는 항목으로 인해 오류가 발생합니다.

발행된 환경을 따르는 항목으로 인해 오류가 발생합니다.

다음 코드를 고려해보세요.

\documentclass{article}
\usepackage{minted}

\begin{document}
\begin{minted}{python}
a = 0
\end{minted} % this comment is a problem
\end{document}

다음 오류가 발생합니다.

! FancyVerb Error:
  Extraneous input ` % this comment is a problem\end{}' between \end{minted} and line end

주석을 다음 줄로 이동하면 오류가 해결됩니다. . 다음에 공백을 제외하고는 같은 줄에 있을 수 없는 것 같습니다 \end{minted}. 에서 정의한 환경의 경우에도 마찬가지입니다 \newminted. verbatim반면에 환경에서는 같은 줄을 따르는 코드에 문제가 없는 것 같습니다 .

나는 작성된 문서에서 이 동작이 설명되는 것을 본 적이 없습니다.

\end{minted}같은 줄에 아무 것도 따라올 수 없다는 것이 문제가 무엇인지 설명할 수 있는 사람이 있습니까 ?

답변1

패키지 는 축어적 환경을 위해 내부적으로 패키지를 minted사용하며 ( 예를 들어 매뉴얼의 13페이지 참조) 해당 패키지를 대신 사용할 때 오류가 이미 존재합니다(또한 오류 메시지에서 알 수 있듯이 실제로는 자체 가 아닌 에 의해 출력되므로 내가 생각하는 문서 에 없는 이유는 무엇입니까 ? 이 코드는 동일한 오류를 생성합니다.fancyvrbmintedFancyVerbmintedminted

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}

\begin{Verbatim}
   This is verbatim code
\end{Verbatim}%

\end{document}

오류의 원인을 추적하려면 다음을 수행하십시오.

Verbatim 환경은 내용을 한 줄씩 스캔합니다. 설명서의 섹션 12.10을 참조하세요 fancyvrb.라인별 스캐닝. 그리고 실제로 이것이 바로 이 오류의 정의를 만나는 지점입니다. \FV@BadEndError, 적절한 이름의 \FancyVerbGetLine명령에 의해 발생합니다.

이 명령은 fancyvrb 소스 코드에서 다음 줄을 \FancyVerbGetLine호출합니다 .\FV@BadEndError

\ifx\@tempa\FV@EnvironName%            % True if end is found
  \ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%

이것을 더 뒤로 추적하면 섹션에 도달합니다.12.9 확인 종료fancyvrb 매뉴얼에는 다음과 같이 적혀 있습니다:

\end{}각 줄의 첫 번째 인수를 확인하고 와 비교하여 일치하면 반환하고 그렇지 않으면 \FV@EnvironName반환해야 합니다 .\iftrue\iffalse

문제는 이 시점에서는 \@tempb가 되어야 하는데 \end{}지금은 이라는 것입니다 %\end{}. 따라서 두 번째 \ifxfalse이고 오류가 발생합니다( \@tempa이전 줄은 Verbatimbtw입니다.).

결국, 이거의최소한 내가 알 수 있는 한 간단한 문자열 비교에 해당합니다( ' 인수를 fancyvrb테스트 할 뿐만 \end{}아니라 해당 줄에 다른 항목이 없는지도 테스트합니다). 줄: 실제로는 제거되어 넘어지지 않습니다. (소스 코드를 약간 해킹하여 출력하는 경우 \ifx내용을 보고 테스트할 수 있습니다 . 공백이 없습니다.)\@tempbfancyvrb

관련 정보