如何让minted包呈现具有可复制缩进的代码块?

时间:2014-06-10 17:33:39

标签: python latex pygments

肉眼看来,minted(Konrad Rudolph的LaTeX包用于使用Pygments库进行代码突出显示)忠实地呈现传递给它的代码块,并使用源代码中包含的任何缩进显示它们。

但是,如果您尝试从其中一个块复制并粘贴代码,您会注意到它们的可见缩进是使用不可复制的 空格,使粘贴的代码丢失每一行的前导空格。这是 Python代码块特别有问题,因为在Python中 缩进作为代码的一部分具有实际意义。

所以,这是我的问题:有没有办法让铸造来渲染代码块, 复制粘贴,保留它们显示的源代码的缩进?

有关我的意思的示例,请参阅中的任何几个缩进代码块 铸造手册(found here)或编译 以下minimal-ish可重复的例子:

\documentclass{article}

\usepackage{minted}
\newminted[python]{python}{frame=single}

\begin{document}

\begin{python}
def example1():
    if verbose:
        print 'Running example1'

verbose = True
example1()
\end{python}

\end{document}

1 个答案:

答案 0 :(得分:2)

这适用于Acrobat Reader,至少在我的系统上,但不适用于SumatraPDF和其他一些程序。可能还有其他更好的解决方案。

\usepackage{color}
\usepackage{minted}
\newminted[python]{python}{frame=single}
\fvset{showspaces}
\renewcommand\FancyVerbSpace{\textcolor{white}{\char32}}

这将Pygments用于格式化输出的fancyvrb设置为使用可见空格字符(),然后通过将其设为白色来使字符“不可见”。最终,这最终成为一个TeX问题,因为Pygments正在使用fancyvrb包来输出,而诀窍是让fancyvrb创建(领先)可以复制的空格。