使用 XeLaTeX 和 Pygments

使用 XeLaTeX 和 Pygments

我正在尝试使用 XeLaTeX 排版引擎和皮格门特斯语法高亮器。XeLaTex 使我能够使用操作系统可用的所有字体;Pygments 帮助我为代码着色。

我在 Pygments 生成的 LaTeX 文件中添加了以下两行。

\usepackage{fontspec}
\setmainfont{Monaco}

我原本期望看到最终的 PDF 文件带有 Monaco 字体的彩色代码,但没有看到。如何编辑 Pygments 生成的 latex 文件以指定我想要的字体?

摩纳哥字体如下所示:

在此处输入图片描述

但我得到了类似这样的信息(XeLaTex 生成的 PDF 文件的屏幕截图):

在此处输入图片描述


[此问题已解决,感谢@TorbjørnT 的评论。]

答案1

选择字体时,fontspec您必须针对不同的字体系列使用不同的命令,例如“普通”衬线字体、无衬线字体、等宽字体。典型的设置可能是

\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\setsansfont{Linux Biolinum O}
\setmonofont{Inconsolata}

这将使用Linux 自由人作为文档的标准衬线字体,Linux 生物基因作为无衬线字体,以及因科索拉塔作为等宽字体。

代码清单使用的字体系列是等宽字体\ttfamily,因此\setmonofont它会影响代码清单。因此,你应该使用

\setmonofont{Monaco}

一个小附录:如果你要写一个包含多个列表的文档,你可以考虑使用minted包,它使用 Pygments。(另一个提供语法高亮代码列表的包是listings

而不是由

pygmentize -f latex -O full -l python code.py > code.tex

你可以拥有如下文件

\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{python}
def(hallais):
     print("Hello TeX.sx!")
\end{minted}
\end{document}

或者你可以输入一个包含代码的文件来代替minted环境,例如

 \inputminted[linenos=true]{python}{demo.py}

这需要在启用的情况下进行编译-shell-escape例如

xelatex -shell-escape filename.tex

请参阅minted手册以了解更多详细信息。

相关内容