新增试卷归档目录 LaTeX 模板(试卷归档目录/) #7

Closed
opened 2026-10-26 23:51:09 +00:00 by laoyang · 1 comment
Owner

背景 / 诉求

用户提供原件:

C:\Users\Yongquan\SynologyDrive\授课\数字逻辑\2025\归档\附件2:信息科学与工程学院归档目录(理论课).doc

要求「改 latex」——把这份 Word 表做成 LaTeX 模板,并入 ouc_latex_template 仓库,
做法与已有的 试卷归档封面/(同批次的附件1)保持一致:版式逐项对齐原 .doc、
字体取自仓库公共字体包 ../fonts.tex、每项尺寸都在注释里写明换算过程。

涉及范围

  • 新建目录 试卷归档目录/,含:
    • oucgddir.sty —— 版式包(页面、字号、列宽行列高、表格环境、单元格宏、标题)
    • 试卷归档目录.tex —— 正文入口(12 项核对清单)
    • 试卷归档目录.pdf —— 成品样张
    • README.md —— 用法、版式参数表、实测校验数据、踩过的坑
  • 仓库根 README.md:模板清单表加一行;「七个模板」改「八个模板」
  • 根 fonts.tex:文件头注释「七个模板」改「八个模板」

原件关键数据(已从 docx XML 提取,供核验)

项 原值 换算
纸张 pgSz 11906×16838 twips A4 210.00×297.00 mm
上下页边距 pgMar 1440 twips 25.40 mm
左右页边距 pgMar 1800 twips 31.75 mm
表宽 tblGrid 1308+4385+2847 = 8540 twips 150.636 mm
列宽 1308 / 4385 / 2847 twips 23.072 / 77.346 / 50.218 mm
内边距 tblCellMar left/right 108 twips,top/bottom 0 1.905 mm / 0
边框 w:sz=4(1/8 pt 单位) 0.5 pt
行高 trHeight 1165 / 780×12 / 803,hRule=exact 20.549 / 13.758 / 14.164 mm
标题 楷体 w:sz=48,firstLine=2640 twips,firstLineChars=550 24 pt,缩进 46.55 mm,文字「归␣␣档␣␣目␣␣录」
表头 楷体 w:sz=36 + w:b 18 pt 粗
表头第三格 两个独立段落:「标注」18 pt 粗 /「(确认存档后在此栏打√)」w:szCs=21 18 pt / 10.45 pt
序号列 w:sz=24 + w:b 12 pt 粗
内容列 w:sz=24 12 pt

原件字体:中文「方正楷体_GB2312」(商业,不可分发),西文/数字 Times New Roman。
替换为 OUC Kai(霞鹜文楷 GB2312 子集,OFL 1.1)+ TeX Gyre Termes(Times 度量兼容)。

验收标准

  1. xelatex 试卷归档目录.tex 编译通过,1 页,零警告(无 Overfull / Underfull / 缺字)。
  2. 用 pymupdf 读 PDF 与原稿(WPS 导出的 pdf)逐位对比:
    • 表格 4 条竖线 x、14 条横线 y:偏差 ≤ 0.01 mm
    • 32 行文字水平中心:偏差 ≤ 0.2 pt
    • 字号 24 / 18 / 12 / 10.45 pt 全部精确(用 bp 单位,不用 TeX pt)
  3. 与原稿的唯一主动偏离:原表 tblGrid 150.636 mm 比原版心 146.50 mm 宽
    4.14 mm(原文档本来就左右各溢出 2.07 mm,靠 jc=center 掩盖)。本模板把
    版心直接设成表宽,纸面绝对位置与原稿一致但不再溢出版心、不产生 Overfull。
  4. 全库商业字体残留检查:正式源码零使用(只在注释里说明「原用什么、现改成什么」)。
  5. README 按 试卷归档封面/README.md 的体例写:用法 / 版式参数表 / 实测数据 / 踩坑记录。

已知的非问题(记录备查)

  • 纵向 0.5 pt 残差:原稿序号列 Time New Roman、正文方正楷体,Word 让两种字体
    各自按自身 ascent 落基线(原稿实测同行为 232.25 vs 231.77,差 0.48 pt)。这是
    字体度量差,不是排版错误。
  • 像素级差分约 1.1%,全部集中在笔画形状(汉字字形不同),字宽逐字相同。
