源代码在LaTeX中突出显示

我需要突出显示LaTeX中的源代码。 包listings似乎是大多数用例的最佳select,对我而言,这是迄今为止。

不过,现在我需要更多的灵活性。 一般来说,我正在寻找的是一个真正的词法分析器。 特别是,我需要(用于自己的语言定义)来定义(并突出显示!)自己的数字样式。 listings不允许在代码中突出显示数字。 但是,我需要产生这样的东西:

要求的结果

listings也不能应付string的任意分隔符。 考虑以下有效的Ruby代码:

 s = %q!this is a string.! 

在这里! 几乎可以被任何分隔符所替代。

(这个listings不能处理Unicode也很麻烦,但这是另一个问题。)

理想情况下,我正在寻找一个listings的扩展,使我能够提供更复杂的lexing规则。 但除此之外,我也在寻找可行的替代scheme。

其他线程已经build议使用可以产生LaTeX输出的Pygments 。 甚至还有一个软件包 – texments – 来缓解过渡。

但是,这很缺乏function。 特别是,我对listings式行编号,源代码行参考以及在源代码中embeddedLaTeX的可能性( listings选项texclmathescapemathescape

作为一个例子,下面是一个源代码排版,其中listings了一些替代品应该提供的东西:

乳胶上市的例子:侧身添加 [修改Bit Twiddling Hacks的“Sideways addition”]

把诺曼的忠告放在心上,我一起黑了一个解决scheme,使用( 修补 )Pygments突出显示并推入尽可能多的function,而不爆裂;-)

我还创build了一个LateX包,一旦我的Pygments补丁在1.2版本发布…

介绍铸造

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

看中乳胶的例子

这里有一个最小的文件来重现上面的代码(注意,包括Unicode字符可能需要XeTeX)!

 \documentclass[a4paper]{article} \usepackage{fontspec} \usepackage{minted} \setsansfont{Calibri} \setmonofont{Consolas} \begin{document} \renewcommand{\theFancyVerbLine}{ \sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}} \begin{minted}[mathescape, linenos, numbersep=5pt, gobble=2, frame=lines, framesep=2mm]{csharp} string title = "This is a Unicode π in the sky" /* Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter of an $n$-sided regular polygon circumscribing a circle of diameter $d$. */ const double pi = 3.1415926535 \end{minted} \end{document} 

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

 xelatex -shell-escape test.tex 

(但是铸造也适用于latexpdflatex …)

minted.sty类似于texments.sty但允许附加function。

如何得到它

  • 在CTAN ( 包信息 ) 上列出

  • 文档当然包括在内。

  • 现在由Geoffrey Poore维护。 包括最新的.sty文件在内的开发版本可以在github.com/gpoore/minted上find ,并且可以从那里克隆。

再一次感谢Norman激励我制作这个软件包。

TeX是(完美的)图灵完成的,但我相信你将不得不自己写这个扩展。 该文档清楚地表明,原始作者的listings在2004年将其孤立,并且自2006年以来没有更新过。该软件包没有被devise为覆盖数字文字的格式,但是您可以通过更改\lst@ProcessDigit的定义。 如果这不起作用,您将不得不详细了解“标识符样式”选项是如何工作的,而且您必须为数字文字复制该机器。

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

这是一个使用语法高亮将源代码转换为TeX和LaTeX的软件包。 可以轻松地添加自定义的编程语言定义。

Highlight支持100种编程语言,并包含50个颜色主题。 它具有代码重新格式化和缩进。

我没有用它来知道它是如何工作,但我知道的其他人说,它工作得很好。 如果我有机会,我会自己尝试一下,看看。