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

5.2 KiB
Raw Blame History

试卷归档封面 —— 信息科学与工程学部试卷归档封面(理论课)

信息科学与工程学部试卷归档封面的 XeLaTeX 模板。原文件是学院/学部下发的 .doc 表格,本目录把它做成可直接编译的 LaTeX 版。

改名说明:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」, 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途, 已统一改为 学部 + 归档封面:目录名、文件名、内文标题三处同步。

与 试卷/ 的区别:试卷/ 是试卷正文 + 参考答案(学校专用 195×270mm 试卷纸、装订栏、成绩表);本目录是随卷归档的封面单页 (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。

文件

文件 说明
oucksfm.sty 版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程
试卷归档封面.tex 填写入口,【第 1 节】改课程信息即可
试卷归档封面.pdf 成品样张

编译

xelatex 试卷归档封面.tex

必须用 XeLaTeX(fontspec + xeCJK),pdflatex 编译不过。 本模板自包含,不依赖任何图片。

填表

只改 试卷归档封面.tex 的【第 1 节】:

\newcommand{\sfmyear}  {\ph{××××}年}      % 学年
\newcommand{\sfmterm}  {\ph{×}季学期}      % 学期
\newcommand{\sfmcno}   {080502101231}     % 课程号(纯数字,14pt)
\newcommand{\sfmsno}   {25252029}         % 选课号(纯数字,14pt)
\newcommand{\sfmcourse}{\ph{××××}}        % 考试课程名称
\newcommand{\sfmtype}  {\ph{×××}}          % 课程类型
\newcommand{\sfmmajor}{...}               % 面向专业(多个用、隔开)
\newcommand{\sfmgrade}{\ph{××××}}          % 面向年级
\newcommand{\sfmcount}{\ph{××}}            % 试卷份数
\newcommand{\sfmteacher}{\ph{×××}}         % 授课教师
\newcommand{\sfmdate}{...}                % 日期

填真实内容后把 \ph{...} 整个换掉,不要留下 ×。

版式参数

全部照原 .doc 实测值,未做主观调整:

项目 值 来源
纸张 A4 210×297mm pgSz
页边距 左右 20mm、上下 25.01mm pgMar 56.7 / 70.9 pt
表宽 170mm(= 版心宽) tblW 100%
边框 0.5pt 实线 w:sz=4(1/8pt 单位)
单元格内边距 左右 1.4993mm、上下 0 tblCellMar 85 twips
列宽 51mm + 119mm(30% : 70%) col_widths_pct
标题 黑体 18pt 加粗居中 w:sz=36 + w:b
左列标签 黑体 18pt w:sz=36
右列值 18pt(学年/学期)/16pt(多数)/14pt(课程号、选课号) w:sz=36/32/28
行高 11 行固定高,合计 185.95mm 各行 trHeight + hRule=exact

实测校验(pymupdf 读 PDF):

表格 左=20.0mm 右=189.91mm 宽=169.9mm     ← 应为 170mm ✓
行高 15.19/15.18/15.54/14.66/14.75/15.18/33.02/15.19/18.80/15.19/15.19 mm
表格总高 187.89mm                          ← 含线宽与取整,与 185.95+线宽 吻合
标题  宽 94.89mm,单行不折(版心 170mm,余量充足)

三个坑(改之前先看)

1. × 占位符曾跑到 Times New Roman(已在公共字体包根治)

xeCJK 按 Unicode 区段分类,×(U+00D7)落在 Latin-1,会被判成西文, 交给 fontspec 的西文字体(Termes / Times)。\heiti / \fangsong 只切 CJK 字体族,管不到它 —— 包一层是没用的。TNR 的 × 宽度与汉字不一致, 混排时基线也偏。

现在这行已上移到仓库公共字体包 ../fonts.tex,全局生效:

\xeCJKDeclareCharClass{CJK}{"00D7}   % × 乘号
\xeCJKDeclareCharClass{CJK}{"2014}   % — 破折号
\xeCJKDeclareCharClass{CJK}{"25A1}   % □ 方框(勾选框)

本模板不再需要自己声明。

✅ 年度考核登记表/ 也有同样问题,已随本次改造一并修好 (原先那条注释说能修,但实测 PDF 里 × 仍落在 TNR —— 因为注释在、声明也写了, 却没有真正作用到字符类)。现在已经实测确认:10 处 × 全部落在 OUC Sans 上。

2. 字体全部来自公共字体包

本模板原先用 SimHei / SimSun / FangSong + AutoFakeBold 描边,换台机器 (尤其 Linux/macOS)就编不出来,而且这些字体都不允许随仓库分发。现改为 \input{../fonts.tex},字体文件在 ../fonts/ 下,来源与授权见 ../fonts/README.md。

3. \linespread 会悄悄放大行高

ctex 默认 \linespread 约为 1.3,它会把 \fontsize{18}{21.6} 里的 21.6 pt 行距放大到 28 pt 以上,逐行累积后整张表会顶出页面。

oucksfm.sty 的解法是在每个 \fontsize 之后紧跟 \linespread{1}\relax, 并且在 \AtBeginDocument 之后再设一次(ctex 会在 \begin{document} 时 把 \linespread 重新设回 1.3,只在导言区设是无效的):

\AtBeginDocument{\linespread{1}\selectfont}

没有这一步,表高会比原卷高出一大截。