源代码在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
选项texcl
和mathescape
) mathescape
。
作为一个例子,下面是一个源代码排版,其中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
(但是铸造也适用于latex
和pdflatex
…)
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个颜色主题。 它具有代码重新格式化和缩进。
我没有用它来知道它是如何工作,但我知道的其他人说,它工作得很好。 如果我有机会,我会自己尝试一下,看看。