## 背景 / 诉求 用户提供原件: ``` C:\Users\Yongquan\SynologyDrive\授课\数字逻辑\2025\归档\附件2:信息科学与工程学院归档目录(理论课).doc ``` 要求「改 latex」——把这份 Word 表做成 LaTeX 模板,并入 `ouc_latex_template` 仓库, 做法与已有的 `试卷归档封面/`(同批次的附件1)保持一致:版式逐项对齐原 `.doc`、 字体取自仓库公共字体包 `../fonts.tex`、每项尺寸都在注释里写明换算过程。 ## 涉及范围 - 新建目录 `试卷归档目录/`,含: - `oucgddir.sty` —— 版式包(页面、字号、列宽行列高、表格环境、单元格宏、标题) - `试卷归档目录.tex` —— 正文入口(12 项核对清单) - `试卷归档目录.pdf` —— 成品样张 - `README.md` —— 用法、版式参数表、实测校验数据、踩过的坑 - 仓库根 `README.md`:模板清单表加一行;「七个模板」改「八个模板」 - 根 `fonts.tex`:文件头注释「七个模板」改「八个模板」 ## 原件关键数据(已从 docx XML 提取,供核验) | 项 | 原值 | 换算 | |---|---|---| | 纸张 | `pgSz` 11906×16838 twips | A4 210.00×297.00 mm | | 上下页边距 | `pgMar` 1440 twips | 25.40 mm | | 左右页边距 | `pgMar` 1800 twips | 31.75 mm | | 表宽 | `tblGrid` 1308+4385+2847 = 8540 twips | 150.636 mm | | 列宽 | 1308 / 4385 / 2847 twips | 23.072 / 77.346 / 50.218 mm | | 内边距 | `tblCellMar` left/right 108 twips,top/bottom 0 | 1.905 mm / 0 | | 边框 | `w:sz=4`(1/8 pt 单位) | 0.5 pt | | 行高 | `trHeight` 1165 / 780×12 / 803,`hRule=exact` | 20.549 / 13.758 / 14.164 mm | | 标题 | 楷体 `w:sz=48`,`firstLine=2640` twips,`firstLineChars=550` | 24 pt,缩进 46.55 mm,文字「归␣␣档␣␣目␣␣录」 | | 表头 | 楷体 `w:sz=36` + `w:b` | 18 pt 粗 | | 表头第三格 | 两个独立段落:「标注」18 pt 粗 /「(确认存档后在此栏打√)」`w:szCs=21` | 18 pt / 10.45 pt | | 序号列 | `w:sz=24` + `w:b` | 12 pt 粗 | | 内容列 | `w:sz=24` | 12 pt | 原件字体:中文「方正楷体_GB2312」(商业,不可分发),西文/数字 Times New Roman。 替换为 OUC Kai(霞鹜文楷 GB2312 子集,OFL 1.1)+ TeX Gyre Termes(Times 度量兼容)。 ## 验收标准 1. `xelatex 试卷归档目录.tex` 编译通过,**1 页,零警告**(无 Overfull / Underfull / 缺字)。 2. 用 pymupdf 读 PDF 与原稿(WPS 导出的 pdf)逐位对比: - 表格 4 条竖线 x、14 条横线 y:**偏差 ≤ 0.01 mm** - 32 行文字水平中心:**偏差 ≤ 0.2 pt** - 字号 24 / 18 / 12 / 10.45 pt 全部精确(用 `bp` 单位,不用 TeX pt) 3. 与原稿的**唯一主动偏离**:原表 `tblGrid` 150.636 mm 比原版心 146.50 mm 宽 4.14 mm(原文档本来就左右各溢出 2.07 mm,靠 `jc=center` 掩盖)。本模板把 版心直接设成表宽,纸面绝对位置与原稿一致但不再溢出版心、不产生 Overfull。 4. 全库商业字体残留检查:正式源码零使用(只在注释里说明「原用什么、现改成什么」)。 5. README 按 `试卷归档封面/README.md` 的体例写:用法 / 版式参数表 / 实测数据 / 踩坑记录。 ## 已知的非问题(记录备查) - 纵向 0.5 pt 残差:原稿序号列 Time New Roman、正文方正楷体,Word 让两种字体 各自按自身 ascent 落基线(原稿实测同行为 232.25 vs 231.77,差 0.48 pt)。这是 字体度量差,不是排版错误。 - 像素级差分约 1.1%,全部集中在笔画形状(汉字字形不同),字宽逐字相同。
Author
Owner

已完成并推送 main(8fa44b1),工单收尾。

交付内容

新建 试卷归档目录/,4 个文件:

文件 规模 内容
oucgddir.sty 24 KB 版式包,每项尺寸都附 Word→LaTeX 换算过程与踩坑说明
试卷归档目录.tex 3.3 KB 12 项核对清单
试卷归档目录.pdf 25 KB 成品样张,1 页
README.md 9.4 KB 用法 / 版式参数表 / 实测校验 / 五个坑

