LaTeX软件包,用于以多种语言突出显示代码的语法


164

我正在寻找一个LaTeX软件包,该软件包对代码进行语法高亮显示。例如,现在我使用逐字记录块编写代码:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

这样可以很好地在我的文档上显示代码。但是,假设我想像IDE在输出文档中那样突出显示HTML标记?是否有可以帮助您的软件包?

我想对各种语言(例如Java,C#,HTML,CSS等)执行相同的操作。


4
我不满意lstlisting。它根本不会突出显示XML代码,并且在使用外来Unicode字符时会搞砸。看起来也不支持JavaScript。LGrind可以处理这样的事情吗?
webjunkie

Answers:


157

您可以使用列表包。它支持许多不同的语言,并且有许多用于定制输出的选项。

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
默认情况下,这是否做颜色?我在测试用法中没有看到彩色输出,也不确定这是我的错误,还是根本不是功能。
本森

12
我在这里找到了答案: tjansson.dk/?p=419。您可以简单地使用lstset命令为不同的属性设置各种样式。
本森

144

提出类似的问题后,我创建了另一个使用Pygments的程序包,并提供了许多其他选项texments。它被称为minted并且相当稳定且可用。

只是为了炫耀,下面是薄荷糖突出显示的代码:

范例程式码


这实际上是一项很好的工作。必须安装Pygments确实带来了一些挑战,但是我敢肯定大多数人会愿意这样做。
Vincent Ramdhanie,2010年

1
@Vincent:不幸的是,目前在Windows上安装Pygments更加复杂(用户必须调整PATH变量并创建cmd脚本)。我希望说服Pygments维护人员pygmentize随附.exe包装器,以简化此步骤。
康拉德·鲁道夫

1
在尝试了清单和薄荷糖/色素之后,我认为薄荷糖要好得多(更灵活)。但是,这将需要跳过十几个步骤,升级到MiKTeX 2.8,安装Python,安装其他组件等等。笨拙的文档很差,并且不支持长行。但是最终我得到了它以Eclipse颜色呈现Java / XML!jevon.org/wiki/Eclipse_Pygments_Style
jevon 2010年

@soundasleepful:铸造文档不断更新。;-)实际上,我发现它涉及面很广(当然我有偏见),但我很乐意解决任何投诉。就目前而言,“要求”部分确实很糟糕。
康拉德·鲁道夫

3
minted已在ShareLatex和Overleaf上安装并运行。节省安装Pygments的麻烦;)
grofte

21

我推荐Pygments。它接受任何语言的一段代码,并输出语法突出显示的LaTeX代码。它使用fancyvrb颜色包产生其输出。我个人比较喜欢上市包。我认为fancyvrb可以创造出更漂亮的结果。


1
尽管我很欣赏列表背后的宏观现象,但我也同意pygments具有优势:更好的突出显示,更容易的自定义,某种混合语法的能力以及输出到Latex以外的格式(例如HTML)的能力。
查尔斯·斯图尔特

beamer类型文档上,这显然是唯一的功能选项。既不使用minted也不listings正确编译beamer
路易·德·索萨

是的,我曾经使用listingsbeamer,但是您必须指定包含清单的框架为[fragile]
超常

11

LGrind为此。这是一个成熟的LaTeX软件包,自亚当(Adam)牛仔时代以来一直存在,并支持多种编程语言。


10

我将使用开发商Konrad Rudolph提到的铸造包装,而不使用清单包装。原因如下:

上市套餐

默认情况下,列表包不支持颜色。要使用的颜色,你将需要包括彩包和自己与定义颜色的规则\ lstset命令作为MATLAB代码解释这里

另外,清单包不适用于unicode,但您可以按照此处此处的说明解决这些问题。

以下代码

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

产生以下图像:

在此处输入图片说明

薄荷包装

铸造的包装支持颜色,unicode并看起来很棒。但是,要使用它,您需要具有python 2.6和pygments。在Ubuntu中,您可以使用以下命令在终端中检查python版本:

python --version

您可以使用安装pygments

sudo apt-get install python-pygments

然后,由于minted会调用pygments,因此需要使用-shell-escape进行编译,如下所示

pdflatex -shell-escape yourfile.tex

如果使用TexMaker之类的乳胶编辑器,我建议添加一个用户命令,以便您仍可以在编辑器中对其进行编译。

以下代码

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

产生以下图像:

在此处输入图片说明



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.