LaTeX中的源代码高亮显示

LaTeX中的源代码高亮显示,latex,syntax-highlighting,pygments,Latex,Syntax Highlighting,Pygments,我需要强调LaTeX中的源代码。包清单似乎是大多数用例的最佳选择,对我来说,直到现在都是如此 然而,现在我需要更多的灵活性。一般来说,我要找的是一个真正的lexer。特别是,我需要(为自己的语言定义)定义(并突出显示!)自己的数字样式列表不允许在代码中突出显示数字。但是,我需要制作如下内容: 清单也无法处理字符串的任意分隔符。考虑下面的有效红宝石代码: s = %q!this is a string.! 这里,几乎可以被任何分隔符替换 (清单无法处理Unicode也很麻烦,但这是另一个问题。

我需要强调LaTeX中的源代码。包
清单
似乎是大多数用例的最佳选择,对我来说,直到现在都是如此

然而,现在我需要更多的灵活性。一般来说,我要找的是一个真正的lexer。特别是,我需要(为自己的语言定义)定义(并突出显示!)自己的数字样式<代码>列表不允许在代码中突出显示数字。但是,我需要制作如下内容:

清单
也无法处理字符串的任意分隔符。考虑下面的有效红宝石代码:

s = %q!this is a string.!
这里,
几乎可以被任何分隔符替换

(清单无法处理Unicode也很麻烦,但这是另一个问题。)

理想情况下,我正在寻找
清单
的扩展,它允许我提供更复杂的词法规则。但除此之外,我还在寻找可行的替代方案。

建议使用能产生乳胶产量的产品。甚至还有一个一揽子计划——以简化过渡

然而,这非常缺乏功能。特别是,我对
清单
样式的行编号、源代码行引用以及在源代码中嵌入LaTeX的可能性(选项
texcl
mathescape
清单
中)

例如,下面是一个带有
列表的源代码排版,其中显示了替换程序还应提供的一些功能:

[“Sideways addition”由比特旋转黑客修改]

是一个包,它将源代码转换为TeX和LaTeX,并带有语法高亮显示。可以轻松添加自定义编程语言定义

Highlight支持100种编程语言,包括50种颜色主题。它的特点是代码重新格式化和缩进

我还没有用它来了解它的工作原理,但我认识的另一个人说它工作得很好。如果有机会的话,我会自己试试看。

TeX(著名的)图灵完全,但我很确定你必须自己编写这个扩展。文档清楚地表明,
清单
的原始作者在2004年将其孤立,并且自2006年以来一直没有更新过。该包的设计目的不是覆盖数字文本的格式,但您可以通过更改
\lst@ProcessDigit
。如果这不起作用,您必须详细了解“标识符样式”选项是如何工作的,并且必须为您的数字文本复制该机制


我不太明白为什么你这么不愿意在你的工具链中引入一个外部工具,但是因为你是,你必须做额外的工作。在看了源代码之后,我希望修改
列表应该是可能的,但我个人会选择预处理我的LaTeX。

牢记诺曼的建议,我已经拼凑出一个解决方案,使用(a)Pygments高亮显示,并在不爆裂的情况下尽可能多地插入功能;-)

我还创建了一个LateX包,在我的Pygments补丁发布后

赠送铸币 是一个使用Pygments在LaTeX中提供顶级语法高亮显示的软件包。例如,它允许以下输出

这里有一个复制上述代码的最小文件(注意,包含Unicode字符可能需要XeTeX)

可使用以下命令进行排版:

xelatex -shell-escape test.tex
(但minted也适用于
乳胶
pdflatex
。)

minted.sty
的工作原理类似于
texments.sty
,但允许附加功能

如何得到它
  • 造币厂是()

  • 文档当然包括在内

  • 铸币厂现在由杰弗里·普雷(Geoffrey Poore)负责维护。开发版本(包括最新版本)可从中获得,并可从中克隆


再次感谢诺曼激励我制作这个软件包。

highlight
分享了Pygments的所有问题。特别是,它不是乳胶包装,不管它的描述如何。它只是一个独立的程序。与Pygments一样,问题在于如何从LaTeX内部有意义地使用它,并提供
清单
所具备的所有优秀功能。我一点也不不愿意引入外部工具——事实上,我认为使用Pygments可能是最好的解决方案。问题是如何以一种聪明的方式做到这一点,这样我仍然可以在代码中转义到LaTeX和
\label
。我的TeX技术远没有达到这个水平。到目前为止,我只使用过TeX的LaTeX子集。我想说,引入外部工具的最大问题是,如果您正在发布。许多期刊出版商(咳嗽、斯普林格和其他人)要求提交原始乳胶,然后在他们的服务器上编译。不用说,如果你的第三方工具不在他们的服务器上,你就是SOL,除非你进行了预处理(这破坏了让Tex驱动的大多数实用程序)。如果文档正确,列表包仍会得到维护-但是维护者更改了,并且它收到了错误修复:@Namey,只是一个数据点:我刚刚成功地通过Springer的LNCS publishing-process使用了
minted
。如果您不愿意引入pygments等外部工具,那么为什么不为您的文档编写一个makefile?这不应该迁移到?^^^@Matthia不确定。当我发布它的时候,没有tex.se,但现在它在这里似乎很有用——这个问题在网上引起了巨大的反响
xelatex -shell-escape test.tex