我需要在 LaTeX 中突出显示源代码。包 listings
似乎是大多数用例的最佳选择,对我来说,直到现在都是如此。
但是,现在我需要更多的灵 active 。一般来说,我正在寻找的是一个真正的词法分析器。特别是,我需要(对于自己的语言定义)定义(并突出显示!)自己的数字样式。 listings
不允许在代码中突出显示数字。但是,我需要制作这样的东西:
listings
也无法处理字符串的任意分隔符。考虑以下有效的 Ruby 代码:
s = %q!this is a string.!
这里,!
几乎可以被任何分隔符替换。
(listings
无法处理 Unicode 这也很令人烦恼,但那是另一个问题了。)
理想情况下,我正在寻找 listings
的扩展,它允许我提供更复杂的词法规则。但除此之外,我也在寻找可行的替代方案。
Other threads建议使用 Pygments它可以产生 LaTeX 输出。甚至还有一个包裹 – texments
– 简化过渡。
但是,这非常缺乏功能。我特别对 listings
式行编号、源代码行引用以及在源代码中嵌入 LaTeX 的可能性(选项 texcl
和 mathescape
在 list
中)。
作为一个例子,这里有一个带有 listings
的源代码排版,其中显示了替代品还应该提供的一些内容:
[“横向加法”修改自 Bit Twiddling Hacks]
最佳答案
将 Norman 的建议牢记于心,我编写了一个解决方案,该解决方案使用(patched)Pygments 进行突出显示,并在不破裂的情况下引入尽可能多的功能;-)
我的 Pygments 补丁发布于 version 1.2 后,我还创建了一个 LateX 包。 ...
呈现类型转换
<强> 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
(但是minted也可以与latex
和pdflatex
一起使用......)
minted.sty
的工作方式与 texments.sty
类似,但允许附加功能。
如何获取
类型转换是 listed on CTAN (package info)
文档当然包括在内。
minted 现在由 Geoffrey Poore 维护。开发版本,包括最新的
.sty
file ,可通过 github.com/gpoore/minted 获取,并且可以从那里克隆。
再次感谢 Norman 激励我制作这个包。
关于latex - LaTeX 中的源代码高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966425/