0%

LaTeX补充:如何设置代码字体

设置代码字体

listings 宏包的原作者觉得,不应该把字体的审美强加于用户,所以「裸用」lstlisting 环境列出代码,结果就是源代码会使用「正文字体」被显示出来。

很明显地,源代码使用了「正文字体」(看起来很像 Times New Roman Computer Modern Roman),虽然说是按字母对齐,但是极丑无比。这个「正文字体」本身是「比例字体」,也就是说每个字母宽度本来就是不一样的,例如 m 就会比较宽、i 就会比较窄。「比例字体」不适合用于源代码的抄录,所以强调了要设置「等宽字体」。

实话说,什么字体都不设置,直接在导言区写一句:\lstset{basicstyle=\ttfamily} 就是可以的。在这里面的 \ttfamily 就是在告诉 lstlisting 环境「给我用等宽字体来显示源代码」。

再次强调,\setmainfont 设置的是「正文字体」,main 对应「正文」,您都指定正文字体为 Courier 了,页眉页脚作为正文的一部分当然会变成 Courier 啊。想用 Courier,就要通过 \setmonofont 来声明,mono 对应「等宽」。注意两个命令的拼写是不一样的!

我在这里给出一个同时设置正文字体与等宽字体的例子。重要的事情重复三遍:用了 fontspec 之后,不要再用传统字体包!不要再用传统字体包!不要再用传统字体包!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
% 用 XeLaTeX 或 LuaLaTeX 编译
\documentclass{article}
\usepackage{fontspec}

% 以下设置正文字体为 Palatino 的克隆体
\setmainfont{TeX Gyre Pagella}
% 以下设置等宽字体为 Courier 的克隆体
\setmonofont{TeX Gyre Cursor}

\usepackage{listings}
% 以下告诉 lstlisting 环境:我要用等宽字体列代码!
\lstset{basicstyle=\ttfamily}

\begin{document}

\section{Hello, world!}

Hello, world! Would you like to see some code?
\begin{lstlisting}
Happy \LaTeX{}ing!
\end{lstlisting}
See? Mono-spaced font for code and proportional font for body text.

\end{document}

结果如下所示:

此处参考与鸣谢:

https://github.com/CTeX-org/forum/issues/7


感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章