Appearance
中文字体如何才能与 Word 模板完全相同?(换用中易字库)
首先明确,Word 模板中的中文字体属于「中易字库」,包括simsun.ttc
(宋体,SimSun)等。
- Windows——这是默认设置,无需修改,开箱即用。
- 其它平台——需强制 LaTeX 使用中易字库,并确保字体文件可用,详见下文。
强制 LaTeX 使用中易字库
请编辑main.tex
,在开头如下设置:
latex
\documentclass[…]{bithesis}
\documentclass[…, ctex={fontset=windows}]{bithesis}
这会让ctex
宏包跳过操作系统检测,直接使用 Windows 平台默认的中易字库。
其它 LaTeX 文档怎么办?
以上方法仅限bithesis
宏包。自己直接用ctex
宏包请如下设置:
latex
\documentclass{ctexbook}
\documentclass[fontset=windows]{ctexbook}
其它模板请如下设置:
latex
\PassOptionsToClass{fontset=windows}{ctexbook}
\documentclass[…]{任何基于ctexbook的文档类}
如上设置后,若fontspec
宏包报错The font "SimSun" cannot be found
,说明您的平台并无中易字库,需补充准备字体文件,请继续操作。
准备字体文件
各平台最简方法不同,以下由易到难介绍。(📥表示需在本地下载 LaTeX 发行版)
TeXPage 等国产在线平台(难度:😀)
已预装中易字库,如上强制 LaTeX 使用即可,无此问题。
WSL (Windows Subsystem for Linux)(难度:🙂+📥)
直接使用外面 Windows 的字体文件。
请通过 WSL 的命令行按序执行:
shell
# 将 Windows 的字体目录软链接到 WSL 的字体目录,
sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/win-fonts
# 刷新字体缓存
fc-cache -fv
Linux、macOS 等其它本地平台(难度:🤨+📥)
在系统中安装中易字库,通常双击字体文件即可。
中易字库包括 SimSun、SimHei、KaiTi(注意并非 SimKai)、FangSong 等。然而由于版权和历史原因,它不太有正经下载渠道;建议找个 Windows 系统,从C:/Windows/Fonts/
拷贝sim{sun,hei,kai,fang}*.{ttf,ttc}
。
Overleaf 等在线平台(难度:🤨😥😖)
上传字体到 LaTeX 项目,同时用ctex-fontset-windows.def
定义字体。
原因
ctex
宏包使用fontspec
宏包调用字体,调用时按字体名(如 SimSun),而非文件名(如simsun.ttc
)。这可能是考虑到文件名能随意更改,不反映文件中的实际字体。
根据fontspec
手册 §2 Font selection,按字体名调用时,只支持 XeTeX/LuaTeX 已知的系统字体(≈ 操作系统字体目录的字体);按文件名调用时,才会搜索当前工作目录(≈ LaTeX 项目)中的字体文件。
然而在线平台上,我们没有权限添加系统字体。于是只好绕过ctex
宏包默认机制,自己按文件名调用字体。
找个 Windows 系统,在
C:/Windows/Fonts/
找到simsun.ttc
和sim{hei,kai,fang}.ttf
,上传到 LaTeX 项目,与main.tex
并列。创建
ctex-fontset-windows.def
,与main.tex
并列,内容如下。ctex-fontset-windows.def
(单击展开)latex%% Modified from `texmf-dist/tex/latex/ctex/fontset/ctex-fontset-windows.def'. %% The LaTeX Project Public License 1.3c \GetIdInfo$Id: ctex.dtx 13a2256 2022-07-14 18:54:09 +0800 Qing Lee <sobenlee@gmail.com> $ { Windows fonts definition (CTEX, by file name) See https://bithesis.bitnp.net/faq/word-font.html } \ProvidesExplFile{ctex-fontset-windows.def} {\ExplFileDate}{2.5.10}{\ExplFileDescription} % SimSun → simsun.ttc, SimHei → simhei.ttf, KaiTi → simkai.ttf, FangSong → simfang.ttf \setCJKmainfont { simsun.ttc } [ BoldFont = simhei.ttf , ItalicFont = simkai.ttf ] \setCJKsansfont { Microsoft~YaHei } [ BoldFont = *~Bold ] \setCJKmonofont { simfang.ttf } \setCJKfamilyfont { zhsong } { simsun.ttc } \setCJKfamilyfont { zhhei } { simhei.ttf } \setCJKfamilyfont { zhfs } { simfang.ttf } \setCJKfamilyfont { zhkai } { KaiTi } \setCJKfamilyfont { zhyahei } { Microsoft~YaHei } [ BoldFont = *~Bold ] \setCJKfamilyfont { zhli } { LiSu } \setCJKfamilyfont { zhyou } { YouYuan } \NewDocumentCommand \songti { } { \CJKfamily { zhsong } } \NewDocumentCommand \heiti { } { \CJKfamily { zhhei } } \NewDocumentCommand \fangsong { } { \CJKfamily { zhfs } } \NewDocumentCommand \kaishu { } { \CJKfamily { zhkai } } \NewDocumentCommand \lishu { } { \CJKfamily { zhli } } \NewDocumentCommand \youyuan { } { \CJKfamily { zhyou } } \NewDocumentCommand \yahei { } { \CJKfamily { zhyahei } }
📅 最后检查于2025年4月
以上内容修改自
ctex
宏包 2.5.10 2022-07-14 的ctex-fontset-windows.def
,以后可能需要参考 CTeX-org/ctex-kit 源代码更新。如果您之前没有操作,请强制 LaTeX 使用中易字库。
自行部署的 Overleaf Community 版(难度:😀+📥👷♀️🚧)
如果您采用北大 LCPU 版 Overleaf 自行部署,可以使用以下镜像替换原有的ghcr.io/lcpu-club/sharelatex-base
,它们已经包含了中易字库。
docker.io/everything411/sharelatex-base:2024.1
docker.io/everything411/sharelatex-base:2022.1
docker.io/everything411/sharelatex-base:2020.1
📅 最后检查于2025年4月
这些镜像违反了微软的再分发规则,有潜在失效风险。
另见:提供自建Overleaf实例的教程 · Issue #445 · BITNP/BIThesis-wiki
也许能更简单
也许可以修改services/clsi/app/js/DockerRunner.js
中的 docker 调用规则,允许创建容器时额外挂载,从而添加字体。待测试补充。
🏃♀️ 树挪死,人挪活
可以考虑换到容易的平台,甚至请同学帮忙在 Windows 上编译最终版 PDF。