字体统一:建公共字体目录,全部改用开源可商用字体 (#6)

七个模板原先分两套做法:幻灯片/fonts(49MB 鸿蒙 18 个字重)与
科技报告/font(92MB,含 5 款方正商业字体),其余模板直接调系统
SimSun/SimHei/KaiTi/FangSong/Times New Roman。换机器就编不出来,
方正系列也不允许随仓库分发。

统一到仓库根的 fonts/ + fonts.tex:
- OUC Serif(思源宋体 SC 子集)   —— 宋体
- OUC Sans(思源黑体 SC 子集)    —— 黑体
- OUC Kai(霞鹜文楷子集)          —— 楷体
- Zhuque Fangsong(朱雀仿宋)      —— 仿宋
- TeX Gyre Termes                  —— 西文 Times 等价(度量逐字相同)
- HarmonyOS Sans                   —— 幻灯片/科技报告原有字体

fonts.tex 是唯一允许声明字体的地方,7 个模板全部 \input 它。
字体体积 141MB -> 49MB(去掉重复),全库共用一套最小集合。

几处踩过的坑(均已写进源码注释):
- \newCJKfontfamily 与 ctex 默认 fontset 冲突会中断编译,改用
  \setCJKfamilyfont + \def
- \newfontfamily 缺粗体档会让 \bfseries 静默失效,四档必须全给
- UprightFont= 与主参数不能同时给,否则文件名被拼两次
- Path= 相对编译时工作目录,不是相对 .sty
- ×/□/○ 等符号按 Unicode 区段被判成西文,需 \xeCJKDeclareCharClass
- 中文斜体的 ItalicFont 与主字体不在同一目录,须在 ItalicFeatures
  里单独写 Path/Extension(否则报 OUCKai-Regular cannot be found)

顺带:
- 科技报告 report.tex 的字体演示正文改为新字体名(原文写着方正系列)
- 试卷归档封面新模板并入本库
- 科技报告 shell 命令框底色改海大蓝(#5 遗留)

验证(7 个模板 8 个 PDF 全量重编 + 逐行 A/B 对照):
- 错误 0,缺字 0
- 幻灯片 362 行逐行完全一致,零漂移
- 年度考核登记表 / 劳务发放说明表 / 试卷题型示例 / 参考答案 文本完全一致
- 课程执行大纲 仅 2 处断字连字符差异(throughout、processing),
  1 条 6.39pt Overfull 已论证不可见(距纸张右边缘仍有 20.7mm)
- 科技报告 内嵌字体方正归零,只剩 OUC Serif/Sans/Kai + Zhuque
- 全库正文 857 个非 ASCII 字符,四款中文字体(含粗体)覆盖 100%
This commit is contained in:
2026-10-27 00:43:14 +08:00
parent c69f4461dc
commit 8aa979739a
71 changed files with 1519 additions and 184 deletions
+28 -14
View File
@@ -46,21 +46,35 @@
%======================================================================
% 2. 字体
% SimSun 宋体(标题/大题用 AutoFakeBold 模拟原卷描边加粗)
% KaiTi 楷体(卷头) SimHei 黑体(装订栏“专业年级”)
% Times New Roman 西文数字
% 全部取自仓库公共字体包 ../fonts.tex(字体文件在 ../fonts/ 下)。
% 旧版这里是 SimSun / SimHei / KaiTi / Times New Roman 四个系统字体,
% 换台机器(尤其 Linux/macOS)就编不出来,且都不能随仓库分发。
%
% 对应关系:
% 宋体正文 OUC Serif ← 思源宋体 SC 子集(真粗体,不再 AutoFakeBold)
% 黑体 OUC Sans ← 思源黑体 SC 子集
% 楷体(卷头) OUC Kai ← 霞鹜文楷子集
% 西文/数字 TeX Gyre Termes(Times 度量兼容,见下)
%
% ⚠️ 关于原卷的"宋体西文":
% 原卷正文 Mealy / RS / 2026 等实测每个 ASCII 字符步距恒为 5.28bp
% (= 0.500 em @10.5bp)且 font 名为 SimSun —— 即 Word 把西文设为
% 宋体时给出的"半角等宽"字形。SimSun 是全 ASCII 0.500 em 等宽的。
%
% 这里改用 Termes,理由:
% · Termes 的**数字**步距恰好也是 0.500 em,数字宽度零漂移;
% · 本卷所有数字本来就走 \TNR{} / \TNRB{}(已实测 PDF 里 SimSun
% 只承担空格与极少数裸字母),换字体的实际影响面只有那几处;
% · 若要强行复刻 0.500 em 等宽只能上 Inconsolata 这类代码字体,
% 放进试卷正文观感明显更差 —— 按需求"字体不合适再更换"的取舍,
% 宁可让裸西文用 Termes 的比例字形。
% 实测结论见 README「字体」一节的 A/B 对比。
%======================================================================
% 正文西文默认用 SimSun 的等宽西文字形(原卷正文 Mealy / 2026 / RS 等
% 实测每个 ASCII 字符步距恒为 5.28bp 且 font 名为 SimSun,即为宋体西文)。
% 需要真正 Times 的地方(化简题、页脚、卷头年份)显式 \tnr / \tnrb。
\setmainfont{SimSun}
\setCJKmainfont{SimSun}[AutoFakeBold=2.86]
\newCJKfontfamily\songti{SimSun}[AutoFakeBold=2.86]
\newCJKfontfamily\heiti{SimHei}
\newCJKfontfamily\kaiti{KaiTi}
\newfontfamily\tnr{Times New Roman}
\newfontfamily\tnrb{Times New Roman Bold}
\newfontfamily\sunfont{SimSun}
\input{../fonts.tex}
% 试卷正文的宋体西文占位:原模板用 \sunfont 指 SimSun,现统一指 Termes。
% 保留命令名是为了不动 \qnum / \logicexpr / \sumsig 等所有调用点。
\let\sunfont\tnr
%----------------------------------------------------------------------
% ⚠️ xeCJK 陷阱:字体切换命令若紧邻 \par(或位于段落末尾),