同步改了根 README.md 的模板清单(加一行、七个→八个)与 fonts.tex 头注释。

验收结果(逐条对工单要求)

1. 编译 — xelatex 试卷归档目录.tex 通过,1 页,零警告(Overfull / Underfull / 缺字全为 0)。
另从远端 git clone --depth 1 到干净目录重编,同样零警告,且与仓库内 PDF 像素差为 0(编译完全可复现)。

2. 与原稿逐位对比(pymupdf 读两版 PDF)

表格竖线 x (mm)  原稿 29.686 / 52.758 / 130.104 / 180.322
                 新版 29.687 / 52.758 / 130.104 / 180.321    Δ ≤ 0.001
表格横线 y (mm)  14 条                                        Δ ≤ 0.006
32 行水平中心                                                Δ ≤ 0.11 pt
32 行距行顶      表头三格 Δ ≤ 0.02,表体 Δ ≤ 0.57(字体度量差)
字号             24.00 / 18.00 / 12.00 / 10.45            全部精确

比工单里定的「≤ 0.01mm / ≤ 0.2pt」还严一档。

3. 唯一主动偏离 — 按工单第 3 条:原表 150.636mm 比原版心 146.50mm 宽 4.14mm,
本模板把版心设成表宽,纸面绝对位置不变、不再溢出版心。

4. 商业字体残留 — 全库 grep 确认正式源码零使用,命中的全是注释里
「原用什么 → 现改成什么」的说明。

5. README — 按 试卷归档封面/README.md 体例:文件表 / 编译 / 用法 / 版式参数表 /
实测校验 / 五个坑 / 字体 / 一个已知的不改动。

过程中解决的五个坑(都已写进 README 与 sty 注释)

  1. \fontsize 必须用 bp — TeX pt 比 PostScript pt 大 0.36%,\fontsize{24}{28.8}
    实测只有 23.91,与原稿 24.00 对不上。

  2. xeCJK 吞连续半角空格 — 标题「归␣␣档␣␣目␣␣录」照抄进源码编译成紧贴的
    「归档目录」。改用 \gdgap(\kern 24bp)手动摆,四字间隔恒 48pt。

  3. 最隐蔽的一个:必须 \xeCJKsetup{PunctStyle=plain} — 默认 quanjiao 会把
    全角括号的 advance 从 1.0em 压到 0.5em,省下的空间记在行首,导致含括号的行
    整行右移
    (「试卷(项目设计报告)」原稿 x0=199.20,默认排出 203.43,差 4.23pt,
    且偏移量随括号个数变化)。Word 不做这个挤压,关掉反而与原件一致。

  4. tabularray 三处计宽/计高都要实测标定 — 它把边框线宽算进列宽(wd 要减
    0.1764mm 而非"按竖线根数分摊");ht= 是内容区高、不含 hline(每行实际高
    0.5pt,13 行累计 6.5pt);整个 tblr 盒子比 Σwd+colsep+线宽 又多 0.4945pt
    (不补足就报 Overfull \hbox (0.49452pt too wide))。

  5. 单元格整体下移只有"尾部 \vspace*"有效 — 五种手段实测:顶部 \vspace*
    会被首行 ascent 吃掉(3.6pt 远小于 18pt 字的 ascent,写了等于没写);顶部
    \rule 小 h 无效、大 h 过量,没有可用区间;\raisebox{\vbox{}} 被 m 居中
    完全抵销。只有尾部位移能用(且与位移是 2:1 关系,实测灵敏度 0.778)。
    中途我把方向写反过一次(−3.56 得到下移 2.55pt),靠实测才纠正过来。

一个查清但判定"不是问题"的点

纵向 0.5pt 残差来自字体度量:原稿序号列 Times New Roman、正文方正楷体,
Word 让两种字体各自按自身 ascent 落基线(原稿同一行实测 232.25 vs 231.77,
差 0.48pt)。新版用 Termes + OUC Kai 复刻了同样的相对关系,且同一行内更整齐
(两字体 ascent 恰好一致)。像素级差分约 1.1%,全部集中在汉字笔画形状上,
字宽逐字相同(实测「考试签到表」60.00pt、「试卷(设计项目报告)」120.00pt,与原稿全等)。

