答案1
截至 2013 年 3 月的比较(见下文更新)
我对所有使用 Pygments 的常见包都比较熟悉。作为编写我的pythontex
包,我研究了以前所做的事情。
texments
非常基础。它不提供对 Pygments 或fancyvrb
的大部分功能的访问。minted
提供对 Pygments 和 的更完整的访问fancyvrb
,并添加了背景颜色等附加功能。verbments
比 更新minted
,这可能解释了为什么它似乎不那么受欢迎。verbments
文档说“该minted
包无法将突出显示的源代码拆分到页面上”。从技术上讲,minted
可以很好地做到这一点——问题在于提供的listing
浮动minted
。(编辑:使用背景色时也会出现分页问题,但可以通过不使用包的bgcolor
选项并使用mdframed
或类似的包来克服这些问题。)verbments
解决方案是允许列出编号和标题——但不提供真实的浮动(这必须解决分页符问题)。verbments
还提供了单独的突出显示样式(您可以为每个环境使用不同的 Pygments 样式)和一些minted
缺少的附加选项。pygmentex
是另一个 Pygments 包(2012-02-12)。它包括 Pygments 的自定义补丁,允许在任何地方转为 LaTeX。这很好,但随着 Pygments 的不断发展,也可能使维护变得困难。(该功能已被请求自 2010 年初以来,Pygments 一直仍然open.)pygmentex
提供了一个内联命令。并且它缓存了输出。最后,这是我的
pythontex
软件包。(首次发布于 2012/04/27,但前一年已开始开发。)其主要目的是允许将 Python 代码包含在 LaTeX 文档中,并能执行代码并返回输出。添加 Pygments 突出显示实际上是事后才想到的。pythontex
提供 的大部分minted
功能,除了背景颜色等少数功能(因为可以使用 等软件包轻松添加这些功能mdframed
)。它使用我已经创建的机制来缓存已执行代码的输出,从而缓存所有突出显示的内容。它还提供内联命令,允许在同一语言的环境之间自动延续行号,并允许fancyvrb
基于每种语言进行设置。pdfTeX 引擎支持 Unicode。
因此,这给我们留下了许多 Pygments 突出显示选项。缓存对于性能非常重要,但缺点是我的方法和方法都pygmentex
需要编译(将代码保存到辅助文件)、运行 Python 脚本(使用 Pygments 进行突出显示,然后保存输出)和第二次编译(带回突出显示的输出)。其他\write18
软件包使用的方法的一个真正优点是突出显示始终是最新的,只需要一次编译。使用 LuaTeX 缓存并保持所有内容最新可能并不难。否则,我会考虑\pdfmdfivesum
(可能使用临时文件),但我不相信 XeTeX 有等效方法。可能没有一个好的跨引擎替代方案来替代这三个步骤。
pythontex
正在积极开发中,在可预见的未来应该会继续提供 Pygments 突出显示功能。虽然重点是访问 Python,但我正在进行重大重构,应该允许将包扩展到任意语言,每个扩展只需要几十行代码。所有这些的缺点是它pythontex
不像仅突出显示的包那样灵活。
编辑:与 Konrad Rudolph 通信后,我决定保留minted
。开发将在https://github.com/gpoore/minted。
2016 年 7 月更新
截至 2016 年中,minted
这通常是最佳选择,除非您需要pythontex
其他软件包中的特定功能。
自 2013 年以来,texments
并且verbments
至少在 CTAN 上保持不变。 pygmentex
已于 2015 年 5 月更新;基于提交历史,看上去并没有什么重大的变化。
自接手minted
开发以来,我已经添加了几个主要功能。
缓存。
minted
在一次编译中执行所有突出显示,缓存突出显示的代码以供将来运行。只要文件.aux
未被删除,缓存就会自动清除。缓存可以“冻结”以供在-shell-escape
不可用的情况下使用(minted
在这种情况下,许多相关内容不应编辑,因为无法更新缓存)。内联代码的命令
\mintinline
。使用 pdfTeX 提供 Unicode 支持。
使用 Pygments 2.0+ 中的选项任意转义为 LaTeX
escapeinside
(但请注意,这可能很脆弱取决于 Pygments 如何标记)。在空格处、所有字符之间、用户指定字符之前或之后、空格分隔的标记之间或所有标记之间自动换行。
bgcolor
与分页符兼容。
我最近将大部分换行代码和一些额外的扩展分离到fancyvrb
一个名为的新包中fvextra
minted
。和的下一个版本pythontex
都需要fvextra
;这些版本将在 2016 年 7 月底之前在 CTAN 上发布。这将保留minted
和pythontex
的大部分相同功能,尽管在不久的将来minted
仍将具有bgcolor
基于标记的换行符和一些 Pygments 选项的优势。 pythontex
在某些情况下可能仍然具有速度优势,主要是在编译之间修改了大量突出显示的代码时,但这通常应该是最小的。
答案2
目前状态:minted
维护工作已移交给 Geoffrey Poore。
我尝试修复尽可能多的错误,但有两件事阻碍了我:minted
目前基本上没有得到维护。
- 我再也没有时间从事副业了。这很不幸。事实上,我开发 minted 主要是为了我自己的硕士论文,但最终没有在那里使用它,因为有些繁琐的事情还没有解决。
- 许多有趣的变化,其中最重要的两个(内联代码突出显示,通过缓存和变化跟踪提高性能)理想情况下需要在上游 Pygments 代码库中进行更改,到目前为止,这些更改(已作为补丁提交给 Pygments)尚未集成。
我不知道如何(如果)verbments
解决这个限制——也许他们正在维护自己的 Pygments 项目分支,并不关心兼容性,或者他们在 LaTeX 本身中执行一些有趣的解析工作。无论如何,我都对这种努力表示赞赏。我更希望他们在它的基础上进行构建minted
(以避免重复工作和让几个项目做同样的事情),但我也开始了自己的包,而不是在它的基础上构建,texments
所以我理解这背后的动机。