다음 코드를 고려해보세요.
\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페이지 참조) 해당 패키지를 대신 사용할 때 오류가 이미 존재합니다(또한 오류 메시지에서 알 수 있듯이 실제로는 자체 가 아닌 에 의해 출력되므로 내가 생각하는 문서 에 없는 이유는 무엇입니까 ? 이 코드는 동일한 오류를 생성합니다.fancyvrb
minted
FancyVerb
minted
minted
\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{}
. 따라서 두 번째 \ifx
는 false
이고 오류가 발생합니다( \@tempa
이전 줄은 Verbatim
btw입니다.).
결국, 이거의최소한 내가 알 수 있는 한 간단한 문자열 비교에 해당합니다( ' 인수를 fancyvrb
테스트 할 뿐만 \end{}
아니라 해당 줄에 다른 항목이 없는지도 테스트합니다). 줄: 실제로는 제거되어 넘어지지 않습니다. (소스 코드를 약간 해킹하여 출력하는 경우 \ifx
내용을 보고 테스트할 수 있습니다 . 공백이 없습니다.)\@tempb
fancyvrb