如何获得 minted 包以呈现具有可复制缩进的代码块?
Posted
技术标签:
【中文标题】如何获得 minted 包以呈现具有可复制缩进的代码块?【英文标题】:How can I get the minted package to render code blocks with copyable indentation? 【发布时间】:2014-06-10 17:33:38 【问题描述】:肉眼看来,minted(Konrad Rudolph 的 LaTeX 包,用于使用 Pygments 库突出显示代码)忠实地呈现传递给它的代码块,并以源代码中包含的任何缩进显示它们。
但是,如果您尝试从其中一个块中复制和粘贴代码,您会注意到它们的可见缩进是使用不可复制实现的 空格,这样粘贴的代码就会丢失每一行的前导空格。这是 Python 代码块尤其成问题,因为在 Python 缩进作为代码的一部分具有实际意义。
所以,这是我的问题:有没有办法让 minted 呈现代码块,当 复制粘贴,保留他们显示的源代码的缩进?
有关我的意思的示例,请参阅中的几个缩进代码块中的任何一个 minted 手册 (found here),或编译 以下最小的可重现示例:
\documentclassarticle
\usepackageminted
\newminted[python]pythonframe=single
\begindocument
\beginpython
def example1():
if verbose:
print 'Running example1'
verbose = True
example1()
\endpython
\enddocument
【问题讨论】:
相关:tex.stackexchange.com/questions/148144/… @G.Poore 谢谢,但据我所知,这对我的 minted 没有帮助,我想要它的代码突出显示。 (我只是尝试从接受的答案中复制所有相关代码到您链接到我的序言中的问题(加上低于\begindocument
的位),这对输出没有任何影响。)我怀疑(?)这个是 Pygments 的一个问题,这就是为什么我选择在这里发帖而不是 tex.stackexchange.com ....
【参考方案1】:
这在 Acrobat Reader 中有效,至少在我的系统上有效,但在 SumatraPDF 和其他一些程序中无效。可能还有其他更好的解决方案。
\usepackagecolor
\usepackageminted
\newminted[python]pythonframe=single
\fvsetshowspaces
\renewcommand\FancyVerbSpace\textcolorwhite\char32
这会将 Pygments 用于格式化输出的 fancyvrb
设置为使用可见的空格字符 (␣
),然后通过将字符设置为白色来使它们“不可见”。最终,这确实是一个 TeX 问题,因为 Pygments 使用 fancyvrb
包作为其输出,诀窍是让 fancyvrb
创建(前导)可以复制的空格。
【讨论】:
超级!多么聪明。我想我应该在链接上尝试大卫卡莱尔的解决方案,但看到“白色可见空间”并错误地认为它们在复制和粘贴时会被复制为可见的东西。我会暂时推迟“接受”,以防万一你说,还有另一个更好的解决方案。以上是关于如何获得 minted 包以呈现具有可复制缩进的代码块?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - iOS 9:如何在 iOS 9 中呈现具有自定义大小的 UIViewController? [复制]