100 研究生数学建模比赛论文 LaTeX 模板关于 LiSu 字体缺失的解决方案

发布于 2024-09-19 22:15:11

以 LaTeXStudio 的 GMCMthesis 为准,麻烦 E 老师记录一下.

查看更多

关注者
0
被浏览
639
Sagittarius Rover
Sagittarius Rover 2024-09-20
我要成为TikZ糕手/(ㄒoㄒ)/~~

公元2024年9月19号下午,华夏某LaTeX交流群出现了因建模比赛将近而GMCMthesis模板在overleaf上编译出现字体LiSu字体缺失的问题,引起激烈的讨论,下面就此问题进行记录(下面的问题将集中在隶书字体)。

首先介绍本地环境中在powershell终端使用fc-list命令可以获取本机当前为所有用户安装的字体列表,如下图所示(如果终端的字符编码不是utf-8还可能需要通过借助chcp 65001命令切换终端编码样式或者修改终端的字体来保证中文正常显示,我的设备还是会中文乱码,因此我也很苦恼...)

image.png

由于个人比较喜欢折腾,这里也贴出常见的几种fc-list命令的附加命令(特别感谢Osbert Wang)感兴趣的朋友可以试试他们的使用效果。

# 以完整格式输出中文字体并在终端输出
fc-list :lang=zh-cn
# 以完整格式输出英文字体并保存在当前路径下的enfonts.txt文件中
fc-list :lang=en > enfonts.txt
# 只输出字族,达到使用\setmainfont的使用需求
fc-list :lang=zh-cn family
# 使用--format选项格式化输出fc-list的结果
fc-list :lang=zh --format="%{family[0]}\n" | sort
fc-list :lang=zh --format="%{family[0]},%{family[1]}\n"
# 使用功能更强的终端如powershell可以实现去重/排序等功能
fc-list :lang=zh --format="%{family[0]},%{family[1]}\n" | Sort-Object | Get-Unique | Out-File zhfont.txt -Encoding default

在这里还必须提到,对于已经安装的字体,TeX引擎会通过其字体族(font family)的名称来调用;而对于只提供字体文件(.otf,.ttf)的字体,TeX会优先搜索当前工作路径下的字体文件并进行调用,这样的好处是避免操作系统安装的字体过多过于复杂(具体的例子可见下图,特别感谢Eureka大神提供的开源仓库 All about TeX 走过路过可以点一个star)。

image.png

P.S. 我本人对字体的使用问题完全可以说是七窍通了六窍,在LaTeX(尤其是模板)的使用中字体的配置问题由于各种系统的差异以及版权问题往往是令人头疼的,此处仅提供在不同平台下编译效果的实际测试与经验汇总。

作为后文介绍的前置知识,我们还应该知道GMCMthesis实际上调用的文档类是ctex宏包提供的ctexart文档类,其文档中对不同系统的字体调用情况说明如下图:
image.png
image.png
image.png

-------前面都是一些为了内容完整性的(废话)------这是一条分割线-----

本文将从使用四种测试环境,测试的代码使用从GMCMthesis-github拉取的example.tex文件为准。

  • 本地编译环境(windows11+TeXLive2024)

    • 在没有安装过LiSu字体的情况(比如一台刚刚装过windows11系统的干干净净的电脑)下,LiSu这一字体是一点点小问题的(见下图,但是警告不是错误,可以忽略),但不影响使用xelatex编译example.tex顺利通过。
    • 如果系统安装过LiSu字体,也即使用fc-list :lang=zh | findstr "LiSu"可以检索到隶书字体C:/Windows/fonts/SIMLI.TTF: LiSu,隶书:style=Regular时,使用xelatex编译example.tex模板是完美编译的。

image.png

  • 本地编译环境(windows10+TeXlive2022)
    使用xelatex编译example.tex文件的效果同windows11+TeXLive2024
  • 使用OverLeaf(其相当于在linux发行版ubuntu系统上运行的一个TeXLive环境,因此字体配置根据ctex文档有一定的差异,主要体现在默认使用Fandol字库)

example.tex文档首先说明如果需要在OverLeaf上编译,则需要选择相应的字库选项如下:

% \documentclass[bwprint]{gmcmthesis} 
\documentclass[bwprint,fontset=fandol]{gmcmthesis} % OverLeaf 等在线平台需要用这一行。

image.png

在如上图上传项目文档后,使用xelatex编译example.tex文件

image.png

首先需要指出的是,警告并不影响最终编译结果,在宏包heavenlyclouds的作用下,由于ubuntu系统不自带隶书,因此其策略自动选择用楷书代替并raise这个warning。
与此同时,比赛官方仅仅提供了一个word模板,并未有严格的格式规范,所以实际上并不一定非要使用隶书,建模比赛更重要的还是内容,分辨字体是否正确不是一个评审应该重点关注的事情,和本科生国赛一样,其实并没有格式要求,只需要排版整洁美观严谨就是一个好的文档样式。

既然鱼香肉丝老师发问了,这里记录下群里讨论出的解决方法:

感谢群友@u19850 可以在example.tex同层文件目录下上传LiSu.ttf文件,并且将.cls中的代码修改如下:

image.png

% 将gmcmthesis.cls的 316行左右 处修改如下,处理字体兼容
\ifmcm@fandol
      % \setCJKfamilyfont{zhli}{LiSu} % 需要隶书字体 最好更换其他相似字体
      \setCJKfamilyfont{zhli}{LiSu.ttf}
      \newcommand*\lishu{\CJKfamily{zhli}}
      % \providecommand{\lishu}{\kaishu}
      % \PackageWarning{heavenlyclouds}{用楷书代替隶书}
\fi

如此做,便可通过当前目录下字体.ttf文件的直接调用解决找不到字体的问题。

由于一些版权的原因,此处无法提供LiSu.ttf文件,请自行下载并上传到工作路径下。

  • 手贱写了四种,于是还得补一下新晋平台TeXpage

实际上TeXpage的编译表现和Overleaf完全相同

image.png

在上传LiSu.ttf并进行字体兼容后,在TeXpage使用xelatexTeXLive2024下也可正常编译.

image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览