latex - LaTeX 中的源代码高亮显示

标签 latex syntax-highlighting pygments

我需要在 LaTeX 中突出显示源代码。包 listings 似乎是大多数用例的最佳选择,对我来说,直到现在都是如此。

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

Required result

listings 也无法处理字符串的任意分隔符。考虑以下有效的 Ruby 代码:

s = %q!this is a string.!

这里,! 几乎可以被任何分隔符替换。

(listings 无法处理 Unicode 这也很令人烦恼,但那是另一个问题了。)

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

Other threads建议使用 Pygments它可以产生 LaTeX 输出。甚至还有一个包裹 – texments – 简化过渡。

但是,这非常缺乏功能。我特别对 listings 式行编号、源代码行引用以及在源代码中嵌入 LaTeX 的可能性(选项 texclmathescape list 中)。

作为一个例子,这里有一个带有 listings 的源代码排版,其中显示了替代品还应该提供的一些内容:

LaTeX listings example: Sideways addition [“横向加法”修改自 Bit Twiddling Hacks]

最佳答案

将 Norman 的建议牢记于心,我编写了一个解决方案,该解决方案使用(patched)Pygments 进行突出显示,并在不破裂的情况下引入尽可能多的功能;-)

我的 Pygments 补丁发布于 version 1.2 后,我还创建了一个 LateX 包。 ...

呈现类型转换

<强> minted 是一个使用 Pygments 在 LaTeX 中提供一流语法突出显示的包。例如,它允许以下输出。

fancy LaTeX example

这是一个重现上述代码的最小文件(请注意,包含 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也可以与latexpdflatex一起使用......)

minted.sty 的工作方式与 texments.sty 类似,但允许附加功能。

如何获取

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

关于latex - LaTeX 中的源代码高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966425/

相关文章:

linux - 如何执行自动 Unix 输入?

latex - pandoc LaTex 改变`反引号高亮

c# - Visual Studio 2010 更好的 C# 语法着色?

Python Pygments 颜色错误

python - Pygments 的语法突出显示因 Liquid 模板字符串错误而失败

Eclipse 项目资源管理器为 latex 项目名称添加前缀 "P/"

python - iPython 笔记本输出 latex 或 mathjax

objective-c - Cocoa 应用程序的语法着色

syntax-highlighting - 在 Sublime 2/3 中更改/添加语言的语法突出显示

ubuntu - Pygmentize : No formatter found for name 'javascript'