把 11 个模板里满篇的 × 换成一套连贯的虚构数据,让样张能看出排版效果。
虚构设定(跨模板统一):
- 数字逻辑 / 2025 秋 / 张远航 / 计算机科学与技术学院,教学日历、成绩构成
说明、试卷归档封面、试卷四份互相对得上
- 简历:张远航,1985.03,教授博导,论文/专利/项目/获奖全套虚构
- 年度考核:同一人的 2025 年度考核表,年度总结四段写满
- 执行大纲:刻意不套用上面那套(原件就是《信号与线性系统分析》的课,
强行改课程名会让章节体系、学时分配、思政案例全对不上)
假数据都留肉眼可辨标记:DOI 统一 10.9999/、专利号 ZL209999…、
软著 2024SR99999…、手机 138 0000 0000、邮箱 example.net。
签字/日期/评语栏仍然留空——编了就分不清该改哪儿。
修掉一个既有 bug(填充时才暴露):
年度考核登记表「出生年月」的值从来不显示,连字符都不在 PDF 里。
根因是 tabularray 的 cell{r}{c}={c=n} 里那个 c 是数据行的单元序号、
不是视觉列号,表头三处 c=2 要求该行吃 15 个视觉列而表只有 11 列,
超出部分静默丢弃。迷惑点:写 12 格丢值,写 9 格反而正常。
正解是表头不写 cell{},改用行内 \SetCell[c=n]{c},每行照常写满 11 格。
同时 R0 行原件本就装不下(前六字段 115.76mm,剩 42.20mm 要放
19.68mm 标签 + 17.22mm 值,但列宽被切成 15.31/1.38/25.51),
把标签折两行「出生/年月」解决,列宽一个没改。
README 同步:根 README 与 8 个模板 README 里「一律用 × 占位」的说法
已不成立,统一改为「示例内容全部虚构」,并说明哪些位置仍必须留空。
验证:12 个模板零 error,4 处基线警告未新增;干净副本重编页数一致;
PDF 正文 × 清零;真实信息零泄漏。
5.5 KiB
试卷归档封面 —— 信息科学与工程学部试卷归档封面(理论课)
信息科学与工程学部试卷归档封面的 XeLaTeX 模板。原文件是学院/学部下发的
.doc 表格,本目录把它做成可直接编译的 LaTeX 版。
改名说明:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」, 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途, 已统一改为 学部 + 归档封面:目录名、文件名、内文标题三处同步。
与
试卷/的区别:试卷/是试卷正文 + 参考答案(学校专用 195×270mm 试卷纸、装订栏、成绩表);本目录是随卷归档的封面单页 (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。
文件
| 文件 | 说明 |
|---|---|
oucksfm.sty |
版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程 |
试卷归档封面.tex |
填写入口,【第 1 节】改课程信息即可 |
试卷归档封面.pdf |
成品样张 |
编译
xelatex 试卷归档封面.tex
必须用 XeLaTeX(fontspec + xeCJK),pdflatex 编译不过。 本模板自包含,不依赖任何图片。
填表
只改 试卷归档封面.tex 的【第 1 节】。下面注释里的值是样张实际用的虚构值
(与 课程教学日历/、成绩构成说明/、试卷/ 同为《数字逻辑》2025 秋):
\newcommand{\sfmyear} {\ph{2025}年} % 学年
\newcommand{\sfmterm} {\ph{秋}季学期} % 学期
\newcommand{\sfmcno} {080502101231} % 课程号(纯数字,14pt)
\newcommand{\sfmsno} {25252029} % 选课号(纯数字,14pt)
\newcommand{\sfmcourse}{\ph{数字逻辑}} % 考试课程名称
\newcommand{\sfmtype} {\ph{专业课}} % 课程类型
\newcommand{\sfmmajor}{...} % 面向专业(多个用、隔开)
\newcommand{\sfmgrade}{\ph{2023}级} % 面向年级
\newcommand{\sfmcount}{\ph{86}} % 试卷份数
\newcommand{\sfmteacher}{\ph{张远航}} % 授课教师
\newcommand{\sfmdate}{...} % 日期
⚠️ 换内容时保留 \ph{},只是把它里面的字换掉,别把宏本身删了 ——
「×」和半角数字会被 fontspec 判成 ASCII 交给西文字体,宽度与汉字不一致,
全表的字就会参差不齐(原因见 .tex 里的长注释)。
版式参数
全部照原 .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}
没有这一步,表高会比原卷高出一大截。