遵循薄荷環境的東西會導致錯誤

遵循薄荷環境的東西會導致錯誤

考慮以下程式碼:

\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}。對於 定義的環境也是如此\newmintedverbatim另一方面,環境似乎不存在同一行上的程式碼問題。

我還沒有看到鑄造文件中描述了這種行為。

任何人都可以解釋問題是什麼,\end{minted}同一行上的 a 後面不能有任何內容?

答案1

minted包使用fancyvrb引擎蓋下的包作為其逐字環境(minted例如,請參閱手冊中的第13 頁),並且當您使用該包時,錯誤已經存在(而且,正如錯誤訊息所示,它實際上給出了出自FancyVerb,而不是minted其本身;因此我認為它不在minted文檔中)。此程式碼將產生相同的錯誤:

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

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

\end{document}

如果我們想追蹤錯誤的根源:

Verbatim 環境逐行掃描其內容,請參閱fancyvrb文件的第 12.10 節,逐行掃描。事實上,這就是我們遇到這個錯誤的定義的地方。\FV@BadEndError,由適當命名的命令拋出\FancyVerbGetLine

\FancyVerbGetLine指令呼叫\FV@BadEndErrorfancyvrb 原始碼中的這一行:

\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{}s 參數,而且還測試該行上是否沒有其他內容),除了忽略空格之外該行:確實被剝奪了,因此不會絆倒\ifx(可以透過查看內容進行測試,\@tempb如果您fancyvrb稍微修改原始程式碼以輸出該內容;它不包含空格)。

相關內容