字体统一:建公共字体目录,全部改用开源可商用字体 (#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
+23 -11
View File
@@ -92,7 +92,7 @@ xelatex 课程执行大纲.tex # 单次即可,无交叉引用
| `trHeight`(exact) | 454 | 8.01(本包用 7.834,见坑 3) |
| 边框 `sz` | 4 | 0.5pt |
`tblLayout fixed`、`jc center`、`tblW 0 auto`。全表 12pt 方正仿宋。
`tblLayout fixed`、`jc center`、`tblW 0 auto`。全表 12pt 仿宋(朱雀仿宋)。
### 表 1(教学日历)
@@ -184,18 +184,30 @@ ctex 默认 `\linespread ≈ 1.3`,会把 `\fontsize{12}{18}` 的行距放大
反过来,在已经缩小过字号的上下文里,**不能**用 `\linespread{1.2}` 当"1.2 倍行距"
(它乘的是外层的 9pt,不是当前的 10.5pt),要直接钉 `\fontsize{10.5}{12.6}`。
## 字体降级
## 字体
原 docx 用了 4 个字体,其中 3 个是**方正商业字体**,嵌在 docx 里但本机没装:
原 docx 用了 4 个字体,其中 3 个是**方正商业字体**,嵌在 docx 里但本机没装。
旧版做法是降级到 Windows 自带字体(宋体/黑体/仿宋 + `AutoFakeBold` 伪粗),
但这既依赖本机装了什么字体(换台机器就可能编不出),而且 SimSun / SimHei /
FangSong 也都不允许随仓库分发。
| docx 原字体 | 用在哪 | 本包替代 |
|---|---|---|
| 方正小标宋简体 | 校名、副标题、大标题、教学日历 | 宋体 + 伪粗(`AutoFakeBold=3.2`) |
| 方正仿宋_GB2312 | 正文、表 0、签字栏 | 仿宋(`FangSong`) |
| 黑体 | 各级标题 | 黑体(`SimHei`) |
| 宋体 | 教学日历表 9pt | 宋体(`SimSun`) |
现在全部改用仓库公共字体包 `../fonts.tex`:
装过方正字体的话,改 `ouccourse.sty` 第 75~78 行的 `\newCJKfontfamily` 即可,其余不动。
| docx 原字体 | 用在哪 | 本包替代 | 命令 |
|---|---|---|---|
| 方正小标宋简体 | 校名、副标题、大标题、教学日历 | OUC Serif **真粗体** | `\ccbiaosong` |
| 方正仿宋_GB2312 | 正文、表 0、签字栏 | 朱雀仿宋 | `\ccfang` |
| 黑体 | 各级标题 | OUC Sans(思源黑体) | `\cchei` |
| 宋体 | 教学日历表 9pt | OUC Serif(思源宋体) | `\ccsong` |
比原来的伪粗更好:小标宋本来就是宋体的标题变体,用思源宋体自带的真粗体,
笔画不会像 `AutoFakeBold=3.2` 那样糊在一起。
> ⚠️ **朱雀仿宋只有常规一档**,`\ccfang` 下 `\bfseries` 不会真的变粗。
> 教学日历表头(`课程执行大纲.tex` 里的 `{\ccfang\ccszxi\bfseries 周次}` 等 6 处)
> 原来靠 `AutoFakeBold=2.5` 伪粗,现在给 `ccfang` 单独开了 `FakeBold=0.8`
> 保住层次(见 `ouccourse.sty` 的注释)。若要更实在的粗体,把那几处
> `\ccfang` 换成 `\cchei` —— 黑体本身就是标题用的重字面。
同时 `\xeCJKsetup{CJKecglue={}}` 关掉了西文与汉字之间的自动空隙 —— 原 docx 没有这种空隙,
不关会出现「×× 学部×× 学院」这种多出来的空格。
@@ -210,7 +222,7 @@ ctex 默认 `\linespread ≈ 1.3`,会把 `\fontsize{12}{18}` 的行距放大
| 行内是否允许断开 | 允许(无 `cantSplit`) | 允许 | 一致 |
| 表 0 每行高 | 8.01 | 8.01 | 一致 |
| 表 1 表宽 | 165.54 | 165.36(−0.18) | 竖线宽度舍入 |
| 字体 | 方正小标宋/仿宋 | 宋体加粗/仿宋 | 商业字体未安装 |
| 字体 | 方正小标宋/仿宋 | 思源宋体粗/朱雀仿宋 | 商业字体不可分发,已换开源替代 |
| 修订标记 | 46 处 `w:ins` | 不保留 | 已接受全部插入修订 |
| 46 处 `w:ins` 中的红字 | `color=C00000` | 黑色 | 那是修订高亮,非正式版式 |