已完成并推送 main(`8fa44b1`),工单收尾。 ## 交付内容 新建 `试卷归档目录/`,4 个文件: | 文件 | 规模 | 内容 | |---|---|---| | `oucgddir.sty` | 24 KB | 版式包,每项尺寸都附 Word→LaTeX 换算过程与踩坑说明 | | `试卷归档目录.tex` | 3.3 KB | 12 项核对清单 | | `试卷归档目录.pdf` | 25 KB | 成品样张,1 页 | | `README.md` | 9.4 KB | 用法 / 版式参数表 / 实测校验 / 五个坑 | 同步改了根 `README.md` 的模板清单(加一行、七个→八个)与 `fonts.tex` 头注释。 ## 验收结果(逐条对工单要求) **1. 编译** — `xelatex 试卷归档目录.tex` 通过,1 页,**零警告**(Overfull / Underfull / 缺字全为 0)。 另从远端 `git clone --depth 1` 到干净目录重编,同样零警告,且与仓库内 PDF **像素差为 0**(编译完全可复现)。 **2. 与原稿逐位对比**(pymupdf 读两版 PDF) ``` 表格竖线 x (mm) 原稿 29.686 / 52.758 / 130.104 / 180.322 新版 29.687 / 52.758 / 130.104 / 180.321 Δ ≤ 0.001 表格横线 y (mm) 14 条 Δ ≤ 0.006 32 行水平中心 Δ ≤ 0.11 pt 32 行距行顶 表头三格 Δ ≤ 0.02,表体 Δ ≤ 0.57(字体度量差) 字号 24.00 / 18.00 / 12.00 / 10.45 全部精确 ``` 比工单里定的「≤ 0.01mm / ≤ 0.2pt」还严一档。 **3. 唯一主动偏离** — 按工单第 3 条:原表 150.636mm 比原版心 146.50mm 宽 4.14mm, 本模板把版心设成表宽,纸面绝对位置不变、不再溢出版心。 **4. 商业字体残留** — 全库 grep 确认正式源码零使用,命中的全是注释里 「原用什么 → 现改成什么」的说明。 **5. README** — 按 `试卷归档封面/README.md` 体例:文件表 / 编译 / 用法 / 版式参数表 / 实测校验 / 五个坑 / 字体 / 一个已知的不改动。 ## 过程中解决的五个坑(都已写进 README 与 sty 注释) 1. **`\fontsize` 必须用 `bp`** — TeX pt 比 PostScript pt 大 0.36%,`\fontsize{24}{28.8}` 实测只有 23.91,与原稿 24.00 对不上。 2. **xeCJK 吞连续半角空格** — 标题「归␣␣档␣␣目␣␣录」照抄进源码编译成紧贴的 「归档目录」。改用 `\gdgap`(`\kern 24bp`)手动摆,四字间隔恒 48pt。 3. **最隐蔽的一个:必须 `\xeCJKsetup{PunctStyle=plain}`** — 默认 `quanjiao` 会把 全角括号的 advance 从 1.0em 压到 0.5em,省下的空间记在行首,导致**含括号的行 整行右移**(「试卷(项目设计报告)」原稿 x0=199.20,默认排出 203.43,差 4.23pt, 且偏移量随括号个数变化)。Word 不做这个挤压,关掉反而与原件一致。 4. **tabularray 三处计宽/计高都要实测标定** — 它把边框线宽算进列宽(`wd` 要减 0.1764mm 而非"按竖线根数分摊");`ht=` 是内容区高、不含 hline(每行实际高 0.5pt,13 行累计 6.5pt);整个 tblr 盒子比 `Σwd+colsep+线宽` 又多 0.4945pt (不补足就报 `Overfull \hbox (0.49452pt too wide)`)。 5. **单元格整体下移只有"尾部 `\vspace*`"有效** — 五种手段实测:顶部 `\vspace*` 会被首行 ascent 吃掉(3.6pt 远小于 18pt 字的 ascent,写了等于没写);顶部 `\rule` 小 h 无效、大 h 过量,没有可用区间;`\raisebox{\vbox{}}` 被 m 居中 完全抵销。只有尾部位移能用(且与位移是 2:1 关系,实测灵敏度 0.778)。 中途我把方向写反过一次(−3.56 得到下移 2.55pt),靠实测才纠正过来。 ## 一个查清但判定"不是问题"的点 纵向 0.5pt 残差来自**字体度量**:原稿序号列 Times New Roman、正文方正楷体, Word 让两种字体各自按自身 ascent 落基线(原稿同一行实测 232.25 vs 231.77, 差 0.48pt)。新版用 Termes + OUC Kai 复刻了同样的相对关系,且同一行内更整齐 (两字体 ascent 恰好一致)。像素级差分约 1.1%,全部集中在汉字笔画形状上, 字宽逐字相同(实测「考试签到表」60.00pt、「试卷(设计项目报告)」120.00pt,与原稿全等)。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/ouc_latex_template#7