如果代码不适合一页,minted 会截断代码

如果代码不适合一页,minted 会截断代码

minted当代码片段很短或适合一页时,效果很好。当我粘贴一个包含几百行的代码片段时,就会出现问题。有时它可以处理,但输出被截断;有时它会产生一堆错误。如果我把它分成几页,每页的字符数就很重要了,也就是说,它可能会在后面产生一个空白页\end{minted}。例如:

....
\begin{minted}[bgcolor=bg,mathescape]{c++}
code here
\end{minted}
... -> a blank page sometimes appear
\begin{minted}[bgcolor=bg,mathescape]{c++}
code here
\end{minted}
....

有人遇到过这种尴尬的minted包裹行为吗?任何想法或建议都将不胜感激。谢谢。

答案1

不幸的是,这种行为由于已知错误。更糟糕的是,我不知道如何修复它。

从长远来看,我计划彻底放弃这个fancyvrb包,因为严格来说,它minted不需要逐字功能——LaTeX 序列无论如何都会被转义。这将带来更多的灵活性。

但就目前而言,不幸的是这不是一个微不足道的改变。如果你想亲自动手,你可以尝试\letting\Verbatim\endVerbatimto \relax,然后稍微修修补补,让渲染再次正确。免责声明:我还没有尝试过这个。

答案2

通过 mdframed 包可以防止 minted 包在截断代码方面的不良行为。例如:

\begin{mdframed}[linecolor=black, topline=true, bottomline=true,
  leftline=false, rightline=false, backgroundcolor=yellow!20!white]
    \begin{minted}[mathescape]{c++}
        int main()
            {
                bla bla...
            }
    \end{minted}
\end{mdframed}

显然,你应该在序言中加载 mdframed 包,只需通过\usepackage{mdframed}并最终使用全局选项即可。更好的是,无需粘贴:

\begin{mdframed}[linecolor=black, topline=true, bottomline=true,
  leftline=false, rightline=false, backgroundcolor=yellow!20!white]
    \inputminted[fontsize=\scriptsize, linenos, frame=lines]{c++}{path/to/your/code.cpp}
\end{mdframed}

相关内容