# 年度考核登记表 — 中国海洋大学 教职工年度考核登记表(LaTeX 版) 把学校下发的 Word 版《中国海洋大学教职工年度考核登记表》复刻为 LaTeX 模板, 版式与原 `.docx` 逐项对齐,**表格里不含任何真人信息**(姓名/职工号/出生年月/ 单位/岗位一律 `×` 占位)。 ## 文件 | 文件 | 说明 | | :-- | :-- | | `年度考核登记表.tex` | 主文件。填表只改第 1 节(基本信息)与 `\khsummary`(年度总结) | | `ouckhtb.sty` | 版式包。页面/字体/列宽/行高/全部尺寸都写在这里,附换算注释 | ## 编译 ```bash xelatex 年度考核登记表.tex xelatex 年度考核登记表.tex # 跑两遍,第二遍取到正确页码 ``` 需要 **XeLaTeX**(用 fontspec + xeCJK 调系统字体),并安装: `ctex`、`geometry`、`fontspec`、`xeCJK`、`tabularray`。 实测环境:TeX Live 2022 + `tabularray 2022A`。用 LuaLaTeX 理论上也行,但未验证。 产出 2 页、A4、正反面打印正好。 ## 改内容 ### 基本信息 ```latex \khtbyear{2025} % 表头“×××× 年度”那一行 \newcommand{\khnum}{0000000} % 职工号 \newcommand{\khname}{{\fangsong ××}} % 姓名 \newcommand{\khsex}{{\fangsong ×}} % 性别 \newcommand{\khbirth}{{\fangsong ××××.××}} % 出生年月 \newcommand{\khdept}{{\fangsong ××××××××}} % 单位(学部 / 学院) \newcommand{\khsubdept}{{\fangsong ××××××××}} % 系(研究所、实验室、科室) \newcommand{\khparty}{{\fangsong ××××}} % 政治面貌 \newcommand{\khtitle}{{\fangsong ×××}} % 现专业技术职务 \newcommand{\khpost}{{\fangsong ×××}} % 所聘岗位 ``` > **`{\fangsong ...}` 不能去掉。** 占位符 `×` 是 U+00D7,fontspec 会把它当 > ASCII 交给 Times New Roman,而那儿的 `×` 是 **1em 宽的数学乘号** > (14pt 下一个占 14pt),几个就能撑破整列。包上 `\fangsong` 才会按全角汉字宽度排。 ### 年度总结 ```latex \newcommand{\khsummary}{% 第一段……\par 第二段……\par 第三段……} ``` 段间用 `\par`(不要用空行 —— 空行在 `\newcommand` 参数里会被当成分段但不易数)。 首行自动缩进 2 字,末行自动带「本人签名 / 年 月 日」,都写在 `ouckhtb.sty` 里。 ## 版式数据来源 所有尺寸都从 `.docx` 内部的 OOXML 数值换算,不使用目测: ``` twips → mm : mm = twips / 1440 × 25.4 twips → pt : pt = twips / 20 (1 pt = 1/72 in) w:sz : 半磅值,÷ 2 即 pt ``` | 项 | docx 值 | LaTeX 值 | | :-- | :-- | :-- | | 纸张 | 11907 × 16840 twips | A4(210 × 297 mm) | | 表宽 `tblW` | 8976 twips | 158.33 mm(11 列 + 边框) | | 11 个 `gridCol` | 1087 283 1221 1047 284 1105 952 600 870 80 1447 | 见 `ouckhtb.sty` 第 3.1 节 | | 正文字号 | `w:sz=28` | 仿宋 14 pt / 行距 15.6 pt | | 大标题 | `w:sz=44`,`w:spacing=-14` | 黑体 22 pt / 字距 −0.7 pt | | 行高 `trHeight` | 412 460 939 1261 1252 1009 556 1258 1258 | 7.27 / 8.11 / 16.56 / 22.24 / 22.08 / 17.80 / 9.81 / 22.19 / 22.19 mm | ### 页边距为什么不照抄 docx docx 是左右各 30 mm 版心(150 mm),但表宽 158.33 mm 比它还宽 8.33 mm, Word 是靠 `tblPr/jc=center` 把这张表“压”进页边距里的。 本模板把页边距改成 `(210 − 158.33)/2 = 25.835 mm`,使 `\textwidth` 恰好等于表宽: - 表格天然居中,不需要 `\leftskip` / `\centerline` 之类的偏移; - **表格在纸面上的绝对位置与 Word 完全一致**(左右各 25.835 mm); - 编译时不会刷 `Overfull \hbox`。 表外文字(标题、脚注)仍是水平居中,视觉上与 30 mm 版心没有差别。 ## 排版时的四个坑(sty 里都有详细注释) 1. **合并单元格不折行。** `cell{r}{c}={c=n}{c}` 的单元类型 `{c}` 是 LR 模式, 格子里的文字比所跨各列合计更宽时,它**不折行,而是把列撑宽、整表超出版心**。 实测「系(研究所、实验室、科室)」把表从 448 pt 撑到 559 pt。 → 所以合并格里的文字一律包 `\khtbfit{跨度宽宏}{文字}`。 单列的 `Q[c,m,wd=…]` 没有这个问题(超了只是溢出,列宽不变)。 2. **合并格里的 `\hsize` 没被重设。** span=10 的格子里 `\hsize` 仍是整页版心宽, 长文本会按 450 pt 折行、冲出格子。→ 长内容必须用定宽 `\parbox`(`\khtbcell`)。 3. **跨度声明只有 `{c=n}{c}` 一种写法。** `={c=n}`、`={n}{c}`、`={span=n}{c}` 都不认,最后那个会报 `The key 'tblr-cell-span/span' is unknown`。 4. **`colspec` / `row{}` 里不能放宏。** tabularray 在宏展开之外解析列类型, 会报 `Unexpandable command … inside column type`。所以列宽只能字面写死。 另外两个容易忘的: - `longtblr` 默认会把各列按 `\textwidth` 等比拉伸(`tblr` 不会),必须写 `stretch=0`; - `longtblr` 会在续页处印「表 0: (Continued)」,必须用 `\DefTblrTemplate` 把 `caption` / `capcont` / `conthead-text` / `contfoot-text` **四个模板全清**。 ## 与原 docx 的已知差异 | 位置 | docx | 本模板 | 说明 | | :-- | :-- | :-- | :-- | | 表头「×××× 年度」 | `firstLine` 缩进 2 字、未设居中 | 居中 | 更像原排版疏漏,按意图改居中。想还原就把 `\khtbtitle` 里的 `\centering` 换成 `\hspace*{2\ccwd}` | | 「师德考核结果」首列 | `师师德考核结果` | `师德考核结果` | docx 原文首字重复(WPS 竖排遗留),已按正常写法更正 | | 「单位年度考核建议档次」首列 | `单单位年度考核建议档次` | `单位年度考核建议档次` | 同上 | | 单元格内边距 | 左右各 108 twips(1.905 mm) | 0 | c10 只有 1.41 mm,比两倍内边距还窄,统一内边距会算出负宽。代价是文字可贴竖线,但全部单元格本就水平居中,观感一致 | | 未勾选框 | Wingdings `¨`(char 0x00A8) | U+25A1 `□` | Wingdings 在 Linux/macOS 上不可靠。仿宋、黑体都有 `□`,**宋体没有** —— 改正文为宋体时需另指方框字体 | | 电子签名图片 | 内嵌两张手写签名 JPEG | 无 | 模板不含真人信息 | ## 校验方法(想改版式时照这个验) 不要靠肉眼看 PDF。用矢量坐标对: ```bash xelatex 年度考核登记表.tex pdftocairo -svg 年度考核登记表.pdf pg.svg # 转成 SVG 取精确线条坐标 pdftotext -bbox 年度考核登记表.pdf - # 取每个字的 xMin/yMin/xMax/yMax ``` 正确结果应当满足: - 表格左边界 73.14 pt、右边界 520.91 pt(宽度 447.8 pt ≈ 157.96 mm); - 表格所有横线都是 **10 段**(8 个网格列位置被合并掉,只剩 10 段可见); - 页数为 2; - `grep "Overfull\|too small" 年度考核登记表.log` 无输出。 当前状态:**零 Overfull、零 Underfull、2 页、表宽 157.96 mm**(目标 158.33 mm, 差 0.23%,为消除 0.45 pt 的 `Overfull` 累积误差而取整所致,肉眼不可辨)。