Files
ouc_latex_template/科技报告/cls/font.cls
T
laoyang 8aa979739a 字体统一:建公共字体目录,全部改用开源可商用字体 (#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%
2026-10-27 00:43:14 +08:00

136 lines
5.5 KiB
OpenEdge ABL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% fonts settings
%% 字体设定
%%
%% 【2026-11 改造记录:全部改为开源可商用字体】
%%
%% 旧版本这里用的是 5 个**方正商业字体** + 鸿蒙,字体文件都放在
%% 科技报告/font/ 下(共 92MB):
%% fangzhengshusong_GBK.TTF 方正书宋 SJK 正文
%% fangzhengxiaobiaosong_GBK.TTF 方正小标宋 粗体/标题
%% fangzhengkaiti_GBK.TTF 方正楷体 引文、页眉、题注
%% fangzhengfangsong_GBK.TTF 方正仿宋 斜体位
%% fangzhengzhongdengxian_GBK.TTF 方正中等线 等宽位
%%
%% 问题:方正这 5 款都**不允许随仓库分发**(个人非商用免费,商用须授权),
%% 把它们打进公开模板库属于越界使用;而且 92MB 的字体让 clone 变得很重。
%%
%% 现在全部映射到仓库公共字体包 ../fonts.tex(文件在 ../fonts/ 下):
%% 方正书宋 → OUC Serif(思源宋体 SC 子集,OFL 1.1)
%% 方正小标宋 → OUC Serif Bold(真粗体,思源宋体自带)
%% 方正楷体 → OUC Kai(霞鹜文楷子集,OFL 1.1)
%% 方正仿宋 → Zhuque Fangsong(朱雀仿宋,OFL 1.1)
%% 方正中等线 → OUC Sans(思源黑体 SC 子集,OFL 1.1)
%% 鸿蒙 → 保留 HarmonyOS Sans(华为官方允许免费商用)
%%
%% 上层的 \fzss / \fzxbs / \fzkai / \fzfs / \fzzdx / \hm 六个命令名
%% **保持不变**,所以 boxes.cls / code.cls / headandfoot.cls / cover.tex
%% 里的调用一行都不用改。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 开明式:句末点号用占一个汉字宽度,标号和句内点号占半个汉字宽度
%\punctstyle{kaiming}
%======================================================================
% 一、先载入仓库公共字体包
% 它负责:fontspec/xeCJK 的加载、\songti/\heiti/\kaiti/\fangsong/\tnr
% /\tnrb/\hm 的登记、以及 ×/□ 这类字符的 CJK 归类。
% 本文件只在其基础上覆盖"默认族",并补 5 个方正语义别名。
%======================================================================
\input{../fonts.tex}
%======================================================================
% 二、默认字体族
%
% 西文:鸿蒙 HarmonyOS Sans(与原模板一致,观感不变)
% 中文:OUC Serif 书宋(对应原方正书宋),粗体用 OUC Serif Bold
% (对应原方正小标宋 —— 小标宋本身就是宋体的标题变体)
%
% ⚠️ Path= 是相对**编译时工作目录**(= 科技报告/)的,不是相对 cls/。
% 故写作 ../fonts/...,不要写 ../../。
%======================================================================
\setmainfont{HarmonyOS_Sans_Regular.ttf}[
Path = ../fonts/harmonyos-sans/,
BoldFont = HarmonyOS_Sans_Bold.ttf,
ItalicFont = HarmonyOS_Sans_Regular_Italic.ttf,
BoldItalicFont = HarmonyOS_Sans_Bold_Italic.ttf,
]
\setsansfont{HarmonyOS_Sans_Regular.ttf}[
Path = ../fonts/harmonyos-sans/,
BoldFont = HarmonyOS_Sans_Bold.ttf,
ItalicFont = HarmonyOS_Sans_Regular_Italic.ttf,
BoldItalicFont = HarmonyOS_Sans_Bold_Italic.ttf,
]
\setmonofont{HarmonyOS_Sans_Regular.ttf}[
Path = ../fonts/harmonyos-sans/,
]
% \hm 已在 fonts.tex 里登记(CJK 族名 OUCHM),这里不重复定义。
% 只把 CJK 的 sans / mono 两族指到鸿蒙上,与旧版行为一致。
\setCJKsansfont{HarmonyOS_Sans_SC_Regular.ttf}[
Path = ../fonts/harmonyos-sans/,
BoldFont = HarmonyOS_Sans_SC_Bold.ttf,
]
\setCJKmonofont{OUCSans}[
Extension = .otf,
Path = ../fonts/ouc-sans/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
%======================================================================
% 三、5 个方正语义别名
%
% 用 \setCJKfamilyfont + \def 而非 \newCJKfontfamily,理由见 fonts.tex:
% 后者是 LaTeX3 的 \NewDocumentCommand,命令已存在时会报错中断。
% 命令名照旧,调用点零改动。
%======================================================================
% 书宋(原方正书宋)—— 正文
\setCJKfamilyfont{fzss}[
Extension = .otf,
Path = ../fonts/ouc-serif/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]{OUCSerif}
\newcommand{\fzss}{\CJKfamily{fzss}}
% 小标宋(原方正小标宋)—— 标题/强调,用宋体真粗体
\setCJKfamilyfont{fzxbs}[
Extension = .otf,
Path = ../fonts/ouc-serif/,
UprightFont = *-Bold,
BoldFont = *-Bold,
]{OUCSerif}
\newcommand{\fzxbs}{\CJKfamily{fzxbs}}
% 楷体(原方正楷体)—— 引文、页眉、题注
\setCJKfamilyfont{fzkai}[
Extension = .ttf,
Path = ../fonts/ouc-kai/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]{OUCKai}
\newcommand{\fzkai}{\CJKfamily{fzkai}}
% 仿宋(原方正仿宋)—— 斜体位
% ⚠️ 朱雀仿宋只有常规一档。旧版这里配的是"方正仿宋",也是常规字面,
% 所以观感一致;但若在 \fzfs 下用 \bfseries,不会真的变粗。
\setCJKfamilyfont{fzfs}[
Extension = .ttf,
Path = ../fonts/zhuque-fangsong/,
UprightFont = *-Regular,
]{ZhuqueFangsong}
\newcommand{\fzfs}{\CJKfamily{fzfs}}
% 中等线(原方正中等线)—— 等宽位,用思源黑体
\setCJKfamilyfont{fzzdx}[
Extension = .otf,
Path = ../fonts/ouc-sans/,
UprightFont = *-Regular,
BoldFont = *-Bold,
]{OUCSans}
\newcommand{\fzzdx}{\CJKfamily{fzzdx}}