如何让minted包渲染可复制缩进的代码块?
用肉眼看,minted(这是Konrad Rudolph开发的一个LaTeX包,用来高亮显示代码,依赖于Pygments库)可以忠实地展示传给它的代码块,保持源代码中的缩进格式。
但是,如果你尝试从这些代码块中复制粘贴代码,你会发现它们的可见缩进是用一些不能复制的空格实现的,这样粘贴出来的代码就会失去每行开头的空格。这对Python代码块特别麻烦,因为在Python中,缩进是代码的一部分,有实际意义。
所以,我的问题是:有没有办法让minted渲染的代码块在复制粘贴时,能够保留它们显示的源代码的缩进呢?
想了解我说的内容,可以查看minted手册中的几个缩进代码块(在这里找到),或者编译以下这个简单的可复现示例:
\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 个回答
3
在我的系统上,这个在Acrobat Reader里能正常工作,但在SumatraPDF和其他一些程序里可能就不行了。可能还有其他更好的解决办法。
\usepackage{color}
\usepackage{minted}
\newminted[python]{python}{frame=single}
\fvset{showspaces}
\renewcommand\FancyVerbSpace{\textcolor{white}{\char32}}
这段代码设置了fancyvrb
,这是Pygments用来格式化输出的工具,它会显示出可见的空格字符(␣
),然后通过把这些字符变成白色来让它们“看不见”。最终,这其实是个TeX的问题,因为Pygments在输出时使用了fancyvrb
这个包,而关键是让fancyvrb
生成可以复制的(前导)空格。