From 565ec7c505b5b6b4243f2a4df0ef16049a729c2b Mon Sep 17 00:00:00 2001 From: laoyang Date: Fri, 23 Oct 2026 12:01:32 +0800 Subject: [PATCH] =?UTF-8?q?add=20form:=20=E6=95=99=E8=81=8C=E5=B7=A5?= =?UTF-8?q?=E5=B9=B4=E5=BA=A6=E8=80=83=E6=A0=B8=E7=99=BB=E8=AE=B0=E8=A1=A8?= =?UTF-8?q?=20LaTeX=20=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按学校下发的 Word 表逐项复刻,尺寸全部从 docx 的 OOXML 数值换算 (twips→mm/pt),不含真人信息。 - form/ouckhtb.sty 版式包:页面/字体/11 列宽/9 行高/表格环境 - form/年度考核登记表.tex 主文件:占位数据 + 表格 + 年度总结 - form/README.md 用法、版式数据来源、四个排版坑、校验方法 关键排版结论(sty 内均有注释): - 合并格 cell{r}{c}={c=n}{c} 的 {c} 是不折行的 LR 模式,文字超宽会 把列撑宽、整表超出版心(实测 448pt→559pt),故合并格一律包 \khtbfit{跨度宽}{文字} - 合并格里 \hsize 未被重设,长文本须用定宽 \parbox - 跨度声明只有 {c=n}{c} 一种写法 - colspec/row{} 不能放宏(Unexpandable command) - longtblr 须 stretch=0,且要清空四个 caption 模板去掉「表 0」 校验:零 Overfull/Underfull,2 页,表宽 157.96mm(目标 158.33mm)。 --- README.md | 1 + form/README.md | 146 +++++++++++++ form/ouckhtb.sty | 456 ++++++++++++++++++++++++++++++++++++++++ form/年度考核登记表.pdf | Bin 0 -> 45506 bytes form/年度考核登记表.tex | 125 +++++++++++ 5 files changed, 728 insertions(+) create mode 100644 form/README.md create mode 100644 form/ouckhtb.sty create mode 100644 form/年度考核登记表.pdf create mode 100644 form/年度考核登记表.tex diff --git a/README.md b/README.md index e835fa6..c685044 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ | 目录 | 内容 | |---|---| | [`exam/`](exam/) | 期末考试**试卷**与**参考答案及评分标准**模板(XeLaTeX) | +| [`form/`](form/) | 教职工**年度考核登记表**模板(XeLaTeX) | ## 说明 diff --git a/form/README.md b/form/README.md new file mode 100644 index 0000000..2ad3c3d --- /dev/null +++ b/form/README.md @@ -0,0 +1,146 @@ +# form/ — 中国海洋大学 教职工年度考核登记表(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` 累积误差而取整所致,肉眼不可辨)。 \ No newline at end of file diff --git a/form/ouckhtb.sty b/form/ouckhtb.sty new file mode 100644 index 0000000..2b535b7 --- /dev/null +++ b/form/ouckhtb.sty @@ -0,0 +1,456 @@ +%====================================================================== +% ouckhtb.sty — 中国海洋大学 教职工年度考核登记表 版式包 +% +% 依据:2025 年学校下发的 Word 表(WPS 保存的 .docx) +% 目标:版式与原 docx 逐项对齐。所有尺寸都由 docx 内部数值换算而来: +% twips → mm : mm = twips / 1440 * 25.4 +% twips → pt : pt = twips / 20 (1pt = 1/72in) +% w:sz : 半磅值,÷2 即 pt +% +% 用法见同目录 年度考核登记表.tex,参数说明见 README.md +%====================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ouckhtb}[2026/10/23 v1.0 OUC staff annual review form] + +\RequirePackage{geometry} +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{tabularray} + +%====================================================================== +% 1. 页面与版心 +% +% 原 docx sectPr: +% pgSz 11907 × 16840 twips = 210.03 × 297.04 mm → A4 +% pgMar top/bottom 1418 = 25.01 mm +% left/right 1701 = 30.00 mm +% header 851 / footer 992 = 15.01 / 17.50 mm +% +% 原表宽 tblW 8976 twips = 158.33 mm,比 docx 版心(150 mm)宽 8.33 mm, +% Word 靠 tblPr/jc=center 把它居中压进左右页边距。 +% +% ⚠️ 本包【不】照搬 docx 的 30 mm 页边距,而是取 +% left = right = (210 − 158.33)/2 = 25.835 mm +% 使 \textwidth 恰为 158.33 mm。这样: +% · 表格天然居中,无需 leftskip / \centerline 之类的偏移技巧 +% · 表格宽度 = 版心宽度,编译时不会刷 Overfull \hbox +% · 表格在纸面上的绝对位置与 Word 完全相同(左右各 25.835 mm) +% 正文(表外标题、脚注)仍是水平居中,视觉上与 30 mm 版心一致。 +%====================================================================== +\geometry{ + paperwidth = 210mm, + paperheight = 297mm, + totalwidth = 158.33mm, % = 表宽,精确;不要写 left/right(见下) + hmarginratio = 1:1, % 左右等边距,表格自然居中 + top = 25.01mm, + bottom = 25.01mm, + headheight = 0pt, + headsep = 0pt, + footskip = 17.50mm, +} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\pagestyle{plain} + +%====================================================================== +% 2. 字体与字号 +% +% 正文 仿宋 14pt (w:sz=28) +% 表外大标题 黑体 22pt (w:sz=44),docx 另设 w:spacing=-14 +% ⇒ -14/20 = -0.7pt,相对 22pt 即 -3.2% +% “2025 年度”一行 仿宋 16pt (w:sz=32) +% R1C6 的括注 仿宋 12pt (w:sz=24),只有“研究所、实验室、科室” +% 页脚页码 9pt (footer 样式 w:sz=18) +%====================================================================== +\setmainfont{Times New Roman} +\setCJKmainfont{FangSong}[AutoFakeBold=2.5] +\newCJKfontfamily\fangsong{FangSong}[AutoFakeBold=2.5] +\newCJKfontfamily\heiti{SimHei} +\newCJKfontfamily\songti{SimSun} + +% 正文字号;行距 15.6pt 对应 docx docGrid/linePitch=312 twips +\newcommand{\khtbbodyfont}{\fontsize{14}{15.6}\selectfont} +% 括注小字:docx 里“(对考核档次为……需说明原因)”是 12pt (w:sz=24) +\newcommand{\khtbsmallnote}{\fontsize{12}{14}\selectfont} + +% R0C6“系(研究所、实验室、科室)”在 docx 里是混排: +% “系” w:sz=28(14pt),“(研究所、实验室、科室)” w:sz=24(12pt) +% 用下面这个宏按原样排,别整句都用 14pt —— 否则折行位置会与 Word 不同。 +\newcommand{\khtbxi}{\fangsong 系{\fontsize{12}{14}\selectfont (研究所、实验室、科室)\normalfont}} + +%---------------------------------------------------------------------- +% ⚠️ xeCJK 陷阱:局部字体切换命令若紧邻 \par(或落在段落末尾),段末的 +% 字体状态会“溢出”到后面段落,使后续 ASCII 字符被排成别的字体。 +% 故局部切换一律走下面两个包装(内部用 \normalfont 收尾)。 +%---------------------------------------------------------------------- +\newcommand{\KHTBFS}[1]{{\fangsong #1\normalfont}} +\newcommand{\KHTBHT}[1]{{\heiti #1\normalfont}} + +%====================================================================== +% 3. 列的宽度模型(本包最关键的一节,改之前请先读完) +% +% 原 docx tblGrid(11 个网格列,twips → mm): +% c1 1087→19.17 c2 283→ 4.99 c3 1221→21.54 +% c4 1047→18.47 c5 284→ 5.01 c6 1105→19.49 +% c7 952→16.79 c8 600→10.58 c9 870→15.35 +% c10 80→ 1.41 c11 1447→25.52 +% 合计 8976 twips = 158.33mm(与 tblW 一致) +% +% 各行的合并跨度(docx gridSpan,每行之和均为 11): +% R0 2,1,1,2,1,1,1,2 (8 个单元) +% R1 2,3,2,4 (4 个单元) +% R2 2,1,2,2,3,1 (6 个单元) +% R3~R8 1,10 (2 个单元:标签 + 内容栏) +% +%---------------------------------------------------------------------- +% ⚠️⚠️ 四条实测结论(tabularray 2022A),决定了下面的写法: +% +% (a) tabularray 的 wd 是“内容宽”,不含任何内边距;表宽 = Σwd + 竖线宽。 +% 而 Word 的 gridCol 是“含内边距的整格宽”。两者语义相反。 +% +% tabularray 计宽时按 11 根竖线算(左边界那根不算),即 Σwd + 11×0.5pt +% = Σwd + 5.5pt。要让它恰好等于表宽 158.33mm,需 +% Σwd = 158.3267mm − 5.5pt = 158.3267 − 1.9329 = 156.3938mm +% 而 ΣgridCol = 158.3267mm,故每列要减 (158.3267−156.3938)/11 +% = 0.1757mm。(gridCol − 0.1757) 即下面 3.1 节的取值。 +% +% ⚠️ 曾经取 0.1917mm(按 12 根竖线 6pt 算),表宽少 0.5pt, +% longtblr 会一直报 “Table width is too small, need 0.50008pt more!” +% 外加一条 0.5pt 的 Overfull \hbox。差得极小但很碍眼,故校正。 +% +% (b) Word 的 tblCellMar 左右各 108 twips(1.905mm)。本包【不】复现这个 +% 内边距,而取 colsep=0、内容可用宽 = 整格宽。原因:c10 只有 1.41mm, +% 比两倍内边距(3.81mm)还窄,统一 colsep 必然把该列算成负宽而报错。 +% 代价:单元格文字可以贴到竖线上。本表所有单元格都是水平居中,且 +% 窄列标签(如“出生年月”)在 Word 里本来就要折成两行,观感一致。 +% +% (c) ⚠️ 合并单元格(\SetCell[c=n])里的 \hsize【没有】被重设成该跨度的 +% 宽度,它仍是外层版心宽。实测:span=10 的格子里 \linewidth=47.8pt +% 但 \hsize=450.5pt,于是长文本按 450pt 折行、彻底冲出格子 +% (这就是曾经那个 “Overfull \hbox (1644pt too wide)” 的真正来源)。 +% ⇒ 凡是内容较长或含多段的跨列单元格,必须用固定宽的 \parbox 包起来。 +% +% (d) ⚠️⚠️⚠️【最要命的一条】跨列合并格 cell{r}{c}={c=n}{c} 的单元类型 +% {c} 是【不折行的 LR 模式】。格内文字若比所跨各列的合计宽,它不会在 +% 列内折行,而是【把这些列撑宽】,整张表随之超出版心。 +% 实测:“系(研究所、实验室、科室)”共 12 字(14pt ≈ 168pt), +% 塞进 c6-c7(合计 35.90mm ≈ 101.8pt)后,c6-c7 被撑到 126.5pt, +% 整表由 448.3pt 涨到 558.9pt —— 正是那 111.6pt 的 Overfull \hbox。 +% 而【单列】Q[c,m,wd=…] 没有这个问题:内容超出时只溢出、列宽不变 +% (实测在 10.39mm 的 c8 里写 4 个汉字,表宽仍为 448.3pt)。 +% ⇒ 结论:**凡是对齐到合并/窄格里、又必须折行的文字,一律包 \parbox**。 +% 本包为此给每个跨度备了常量与 \khtbfit 包装,见下面 3.2 节。 +%====================================================================== +\newcommand{\khtblwval}{0.5pt} % docx tblBorders sz=4 ⇒ 0.5pt(sz 单位 1/8pt) +\newcommand{\khtbcellmar}{0} % 不再使用内边距,保留名字便于将来调整 + +\newlength{\khtbtblw} +\setlength{\khtbtblw}{158.33mm} % 表宽(含 12 根竖线) + +%---------------------------------------------------------------------- +% 3.1 各列宽(= gridCol − 0.1917mm),单位 mm,四位小数足够。 +% 与 khtbtable 环境里 colspec 的 wd 值必须逐字一致。 +%---------------------------------------------------------------------- +\newcommand{\khtbwa}{18.9661mm} % c1 +\newcommand{\khtbwb}{4.7844mm} % c2 +\newcommand{\khtbwc}{21.3297mm} % c3 +\newcommand{\khtbwd}{18.2605mm} % c4 +\newcommand{\khtbwe}{4.8020mm} % c5 +\newcommand{\khtbwf}{19.2836mm} % c6 +\newcommand{\khtbwg}{16.5848mm} % c7 +\newcommand{\khtbwh}{10.3759mm} % c8 +\newcommand{\khtbwi}{15.1384mm} % c9 +\newcommand{\khtbwj}{1.2037mm} % c10 +\newcommand{\khtbwk}{25.3162mm} % c11(多承担了 0.0198mm 的取整余量) + +%---------------------------------------------------------------------- +% 3.2 各跨度的可用宽(= 所跨各列 wd 之和) +%---------------------------------------------------------------------- +\newcommand{\khtbspanA}{23.7505mm} % c1-c2 职工号 / 单 位 / 政治面貌 +\newcommand{\khtbspanB}{44.3922mm} % c3-c5 单位名(学部 / 学院) +\newcommand{\khtbspanC}{35.8684mm} % c6-c7 系(研究所、实验室、科室) +\newcommand{\khtbspanD}{52.0342mm} % c8-c11 系名 / 学院名 +\newcommand{\khtbspanE}{23.0625mm} % c4-c5 现专业技术职务 +\newcommand{\khtbspanF}{26.7180mm} % c8-c10 所聘岗位 +\newcommand{\khtbspanG}{26.5199mm} % c10-c11 出生年月值 +\newcommand{\khtbspanH}{24.0856mm} % c5-c6 姓名值 / 性别值 + +% 右侧内容栏(c2-c11,跨 10 列)的可用宽 = 十列 wd 之和。 +% ⚠️ 不要再用“实测 \linewidth”得到的那个 379.65pt:它是带竖线、且被 +% xeCJK 行首调整过的结果,换算成 mm 后比真实格宽窄 7mm,会让签字横线 +% 和勾选框提前收尾、右侧留出一大段空白。 +\newcommand{\khtbcellw}{137.0792mm} + +%====================================================================== +% 4. 行高 +% +% 原 docx trHeight + hRule=atLeast(twips → mm): +% R0 412→7.27 R1 460→8.11 R2 939→16.56 +% R3 1261→22.24 R4 1252→22.08 R5 1009→17.80 +% R6 556→ 9.81 R7 1258→22.19 R8 1258→22.19 +% +% ⚠️ tabularray 的 ht= 经实测同为“最小行高”(ht=0pt 与 ht=5mm 同高, +% ht=22mm 才撑开),与 Word 的 atLeast 语义一致 —— 内容多时行会自动 +% 长高,与 Word 表现相同,无需额外处理。 +%====================================================================== + +%====================================================================== +% 5. 表格环境 +% +% ⚠️⚠️ 必须用 longtblr 而不是 tblr: +% 本表内容使总高远超一页可用高度(原 docx 也是 2 页)。而 tblr 是 +% 一整块不可分割的盒子 —— 装进 \setbox 后报 Overfull \vbox (140pt), +% 第 1 页只剩标题、表格整体被推到第 2 页。longtblr 才支持按行断页。 +% +% ⚠️ longtblr 默认会给每页续接处印“表 0: (Continued)”。本表是公文表格, +% 绝不能出现这种字样,故下面用 \DefTblrTemplate 把 +% caption / capcont / conthead-text / contfoot-text 四个模板全部清空。 +% (只写 caption={} 不够,续页标题仍会出来。) +% +% ⚠️⚠️ colspec 与 row{} 必须字面写在这里,不能先存进宏再展开: +% tabularray 的列类型解析在宏展开之外进行,会报 +% “Unexpandable command \xxx inside column type”。 +% (所以上面 3.1 节的 \khtbwa… 只作文档用,不能拼进 colspec。) +% +% ⚠️⚠️⚠️ stretch=0 必须写:longtblr(与 tblr 不同)默认把各列按 \textwidth +% 等比拉伸,实测 11 列 wd 合计 450.46pt 的表被拉成 467.16pt(+16.7pt), +% 表格右边界从 523.7pt 越到 540.4pt,压在页边距外。 +% 加上 stretch=0 后实测宽 448.3pt,与版心严格一致。 +% +% ⚠️⚠️ 【易错点】单元格合并(跨度)全部写死在本环境里,用 +% cell{行}{列}={c=n}{c} +% 声明,而【不要】在数据行里用 \SetCell[c=n]{c}。原因: +% · \SetCell 之后要补若干个空 &,补几个取决于该格跨几列;一旦 +% 某一个数错一位,同行后面所有单元格会整体错列到窄列(如 1.2mm +% 的 c10)里去,报出【每一行都超宽】的 Overfull,从行号上完全 +% 看不出是哪一行错了 —— 这个坑本包踩过。 +% · cell{r}{c}={c=n}{c} 把跨度与数据行分离,每行老老实实写满 +% 11 个单元格,行列对应一目了然。 +% ⚠️ 正确写法只有 {c=n}{c};={c=n}、={n}{c}、={span=n}{c} 都不认。 +% {c=n} 的那个 n 是【列数】,不是“跨度”关键字。 +% 因为本包只服务这一张表,跨度直接写死在下面,.tex 里不用再管。 +% +% docx 各行的 gridSpan(改表时对着数): +% R0 2,1,1,2,1,1,1,2 R1 2,3,2,4 R2 2,1,2,2,3,1 R3~R8 1,10 +% +% ⚠️ 出现在下面选项里的宏名一律不带 @:tabularray 解析选项时 @ 不是 +% 字母,\khtb@lw 会被拆成 \khtb + @lw → Undefined control sequence。 +%====================================================================== +\DefTblrTemplate{caption}{default}{} +\DefTblrTemplate{capcont}{default}{} +\DefTblrTemplate{conthead-text}{default}{} +\DefTblrTemplate{contfoot-text}{default}{} + +\newenvironment{khtbtable}{% + \par\begingroup + \begin{longtblr}[label=none]{ + colspec={ + Q[c,m,wd=18.9661mm] Q[c,m,wd=4.7844mm] Q[c,m,wd=21.3297mm] + Q[c,m,wd=18.2605mm] Q[c,m,wd=4.8020mm] Q[c,m,wd=19.2836mm] + Q[c,m,wd=16.5848mm] Q[c,m,wd=10.3759mm] Q[c,m,wd=15.1384mm] + Q[c,m,wd=1.2037mm] Q[c,m,wd=25.3162mm] + }, + colsep=0pt, rowsep=0pt, stretch=0, + hline{1-Z}={\khtblwval}, vline{1-Z}={\khtblwval}, + row{1}={ht=7.27mm}, row{2}={ht=8.11mm}, row{3}={ht=16.56mm}, + row{4}={ht=22.24mm}, row{5}={ht=22.08mm}, row{6}={ht=17.80mm}, + row{7}={ht=9.81mm}, row{8}={ht=22.19mm}, row{9}={ht=22.19mm}, + %---- R0 职工号|值|姓名|值|性别|值|出生年月|值 + cell{1}{1}={c=2}{c}, cell{1}{5}={c=2}{c}, cell{1}{10}={c=2}{c}, + %---- R1 单位|单位名|系(研究所、实验室、科室)|系名 + cell{2}{1}={c=2}{c}, cell{2}{3}={c=3}{c}, + cell{2}{6}={c=2}{c}, cell{2}{8}={c=4}{c}, + %---- R2 政治面貌|值|现专业技术职务|值|所聘岗位|值 + cell{3}{1}={c=2}{c}, cell{3}{4}={c=2}{c}, + cell{3}{6}={c=2}{c}, cell{3}{8}={c=3}{c}, + %---- R3~R8 竖排标签|内容栏 + cell{4}{2}={c=10}{c}, cell{5}{2}={c=10}{c}, cell{6}{2}={c=10}{c}, + cell{7}{2}={c=10}{c}, cell{8}{2}={c=10}{c}, cell{9}{2}={c=10}{c}, + }% +}{% + \end{longtblr}\par\endgroup} + +%====================================================================== +% 6. 单元格内容包装(见 3 节结论 c 与 d) +% +% 统一入口,.tex 里只用下面三个宏,不要直接把长文字写进 & 之间。 +%====================================================================== +% \khtbfit{跨度宽宏}{内容} —— 定宽、水平居中、可折行 +% 例:\khtbfit{\khtbspanC}{系(研究所、实验室、科室)} +\newcommand{\khtbfit}[2]{\parbox{#1}{\centering #2}} + +% \khtbcell{内容} —— 整条右侧内容栏(c2-c11),垂直居中 +\newcommand{\khtbcell}[1]{\parbox{\khtbcellw}{#1}} +% \khtbcellb{内容} —— 同上,内容贴底(用于签字栏) +\newcommand{\khtbcellb}[1]{\parbox[b]{\khtbcellw}{#1}} + +%====================================================================== +% 7. 竖排栏目标签 +% +% 只有 R3C0 的“年度总结”在 docx 里是【一个字一个段落】显式堆出来的 +% (R3C0 有 16 个 ,“年”“度”“总”“结”各占一段)。 +% 其余窄列标签(R4“系(所、实验室、科室)考评意见”、R5“师德考核结果”、 +% R6“单位年度考核建议档次”、R7“年度考核结果”)在 docx 里都是 +% 【一个普通段落】,靠列窄自然折行,所以包个 \khtbfit 直接写文字即可。 +%====================================================================== +\newcommand{\khtbvert}[1]{% + \begingroup + \khtbbodyfont + \def\khtbvfirst{}% + \@tfor\khtbvch:=#1\do{% + \khtbvfirst\khtbvch\par + \def\khtbvfirst{}}% + \endgroup} + +% \khtbstack{本人,意见} —— 按 docx 的【分段】竖排,每项各占一行 +% R8 首列在 docx 里是 3 个段落(空、“本人”、“意见”),故“本人”和 +% “意见”各成一行;若直接写“本人意见”四字,窄列会折成“本人意/见”, +% 与 Word 不同。 +\newcommand{\khtbstack}[1]{% + \begingroup + \khtbbodyfont + \def\khtbSfirst{}% + \@for\khtbSitem:=#1\do{% + \khtbSfirst\khtbSitem\par + \def\khtbSfirst{}}% + \endgroup} + +%====================================================================== +% 8. 签字 / 日期 / 勾选框 +% +% ⚠️ 这几个宏全部按 \linewidth 定长,因此【必须】放在定宽 \parbox 里用 +% (\khtbcell / \khtbcellb),否则 \linewidth 会等于版心宽而冲出格子。 +% +% ⚠️ 不要用 \hrulefill:它按 \hsize 撑满整行。在 \parbox 里 \hsize 与 +% \linewidth 一致时勉强可用,但本包历史上出过“横线冲出格子、右边界从 +% 522px 涨到 557px”的事故,故一律改用显式长度的 \rule。 +%====================================================================== + +% 签字行:标签 + 一条一直画到行末的横线 +% \khtbsign{本人签名:} +% +% ⚠️ 参数是【必选】的,不要写成 \newcommand{\khtbsign}[1][默认]{...}。 +% 那样调用 \khtbsign{负责人签名:} 时,{...} 不是可选参数形式 [...] +% 而不会被吃掉,结果是:先印出默认的“本人签名:”,随后那个参数组 +% 在 \par 之后再单独排成一行 —— 一格里凭空多出两行签字,且标签还是错的。 +% 本包踩过这个坑:全文“本人签名”出现了 4 次。 +\newbox\khtbsignbox +\newcommand{\khtbsign}[1]{% + \par\noindent + \sbox\khtbsignbox{#1}% + \usebox\khtbsignbox + \raisebox{-0.4ex}{\rule{\dimexpr\linewidth-\wd\khtbsignbox\relax}{0.4pt}}% + \par} + +% 日期行:年 / 月 / 日 靠右,中间留手写空隙 +\newcommand{\khtbdate}{% + \par\noindent + \makebox[\linewidth][r]{年\hspace{1.6em}月\hspace{1.6em}日}% + \par} + +% 填空横线:\khtbunderline{6em} ⇒ 一条 6em 长的横线 +% docx 里“考核结果为____”处是若干带 w:u 的空格,这里换成规则横线。 +% ⚠️ 横线长度必须用参数 #1,不能写 \linewidth —— makebox 内部 \linewidth +% 并未改变,仍是外层 parbox 的宽度(389pt),会画出一条贯穿整栏的线。 +\newcommand{\khtbunderline}[1]{% + \makebox[#1][c]{\rule[-0.4ex]{#1}{0.4pt}}} + +% 档次勾选框:每项前一个空心方框 +% \khtbchoices{优秀,合格,基本合格,不合格} +% +% ⚠️ 项间用 \hss 做弹性间距,而不是固定 \hspace{1.5em}: +% 5 项(优秀/合格/基本合格/不合格/不确定档次)在 14pt 下按固定 1.5em +% 排要 395pt,超过右侧内容栏的 389pt,会把整张表撑宽。 +% 用 \hbox to\linewidth + 5 个 \hss(首、尾、中间 3 处等分), +% 剩余空间自动均分,总宽永不超过栏宽。 +% +% ⚠️ 原 docx 用 Wingdings 的 ¨(char 0x00A8)画未勾选的方框。 +% 这里改用 U+25A1 “□”:实测仿宋、黑体都有该字形,宋体没有, +% 故正文默认仿宋;若把正文改成宋体,需另指定方框字体。 +\newcommand{\khtbchoices}[1]{% + \par + \begingroup + \khtbbodyfont + \noindent + \hbox to\linewidth{% + \hss + \def\khtbsep{\hss}% + \def\khtbfirst{}% + \@for\khtbit:=#1\do{% + \khtbfirst\mbox{□\,\khtbit}% + \def\khtbfirst{\khtbsep}}% + \hss}% + \par + \endgroup} + +% 单位负责人签字 + 公章 + 日期:三行(docx 首行缩进 2 字) +\newcommand{\khtbseal}[1][2\ccwd]{% + \par\noindent\hspace*{#1}单位负责人签字:\par + \noindent\hspace*{#1}(公章):\par + \noindent\hspace*{#1}年\hspace{1.6em}月\hspace{1.6em}日\par} + +%====================================================================== +% 9. 表外标题 +% +% 原 docx 第 1 段:黑体 22pt、居中、行距 exact 480twips=24pt、字距 -0.7pt +% 原 docx 第 2 段:仿宋 16pt。docx 里是 firstLine 640twips(2 字)缩进 +% 且未设 jc,实际渲染为“左缩两字”而非居中 —— 更像原表排版的疏漏。 +% 本模板改为居中(更符合版式意图);若要还原原样,把下面 \centering +% 换成 \hspace*{2\ccwd} 即可。 +%====================================================================== +\newcommand{\khtbyearval}{××××} +\newcommand{\khtbyear}[1]{\renewcommand{\khtbyearval}{#1}} + +\newcommand{\khtbtitle}{% + \begingroup + \centering + {\heiti\fontsize{22}{24}\selectfont + \addfontfeature{LetterSpace=-3.2}% + 中国海洋大学教职工年度考核登记表\par}% + \vspace{2pt}% + {\fangsong\fontsize{16}{20}\selectfont \khtbyearval\,年度\par}% + \endgroup + \vspace{5pt}} + +%====================================================================== +% 10. 表外脚注 +% +% 原 docx 第 4 段:仿宋 14pt、居中 +% 内容“注:此表存入本人档案(A4纸正反面打印) 人事处制表” +%====================================================================== +\newcommand{\khtbfootnote}{% + \par\vspace{2pt}% + {\khtbbodyfont + \noindent\makebox[\linewidth][c]{% + 注:此表存入本人档案(A4 纸正反面打印)\quad 人事处制表}\par}} + +%====================================================================== +% 11. 年度总结正文区 +% +% \khtbsummary{正文} 多段用 \par 或空行分隔;首行缩进 2 字 +% \khtbsummarysign 末尾“本人签名 / 年 月 日”(docx 缩进 13 字) +%====================================================================== +\newcommand{\khtbsummary}[1]{% + \begingroup + \khtbbodyfont + \setlength{\parindent}{2\ccwd}% + \setlength{\parskip}{0pt}% + #1\par + \endgroup} + +\newcommand{\khtbsummarysign}{% + \par\vspace{1.5em}% + \begingroup + \setlength{\parindent}{0pt}% + \noindent\hspace*{13\ccwd}% + \sbox\khtbsignbox{本人签名:}% + \usebox\khtbsignbox + \raisebox{-0.4ex}% + {\rule{\dimexpr\linewidth-13\ccwd-\wd\khtbsignbox\relax}{0.4pt}}% + \par + \vspace{0.2em}% + \noindent\hspace*{13\ccwd}年\hspace{1.6em}月\hspace{1.6em}日\par + \endgroup} + +\AtBeginDocument{\khtbbodyfont} +\endinput \ No newline at end of file diff --git a/form/年度考核登记表.pdf b/form/年度考核登记表.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d59c78dfd66b1baaee065baf373684674fc84f0e GIT binary patch literal 45506 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 P79M6e3JP&W3Aq0T0ZAVp literal 0 HcmV?d00001 diff --git a/form/年度考核登记表.tex b/form/年度考核登记表.tex new file mode 100644 index 0000000..6457f3e --- /dev/null +++ b/form/年度考核登记表.tex @@ -0,0 +1,125 @@ +%====================================================================== +% 中国海洋大学 教职工年度考核登记表 +% +% 编译: xelatex 年度考核登记表.tex +% (跑两遍,第二遍才取到正确页码) +% +% 本文件刻意不含真人信息:姓名/职工号/出生年月/单位/岗位等一律用 +% × 占位。填表时只改下面【第 1 节 基本信息】和【第 3 节 年度总结】。 +% +% 版式来源:2025 年学校下发的 Word 表(A4、表宽 158.33mm、11 列、 +% 仿宋 14pt)。所有尺寸已在 ouckhtb.sty 内注明换算过程; +% 要改版式请改 sty,不要在这里加 \vspace 硬撑。 +%====================================================================== +\documentclass[UTF8,fontset=none]{ctexart} +\usepackage{ouckhtb} + +%====================================================================== +% 1. 基本信息(填表时只改这一段) +%====================================================================== +\khtbyear{2025} + +\newcommand{\khnum}{0000000} % 职工号 +% ⚠️ 占位符“×”必须包 \fangsong:它会被 fontspec 当成 ASCII 交给 +% Times New Roman,而 TNR 的 × 是 1em 宽的数学符号(14pt 一格), +% 9 个就是 126pt,撑破所在列。用仿宋(全角)宽度才与汉字一致。 +\newcommand{\khname}{{\fangsong ××}} % 姓名(2 字宽) +\newcommand{\khsex}{{\fangsong ×}} % 性别 +\newcommand{\khbirth}{{\fangsong ××××.××}} % 出生年月 +\newcommand{\khdept}{{\fangsong ××××××××}} % 单位(学部/学院) +\newcommand{\khsubdept}{{\fangsong ××××××××}} % 系(研究所、实验室、科室) +\newcommand{\khparty}{{\fangsong ××××}} % 政治面貌 +\newcommand{\khtitle}{{\fangsong ×××}} % 现专业技术职务 +\newcommand{\khpost}{{\fangsong ×××}} % 所聘岗位 + +% 年度总结正文。多段之间用 \par 分隔。 +\newcommand{\khsummary}{% + 本人在思想上始终积极要求进步,……(此处填写年度思想政治表现)。\par + 在教学工作中,本年度承担××××等课程的教学任务,……(教学工作情况)。\par + 在科研方面,……(科研与项目情况)。\par + 在人才培养方面,……(人才培养与团队建设情况)。} + +%====================================================================== +% 2. 表外标题 +%====================================================================== +\begin{document} +\khtbtitle + +%====================================================================== +% 3. 表格主体 +% +% ⚠️⚠️ 每个单元格都要写满,跨度不用管(已写死在 ouckhtb.sty 里): +% 本表 11 个网格列、9 行,每行都老老实实写 11 个格子 + 结尾 \\ +% 跨列合并由 sty 的 cell{r}{c}={c=n}{c} 声明,若某格是合并的起点, +% 它后面应补 (n−1) 个空 & ,凑满 11 格。数错一位就会整体错列。 +% +% ⚠️⚠️⚠️ 合并格里的文字【必须】用 \khtbfit{跨度宽宏}{文字} 包起来。 +% 因为 cell{r}{c}={c=n}{c} 的 {c} 是【不折行的 LR 模式】: +% 文字比所跨各列合计更宽时,它不会折行,而是把列撑宽、整张表超出版心 +% (实测“系(研究所、实验室、科室)”把表从 448.3pt 撑到 558.9pt)。 +% 单列的 Q[c,m,wd=…] 没有这个问题,所以只有合并格需要包。 +%====================================================================== +\begin{khtbtable} + +%---- R0 职工号 / 姓名 / 性别 / 出生年月 ------------------------------- +职工号 & & \khnum + & 姓名 & \khtbfit{\khtbspanH}{\khname} & & + & 性别 & \khsex + & 出生年月 & \khtbfit{\khtbspanG}{\khbirth} & \\ + +%---- R1 单位 / 系(研究所、实验室、科室) ---------------------------- +\khtbfit{\khtbspanA}{单\hspace{1em}位} & & + \khtbfit{\khtbspanB}{\khdept} & & & + \khtbfit{\khtbspanC}{\khtbxi} & & + & \khtbfit{\khtbspanD}{\khsubdept} & & & \\ + +%---- R2 政治面貌 / 现专业技术职务 / 所聘岗位 ------------------------- +\khtbfit{\khtbspanA}{政治面貌} & & \khparty + & \khtbfit{\khtbspanE}{现专业技术职务} & & \khtitle + & & \khtbfit{\khtbspanF}{所聘岗位} & & & \khpost \\ + +%---- R3 年度总结(竖排标签 + 正文栏) ------------------------------- +% 正文与签名写进一个固定宽的 \parbox,否则会按版心宽折行冲出格子。 +\khtbvert{年度总结} + & \khtbcell{\khtbsummary{\khsummary}\khtbsummarysign} + & & & & & & & & & \\ + +%---- R4 系(所、实验室、科室)考评意见 ------------------------------- +\khtbfit{\khtbwa}{系(所、实验室、科室)考评意见} + & \khtbcellb{\khtbsign{负责人签名:}\khtbdate} + & & & & & & & & & \\ + +%---- R5 师德考核结果 ------------------------------------------------ +\khtbfit{\khtbwa}{师德考核结果} + & \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格}\khtbseal} + & & & & & & & & & \\ + +%---- R6 单位年度考核建议档次 ---------------------------------------- +\khtbfit{\khtbwa}{单位年度考核建议档次} + & \khtbcell{\khtbsmallnote + (对考核档次为基本合格、不合格、不确定档次的人员需说明原因)\par + \khtbbodyfont + \khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal} + & & & & & & & & & \\ + +%---- R7 年度考核结果 ------------------------------------------------ +\khtbfit{\khtbwa}{年度考核结果} + & \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal} + & & & & & & & & & \\ + +%---- R8 本人意见 ---------------------------------------------------- +% docx 里首列是 3 个段落(空 / “本人” / “意见”),故两词各占一行。 +\khtbstack{本人,意见} + & \khtbcell{本人知晓并同意考核结果为\khtbunderline{6em}。\par + \vspace*{0.4em}% + \khtbsign{本人签名:}\khtbdate} + & & & & & & & & & \\ + +\end{khtbtable} + +%====================================================================== +% 4. 表外脚注 +%====================================================================== +\khtbfootnote + +\end{document} \ No newline at end of file