Files
ouc_latex_template/年度考核登记表/README.md
T
laoyang 1f807e9cce 所有模板目录改为中文名,并入幻灯片与科技报告两个仓库(#3)
目录改名(git mv 保留历史,包名不变):
  exam/   -> 试卷/
  form/   -> 年度考核登记表/
  form2/  -> 劳务发放说明表/
  course/ -> 课程执行大纲/

改名即可编译:实测 6 个模板在含中文的目录下 XeLaTeX 均零报错,
PDF 逐页文本与改名前的版本完全一致(0 页差异,仅元数据时间戳变化)。

并入两个此前独立维护的仓库:
  ouc-slide-latex-template  -> 幻灯片/
  ouc-report-latex-template -> 科技报告/
带入了 theme/ fonts/ logos/ figs/ cls/ input/ 与 fontawesome.pdf,
字体随模板附带(无须在系统安装)。中间文件一律不入库。

同步修正的文档:根 README 目录表改为中文名并说明统一维护;
四个子 README 的标题;ouclw.sty 注释里对 form/ 的交叉引用;
幻灯片与科技报告 README 里「从旧仓库 clone」「按年份切分支」等已失效的说明
(并入后只有 main 一个分支,各年份 TeX Live 通用)。

两个迁入模板的 PDF 保留源仓库原版(逐字节一致),未重新编译:
源 PDF 出自 TeX Live 2026,本机为 2022,重新编译会让结尾页装饰层定位
产生细微偏移,保留原版以保证样张与原来完全一致。
2026-10-26 18:31:04 +08:00

146 lines
7.0 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.
# 年度考核登记表 — 中国海洋大学 教职工年度考核登记表(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` 累积误差而取整所致,肉眼不可辨)。