单元格整体下移只有"尾部 \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,与原稿全等)。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
背景 / 诉求
用户提供原件:
要求「改 latex」——把这份 Word 表做成 LaTeX 模板,并入
ouc_latex_template仓库,做法与已有的
试卷归档封面/(同批次的附件1)保持一致:版式逐项对齐原.doc、字体取自仓库公共字体包
../fonts.tex、每项尺寸都在注释里写明换算过程。涉及范围
试卷归档目录/,含:oucgddir.sty—— 版式包(页面、字号、列宽行列高、表格环境、单元格宏、标题)试卷归档目录.tex—— 正文入口(12 项核对清单)试卷归档目录.pdf—— 成品样张README.md—— 用法、版式参数表、实测校验数据、踩过的坑README.md:模板清单表加一行;「七个模板」改「八个模板」fonts.tex:文件头注释「七个模板」改「八个模板」原件关键数据(已从 docx XML 提取,供核验)
pgSz11906×16838 twipspgMar1440 twipspgMar1800 twipstblGrid1308+4385+2847 = 8540 twipstblCellMarleft/right 108 twips,top/bottom 0w:sz=4(1/8 pt 单位)trHeight1165 / 780×12 / 803,hRule=exactw:sz=48,firstLine=2640twips,firstLineChars=550w:sz=36+w:bw:szCs=21w:sz=24+w:bw:sz=24原件字体:中文「方正楷体_GB2312」(商业,不可分发),西文/数字 Times New Roman。
替换为 OUC Kai(霞鹜文楷 GB2312 子集,OFL 1.1)+ TeX Gyre Termes(Times 度量兼容)。
验收标准
xelatex 试卷归档目录.tex编译通过,1 页,零警告(无 Overfull / Underfull / 缺字)。bp单位,不用 TeX pt)tblGrid150.636 mm 比原版心 146.50 mm 宽4.14 mm(原文档本来就左右各溢出 2.07 mm,靠
jc=center掩盖)。本模板把版心直接设成表宽,纸面绝对位置与原稿一致但不再溢出版心、不产生 Overfull。
试卷归档封面/README.md的体例写:用法 / 版式参数表 / 实测数据 / 踩坑记录。已知的非问题(记录备查)
各自按自身 ascent 落基线(原稿实测同行为 232.25 vs 231.77,差 0.48 pt)。这是
字体度量差,不是排版错误。
已完成并推送 main(
8fa44b1),工单收尾。交付内容
新建
试卷归档目录/,4 个文件:oucgddir.sty试卷归档目录.tex试卷归档目录.pdfREADME.md同步改了根
README.md的模板清单(加一行、七个→八个)与fonts.tex头注释。验收结果(逐条对工单要求)
1. 编译 —
xelatex 试卷归档目录.tex通过,1 页,零警告(Overfull / Underfull / 缺字全为 0)。另从远端
git clone --depth 1到干净目录重编,同样零警告,且与仓库内 PDF 像素差为 0(编译完全可复现)。2. 与原稿逐位对比(pymupdf 读两版 PDF)
比工单里定的「≤ 0.01mm / ≤ 0.2pt」还严一档。
3. 唯一主动偏离 — 按工单第 3 条:原表 150.636mm 比原版心 146.50mm 宽 4.14mm,
本模板把版心设成表宽,纸面绝对位置不变、不再溢出版心。
4. 商业字体残留 — 全库 grep 确认正式源码零使用,命中的全是注释里
「原用什么 → 现改成什么」的说明。
5. README — 按
试卷归档封面/README.md体例:文件表 / 编译 / 用法 / 版式参数表 /实测校验 / 五个坑 / 字体 / 一个已知的不改动。
过程中解决的五个坑(都已写进 README 与 sty 注释)
\fontsize必须用bp— TeX pt 比 PostScript pt 大 0.36%,\fontsize{24}{28.8}实测只有 23.91,与原稿 24.00 对不上。
xeCJK 吞连续半角空格 — 标题「归␣␣档␣␣目␣␣录」照抄进源码编译成紧贴的
「归档目录」。改用
\gdgap(\kern 24bp)手动摆,四字间隔恒 48pt。最隐蔽的一个:必须
\xeCJKsetup{PunctStyle=plain}— 默认quanjiao会把全角括号的 advance 从 1.0em 压到 0.5em,省下的空间记在行首,导致含括号的行
整行右移(「试卷(项目设计报告)」原稿 x0=199.20,默认排出 203.43,差 4.23pt,
且偏移量随括号个数变化)。Word 不做这个挤压,关掉反而与原件一致。
tabularray 三处计宽/计高都要实测标定 — 它把边框线宽算进列宽(
wd要减0.1764mm 而非"按竖线根数分摊");
ht=是内容区高、不含 hline(每行实际高0.5pt,13 行累计 6.5pt);整个 tblr 盒子比
Σwd+colsep+线宽又多 0.4945pt(不补足就报
Overfull \hbox (0.49452pt too wide))。单元格整体下移只有"尾部
\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,与原稿全等)。