Files
ouc_latex_template/试卷归档封面/试卷归档封面.tex
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

121 lines
5.4 KiB
TeX
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.
%======================================================================
% 中国海洋大学 信息科学与工程学部 试卷归档封面(理论课)
%
% 编译: xelatex 试卷归档封面.tex
%
% 本模板不含真人信息:课程名、课程号、选课号、班级、教师姓名一律用
% × 占位。填表时只改下面【第 1 节】。
%
% 版式来源:SynologyDrive/授课/数字逻辑/2025/归档/
% 附件1:信息科学与工程学院试卷封面(理论课).doc
% (原文件名与内文标题写的是「学院」,现按现行建制改为「学部」)
% 所有尺寸已在 oucksfm.sty 内注明换算过程;要改版式请改 sty。
%
% 与原 .doc 的差异(有意为之):
% · 原文件里的真实课程信息已全部换成 × 占位
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
% 「信息科学与工程学部试卷归档封面」
% · 纸张、边距、表宽、行高、字号、字体一律照原值,未做任何调整
%======================================================================
\documentclass[UTF8,fontset=none]{ctexart}
\usepackage{oucksfm}
%======================================================================
% 1. 表内内容(填表时只改这一段)
%
% ⚠️ 左列标签是学部制式用语,一般不用改;只改右列的值。
%======================================================================
%---- 左列标签(11 个,与学部原表的字一模一样,含字间空格)------------
\newcommand{\sfmyearlabel} {学\quad 年} % 原文件用两个半角空格
\newcommand{\sfmtermlabel} {学\quad 期}
\newcommand{\sfmcnolabel} {课程号}
\newcommand{\sfmsnolabel} {选课号}
\newcommand{\sfmcourselabel}{考试课程名称}
\newcommand{\sfmtypelabel} {课程类型}
\newcommand{\sfmmajorlabel} {面向专业}
\newcommand{\sfmgradelabel} {面向年级}
\newcommand{\sfmcountlabel} {试卷份数}
\newcommand{\sfmteacherlabel}{授课教师}
\newcommand{\sfmdatelabel} {日\quad 期}
%---- 右列的值(填表时改这里)------------------------------------------
%
% ⚠️⚠️【必须看】占位符「×」一律用 \ph{} 包起来,不要裸写 ×。
%
% 原因(在 年度考核登记表/ 里踩过):字体的 ASCII 区段由 fontspec 交给
% 西文字体(这里是 Times New Roman),而「×」U+00D7 属于 Latin-1,
% 会被判成 ASCII ⇒ 用 TNR 的 ×,那是 1em 宽的数学乘号,
% 与汉字的 1em 字宽【不一样】(TNR 的 × 略窄、位置也偏)。
% 结果是一串 × 撑不满预期宽度,与汉字混排时基线也参差。
%
% \ph{} 把它强制交回黑体(全角),宽度才与汉字一致。
% 本表全文黑体,所以用 \heiti 收尾即可。
%
% ⚠️ 填表时把 \ph{×××} 整体替换成真实内容(不要保留 × ):
% 例如 \newcommand{\sfmcourse}{数字逻辑},一行的 \ph 都不要留。
%----------------------------------------------------------------------
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
% 学年。原文件写「2025年」,学期行写「秋季学期」。
% ⚠️ 注意:学部原表是「学年」+「2025年」这种写法,不是「2025—2026」。
% 若学校要求写成区间,改这里即可,行高涨一点不会溢出。
\newcommand{\sfmyear} {\ph{××××}年}
% 学期:秋 / 春,或「秋季学期」「春季学期」
\newcommand{\sfmterm} {\ph{×}季学期}
% 课程号 / 选课号:纯数字,14pt(比其余值小一档,原表如此)
% ⚠️ 纯数字是真正的 ASCII,本来就该用 TNR,所以不用 \ph 包。
\newcommand{\sfmcno} {080502101231}
\newcommand{\sfmsno} {25252029}
% 考试课程名称
\newcommand{\sfmcourse}{\ph{××××}}
% 课程类型:专业课 / 公共基础课 / 通识课 …
\newcommand{\sfmtype} {\ph{×××}}
% 面向专业。多个专业之间用「、」隔开。
% ⚠️⚠️ 这一格是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
% 专业名超过 3 行会自动把行撑高,整表就顶出版心了——届时请把
% oucksfm.sty 里 row{7} 的 ht 改大,或者把专业名精简。
\newcommand{\sfmmajor}{%
\ph{××××××××}、\ph{××××}、\ph{××××××}、\ph{××××××}、\ph{××××××}}
% 面向年级
\newcommand{\sfmgrade}{\ph{××××}}
% 试卷份数
\newcommand{\sfmcount}{\ph{××}}
% 授课教师
\newcommand{\sfmteacher}{\ph{×××}}
% 日期
\newcommand{\sfmdate}{\ph{××××}年\ph{××}月\ph{××}日星期\ph{×}}
%======================================================================
% 2. 正文
%======================================================================
\begin{document}
\sfmtitle{信息科学与工程学部试卷归档封面}
\begin{sfmtable}
\sfmlabel{\sfmyearlabel} & \sfmvalbig{\sfmyear} \\
\sfmlabel{\sfmtermlabel} & \sfmvalbig{\sfmterm} \\
\sfmlabel{\sfmcnolabel} & \sfmvalsmall{\sfmcno} \\
\sfmlabel{\sfmsnolabel} & \sfmvalsmall{\sfmsno} \\
\sfmlabel{\sfmcourselabel} & \sfmval{\sfmcourse} \\
\sfmlabel{\sfmtypelabel} & \sfmval{\sfmtype} \\
\sfmlabel{\sfmmajorlabel} & \sfmval{\sfmmajor} \\
\sfmlabel{\sfmgradelabel} & \sfmval{\sfmgrade} \\
\sfmlabel{\sfmcountlabel} & \sfmval{\sfmcount} \\
\sfmlabel{\sfmteacherlabel} & \sfmval{\sfmteacher} \\
\sfmlabel{\sfmdatelabel} & \sfmval{\sfmdate} \\
\end{sfmtable}
\sfmtail
\end{document}