Files
ouc_latex_template/试卷归档封面/README.md
T
laoyang 8984b93ee7 模板内容填充:全库 × 占位换成完整虚构示例,README 表述同步 #11
把 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 正文 × 清零;真实信息零泄漏。
2026-10-27 12:50:02 +08:00

124 lines
5.5 KiB
Markdown
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 模板。原文件是学院/学部下发的
`.doc` 表格,本目录把它做成可直接编译的 LaTeX 版。
> **改名说明**:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」,
> 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途,
> 已统一改为 **学部 + 归档封面**:目录名、文件名、内文标题三处同步。
> 与 [`试卷/`](../试卷/) 的区别:`试卷/` 是**试卷正文 + 参考答案**(学校专用
> 195×270mm 试卷纸、装订栏、成绩表);本目录是**随卷归档的封面单页**
> (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。
## 文件
| 文件 | 说明 |
|---|---|
| `oucksfm.sty` | 版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程 |
| `试卷归档封面.tex` | 填写入口,【第 1 节】改课程信息即可 |
| `试卷归档封面.pdf` | 成品样张 |
## 编译
```bash
xelatex 试卷归档封面.tex
```
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
本模板自包含,不依赖任何图片。
## 填表
只改 `试卷归档封面.tex` 的【第 1 节】。下面注释里的值是**样张实际用的虚构值**
(与 `课程教学日历/`、`成绩构成说明/`、`试卷/` 同为《数字逻辑》2025 秋):
```latex
\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`](../fonts.tex),**全局生效**:
```latex
\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`](../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,只在导言区设是无效的):
```latex
\AtBeginDocument{\linespread{1}\selectfont}
```
没有这一步,表高会比原卷高出一大截。