设置代码字体
listings
宏包的原作者觉得,不应该把字体的审美强加于用户,所以「裸用」lstlisting
环境列出代码,结果就是源代码会使用「正文字体」被显示出来。
很明显地,源代码使用了「正文字体」(看起来很像 Times New Roman Computer Modern Roman),虽然说是按字母对齐,但是极丑无比。这个「正文字体」本身是「比例字体」,也就是说每个字母宽度本来就是不一样的,例如 m
就会比较宽、i
就会比较窄。「比例字体」不适合用于源代码的抄录,所以强调了要设置「等宽字体」。
实话说,什么字体都不设置,直接在导言区写一句:\lstset{basicstyle=\ttfamily}
就是可以的。在这里面的 \ttfamily
就是在告诉 lstlisting
环境「给我用等宽字体来显示源代码」。
再次强调,\setmainfont
设置的是「正文字体」,main
对应「正文」,您都指定正文字体为 Courier 了,页眉页脚作为正文的一部分当然会变成 Courier 啊。想用 Courier,就要通过 \setmonofont
来声明,mono
对应「等宽」。注意两个命令的拼写是不一样的!
我在这里给出一个同时设置正文字体与等宽字体的例子。重要的事情重复三遍:用了 fontspec
之后,不要再用传统字体包!不要再用传统字体包!不要再用传统字体包!
1 | % 用 XeLaTeX 或 LuaLaTeX 编译 |
结果如下所示:
此处参考与鸣谢:
https://github.com/CTeX-org/forum/issues/7