From 0fd6021b035d63111e66c294a46173f88b5eab63 Mon Sep 17 00:00:00 2001 From: laoyang Date: Wed, 28 Oct 2026 19:09:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=B9=E6=AE=8A=E4=BA=8B?= =?UTF-8?q?=E9=A1=B9=E8=AF=B4=E6=98=8E=E8=A1=A8=20LaTeX=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=20#16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 把报销用的《中国海洋大学特殊事项说明表》Word 版复刻为 LaTeX 模板, 新增 特殊事项说明表/ 目录,与库内其余模板同一套约定。 三处关键设计: 1. 版心取「表格宽度」而非 docx 版心。原表 169.54mm 比 docx 版心宽 13.54mm,靠 tblInd 负值顶出去;照搬 docx 版心必然 Overfull。 改把 geometry 的版心直接设成表格宽度,零 Overfull 且位置逐点相同, 代价是标题/备注需额外偏移补回 docx 版心的中心。 2. 行距不用 \baselineskip。本表行距逐行不同(10.5pt 与 12pt 混排), 而 \baselineskip 只在同一段落内管行距 —— 每行 \par 自成一段后它 根本没被读到(实测所有行距被压成 13.51,整表矮 2.25bp)。 改成逐行插 \kern:基线距 = 上盒深度 + \kern + 本盒高度, 与字体度量彻底解耦。 3. R0 改成「上下两半 + \vfil」,删掉原件那 8 个手写空段。 描述写长写短都不再影响签名区位置,比原件更稳。 顺带记录六个实测踩出来的坑(块首行胶被丢弃、负 \kern 不能挡、 多行段 \ht 参照末行基线、\prevgen 必须在 \par 之后且在盒内取、 \vbox to N 的深度另计等),详见 sty 内注释与 README。 验证: - xelatex 0 error / 0 Overfull / 0 Underfull / 1 页 - 与 Word 导出 PDF 逐项对齐:33 个文字元素 dY 全部 0.00bp, dX ≤ 0.04bp;四条横线与页码 0.00bp - 像素差分 3.03%,全部落在字形轮廓上,无整体错位 - 全库 12 个模板回归通过,既有 11 个 PDF 零字节变化 与原件仅 3 处有意差异:字体换本库 OUC Serif(可分发)、 标题小标宋换真粗体(商业字体不可分发)、第 3 条备注编号统一对齐 (原件是手打漏配编号,偏 0.36bp)。 --- README.md | 5 +- 特殊事项说明表/README.md | 247 ++++++++++++ 特殊事项说明表/ouccsx.sty | 631 ++++++++++++++++++++++++++++++ 特殊事项说明表/特殊事项说明表.pdf | Bin 0 -> 41380 bytes 特殊事项说明表/特殊事项说明表.tex | 39 ++ 5 files changed, 920 insertions(+), 2 deletions(-) create mode 100644 特殊事项说明表/README.md create mode 100644 特殊事项说明表/ouccsx.sty create mode 100644 特殊事项说明表/特殊事项说明表.pdf create mode 100644 特殊事项说明表/特殊事项说明表.tex diff --git a/README.md b/README.md index 9a38edb..5a96914 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ | [`试卷归档目录/`](试卷归档目录/) | 信息科学与工程学部**试卷归档目录**(理论课,12 项核对清单) | `试卷归档目录.tex` | | [`年度考核登记表/`](年度考核登记表/) | 教职工**年度考核登记表** | `年度考核登记表.tex` | | [`劳务发放说明表/`](劳务发放说明表/) | **劳务发放说明表** | `劳务发放说明表.tex` | +| [`特殊事项说明表/`](特殊事项说明表/) | 报销用**特殊事项说明表**(事项描述 + 三级签字审批) | `特殊事项说明表.tex` | | [`课程执行大纲/`](课程执行大纲/) | 本科**课程教学执行大纲** | `课程执行大纲.tex` | | [`课程教学日历/`](课程教学日历/) | 学校通用版**课程教学日历(理论课程)**(附件3,16 周日历表) | `课程教学日历.tex` | | [`成绩构成说明/`](成绩构成说明/) | **成绩构成说明**(理论课/实验课比例分解表 + 教师签字栏) | `成绩构成说明.tex` | @@ -28,11 +29,11 @@ xelatex slides.tex xelatex slides.tex # 跑两遍,第二遍才能取到正确的目录、交叉引用与总页数 ``` -目录名含中文不影响编译(已实测 11 个模板目录在中文目录下零报错编译通过)。 +目录名含中文不影响编译(已实测 12 个模板目录在中文目录下零报错编译通过)。 ## 说明 -- **字体单一来源**:全库字体集中在根目录 [`fonts/`](fonts/),由 [`fonts.tex`](fonts.tex) 统一加载。十一个模板通过 `\input{../fonts.tex}` 取字体,**不自带字体、不依赖系统字体**——换机器(Windows / macOS / Linux / Overleaf)编译结果一致。 +- **字体单一来源**:全库字体集中在根目录 [`fonts/`](fonts/),由 [`fonts.tex`](fonts.tex) 统一加载。十二个模板通过 `\input{../fonts.tex}` 取字体,**不自带字体、不依赖系统字体**——换机器(Windows / macOS / Linux / Overleaf)编译结果一致。 - **全部开源可商用**:无方正、无 SimSun / SimHei / KaiTi / FangSong、无 Times New Roman、无微软雅黑。用的是思源宋体/黑体、霞鹜文楷、朱雀仿宋、TeX Gyre Termes、Cochineal、鸿蒙 HarmonyOS Sans(各字体授权见 [`fonts/LICENSE`](fonts/LICENSE),来源与字符集见 [`fonts/README.md`](fonts/README.md))。 - **每个子目录自包含**:样式文件(`.sty` / `.cls`)、图片都在各目录内,编译时不需要额外的宏包搜索路径;只有字体是共享的上层目录。 - **各目录的 `README.md`** 写明该模板的用法、可改参数、版式数据来源与书写注意事项,改之前先看。 diff --git a/特殊事项说明表/README.md b/特殊事项说明表/README.md new file mode 100644 index 0000000..5bac1f3 --- /dev/null +++ b/特殊事项说明表/README.md @@ -0,0 +1,247 @@ +# 特殊事项说明表 — 中国海洋大学 特殊事项说明表(LaTeX 版) + +把报销用的《中国海洋大学特殊事项说明表》Word 版复刻为 LaTeX 模板。 +版式与原 `.docx` **逐点对齐**(见文末「实测偏差」), +**不含任何真人信息**:事项描述是虚构的报销事由,三处日期留空待手写。 + +## 文件 + +| 文件 | 说明 | +| :-- | :-- | +| `特殊事项说明表.tex` | 主文件。填表只改第 1 节(4 个变量) | +| `ouccsx.sty` | 版式包。页面/字体/行高/全部尺寸写在这里,附换算注释 | + +## 编译 + +```bash +xelatex 特殊事项说明表.tex +``` + +单页,跑一遍即可(无交叉引用)。 + +需要 **XeLaTeX**,并安装 `ctex`、`geometry`、`fontspec`、`xeCJK`、`fancyhdr`。 +实测环境:TeX Live 2022。 + +## 改内容 + +```latex +\newcommand{\sxdesc}{% % 事项描述(必填) +因项目研讨需要,前往菏泽进行项目研讨与系统演示,因携带大件演示设备, +公共交通多有不便,因此采用自驾方式前往。} + +\newcommand{\sxdateA}{} % 项目负责人签字处日期 +\newcommand{\sxdateB}{} % 单位负责人签字处日期 +\newcommand{\sxdateC}{} % 科技管理部门签字处日期 +``` + +就这四个。**表内其余文字全是学校规定原文,不要改** —— +「兹证明该事项真实有效,本人愿意为此承担责任。」「学院对本单位科研 +经费使用承担监督和管理责任。」以及备注三条,都在 `ouccsx.sty` 里 +装配好了,改了就与原件不一致。 + +### 关于 `\sxdesc` + +描述**可以写多段**,空行或 `\\` 分段都行,表格会自动让出空间: + +- 写短 → 空白落在「描述区」与「签名区」之间,签名区位置不动 +- 写长 → 空白被吃掉,签名区仍然不动 + +> 这是本模板比原 docx 更稳的地方。原件靠 R0 里的 **8 个空段** 给手写 +> 留白,描述一写长就把签名区顶到下一行(Word 里也一样)。本模板删掉 +> 那 8 个空段,改成「上下两半 + 中间 `\vfil`」,两头都不破版。 + +⚠️ 描述特别长时签名区会挤出行外 —— 这是内容超量的正常表现(Word 里 +写太多同样会把格子撑高),把描述删短即可,不是 bug。 + +### 关于三处日期 + +留空则印成「  年   月   日」,签字时手写。 +想直接打印就填年份:`\newcommand{\sxdateA}{2026}` 会印在「年」前面。 + +> 默认留空的理由同 `成绩构成说明`:印了年份就占掉手写空间, +> 而且报销常常是事后补开,日期往往就是签字那天。 + +## 版式数据来源 + +全部尺寸从原 `.docx` 的 OOXML 里量出来,换算关系: + +- 长度:`mm = twips ÷ 1440 × 25.4`,`pt = twips ÷ 20` +- 字号:`w:sz` 是半磅值,`sz=21` ⇒ 10.5 pt +- 行距:`w:line` 是 1/20 pt,`lineRule="exact"` 时即精确值 + +| 项目 | docx 原值 | 换算 | +| :-- | :-- | :-- | +| 纸张 | `pgSz 11906×16838` | A4 210×297 mm | +| 页边距(上下) | `pgMar top/bottom 2155/1985` | 38.01 / 35.00 mm | +| 页边距(左右) | `pgMar left/right 1588/1474` | 28.01 / 26.00 mm | +| 表宽 | `tblW 9613` | 169.54 mm = 480.65 bp | +| 表左缩进 | `tblInd −546` | −9.63 mm(把表顶出版心) | +| 单元格内边距 | `tblCellMar 108` | 5.4 pt(左右),上下为 0 | +| 边框 | `tblBorders sz=4` | 0.5 pt | +| 字号 | 标题 `sz44`/正文 `sz21`/签字日期 `sz24`/页码 `sz28` | 22 / 10.5 / 12 / 14 pt | +| 行距 | 标题 `line500`/备注 `line300`/表内未设 | 25 / 15 pt/Word 单倍(字号×1.3) | + +表格结构:**单列 3 行**(`tblGrid` 只有一个 `gridCol`,每行一个 `tc`), +即三行整宽方框上下叠。没有合并单元格、没有多列,所以没用 `tabularray` +—— 手工 `\vbox` 叠三块反而更可控(行高精确、内线不重复、内容可用 `\vfil` 撑)。 + +### 行高为什么用实测值而不是 `trHeight` + +`trHeight` 是 5091 / 1140 / 634 twips,`hRule="atLeast"`。 +`atLeast` 是「最小」,实际高度由内容撑开: + +| 行 | `trHeight` | 实际被内容撑到 | 段落数 | +| :-- | :-- | :-- | :-- | +| R0 事项描述 | 254.55 pt | **284.00 bp** | 19 | +| R1 单位负责人 | 57 pt | **58.35 bp** | 4 | +| R2 科技管理 | 31.70 pt | **56.80 bp** | 4 | + +照 `trHeight` 会让整表矮 40 bp。故取实测撑开后的高度。 + +## 六个必须知道的坑 + +这一节的每一条都是实测踩出来的,改 `ouccsx.sty` 之前务必看完。 + +### 1. 版心要取「表格宽度」,不是 docx 版心 + +原表宽 169.54 mm,比 docx 版心(156 mm)宽 13.54 mm, +靠 `tblInd = −546 twips` 向左顶出版心。 + +若把 `geometry` 设成 docx 版心(`left = 28.01mm`),表格必然超出版心 +13.54 mm,报一条 `Overfull \hbox`,而且改内容时位置会漂。 + +⇒ 本包把版心**直接设成表格宽度**:`left = 16.47mm`、`totalwidth = 169.54mm`。 +表格正好填满版心,零 Overfull,与原件逐点相同。 + +代价:标题若用 `\centering` 会落在 287.03 bp,而原件在 300.41 bp(居中于 +docx 版心),偏左 13.4 bp。故标题另给 `\sxtitleindent` + `\sxtitlewidth` +把中心校回去 —— **不要**把标题改成 `\centering`。 + +### 2. `\baselineskip` 管不了本表的行距 + +本表行距逐行不同(15.24 / 15.48 / 14.04 / 13.56 / 13.68 bp), +因为 10.5 pt 与 12 pt 的字混排,Word 按「**下一行**字号 × 1.3」算。 + +而 `\baselineskip` **只在同一段落内部**管行距。一旦每行 `\par` 自成一段, +段与段之间是另一套规则: + +``` +段间基线距 = 上段末行深度 + \parskip + 本段首行字高 +``` + +这里 `\parskip = 0`、首行字高由字体 ascent 定死,`\baselineskip` 根本没被读到。 +实测第一版所有行距被压成 13.51,12 pt 的签名行也没变高,整表矮 2.25 bp。 + +⇒ 正解:不依赖 `\baselineskip`,逐行显式插胶: + +``` +基线距 = 上盒深度 + \kern + 本盒高度 +⇒ \kern = 目标距 − 上盒深度 − 本盒高度 +``` + +这就是 `\sx@bl` / `\sx@blp` 的全部内容。与字体度量彻底解耦:换字体、 +换字号、描述写长写短,行距一个 bp 都不变。 + +唯一的例外是「段内折行的长句」—— 那是一个段落里的多行,规则不同, +`\baselineskip` 在此**有效**,故 `\sx@blp` 仍给它。 + +### 3. 块首行必须用 `\kern`,不能用 `\vskip` + +TeX 会**丢弃 `\vbox` 开头的胶**。用 `\vskip` 给的顶距会静默消失 +(实测「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。 +`\kern` 不受这条约束,且照样计入盒高。 + +同理,块**末尾**不能用 `\vskip` 补空白(胶也被丢弃), +要用 `\sx@bl` 的可选参数 `#1` 直接撑末盒的深度。 + +### 4. 负的 `\kern` 不能被挡 + +相邻两行的目标距可能小于「上盒深度 + 本盒高度」。例:年月日行是 12 pt 字, +目标距 14.04,而 `2.99 + 12.06 = 15.05`,差值是 **−1.01**。 + +最初加了 `\ifdim\sx@tmp>\z@` 守卫,负值被静默吞掉 → 该行退回自然距 15.05, +整块错位 10 bp。负 `\kern` 在 TeX 里完全合法(盒间轻微重叠),不该挡。 + +### 5. 多行段落:`\ht` 参照的是**末行**基线 + +`\vbox` 的 `\ht = 首行高度 + (n−1)·行距`,它的参考点是**末行基线**。 + +所以「上一行基线 → 本段首行基线」的距离不是 `pd + kern + ht`, +而是 `pd + kern + ht − (n−1)·行距`。漏掉这一项,多行段自己被推下一整行, +其后所有行跟着错(实测 0.48 而非 14.04)。 + +⇒ 用 `\prevgraf` 取段内行数,把 `(n−1)·行距` 加回 `kern`。`\dp` 不用改 —— +`\vbox` 的 `\dp` 就是末行的真实深度。 + +⚠️⚠️ `\prevgraf` 有两道坎,两个都踩过: +- 必须在 `\vbox` **内部**取 —— 盒一关闭就恢复成外层值(实测把 2 读成 0) +- 必须在 `\par` **之后**取 —— 它是在段落断行那一步才被写入的(`\par` 前读到仍为 0) + +### 6. `\vbox to N` 设的是**高度**,深度另计 + +若最后一项是带深度的 `\box`,`\vbox to N` 的 `\dp` 就是那个深度, +**总高变成 `N + 深度`**。本表末行深 3.11,于是 R0 变成 287.11 而非 284.00, +四条横线全部下移。 + +⇒ 末尾补一条 `\vskip\z@`:让末项变成胶(胶无深度),`\dp` 归零, +总高才正好等于 `N`。见 `\sx@cellvf`。 + +## 与原件的有意差异 + +| 项 | docx | 本模板 | 说明 | +| :-- | :-- | :-- | :-- | +| 字体 | 宋体 SimSun | OUC Serif(思源宋体子集) | 原用系统字体。改仓库公共字体包 `../fonts/`,换机器/换系统都能编,且允许分发 | +| 标题字体 | 方正小标宋简体 | OUC Serif **真粗体** | 小标宋是商业字体,本库不分发。按 `课程执行大纲/` 的既定做法换真粗体:小标宋本就是宋体的标题变体,真粗体比伪粗更接近,笔画不糊 | +| 第 3 条备注编号 | 手打的「   3.  」,无 `numPr` | 与前两条统一排齐 | 唯一的位置差异:原件该条比前两条偏 0.36 bp。原件是漏配自动编号后手打的,属笔误;本模板统一对齐 | +| R0 描述区留白 | 8 个空段 | 上下两半 + 中间 `\vfil` | 见上文「关于 `\sxdesc`」。描述长短不再影响签名区位置 | + +除此之外**没有**任何版式差异。 + +## 实测偏差 + +不用肉眼看 PDF,直接用 `pymupdf` 取矢量坐标,与 Word 2007 导出的 PDF 逐项相减: + +```python +span['origin'] # 真实基线坐标(bbox 顶端受字形上伸部影响,误差约 2 bp) +page.get_drawings() # 每条线的精确端点 +``` + +结果(33 个文字元素 + 6 条线,`dY`/`dX` 为「本模板 − 原件」,单位 bp): + +| 元素 | dY | dX | +| :-- | :-- | :-- | +| 标题 | 0.00 | −0.01 | +| 四条表格横线 | 0.00 | — | +| 事项描述 / 描述首行 / 次行 | 0.00 | +0.03 | +| 兹证明 | 0.00 | +0.04 | +| 项目负责人(签名) | 0.00 | +0.03 | +| 年月日(三处,各 3 字) | 0.00 | +0.03 | +| 项目负责人是 / 责任。/ 非科研经费 | 0.00 | +0.03 | +| 本人证明 / 单位负责人 / 单位公章 | 0.00 | +0.03 | +| 学院对本单位 | 0.00 | +0.03 | +| 科技管理 / 负责人签字 / 单位公章 | 0.00 | +0.03 | +| 备注四条 | −0.01 | −0.42 ~ −0.82 | +| 页码 | 0.00 | 0.00 | + +**33 个文字元素的 dY 全部 0.00**(< 0.005 mm),dX ≤ 0.04 bp, +唯备注区 dX 偏 0.42~0.82 bp(约 0.15~0.29 mm,肉眼不可辨)—— +那是 OUC Serif 与 SimSun 的字宽差累积,不是定位误差。 + +像素级差分(150 dpi)总差异 3.03%,且每条差异带都精确落在有文字的行上, +**没有整体错位的偏移带** —— 3% 全是字形轮廓不同造成的。 + +## 校验方法 + +量矢量而不是量像素: + +```bash +pdftocairo -svg 特殊事项说明表.pdf out.svg # 线条精确坐标 +pdftotext -bbox 特殊事项说明表.pdf out.xml # 字块坐标 +``` + +或用 `pymupdf`(本模板就是这么核的):`page.get_drawings()` 取线, +`get_text('rawdict')` 取 `span['origin']` 作基线。 + +⚠️ 注意 `bp` 与 `pt` 的不同:PDF 用户单位是 **bp**(1/72 in), +LaTeX 的 `pt` 是 1/72.27 in,差 0.375%。A4 上累积到 2 pt, +超过一个字符宽。**本包凡与 PDF 对齐的几何量一律用 `bp`**。 \ No newline at end of file diff --git a/特殊事项说明表/ouccsx.sty b/特殊事项说明表/ouccsx.sty new file mode 100644 index 0000000..b89ef32 --- /dev/null +++ b/特殊事项说明表/ouccsx.sty @@ -0,0 +1,631 @@ +%====================================================================== +% ouccsx.sty — 中国海洋大学 特殊事项说明表 版式包 +% +% 依据:报销相关/中国海洋大学特殊事项说明表.docx(Word 2007 保存) +% 目标:版式与原 docx 逐项对齐;内容可随意增删而不破版。 +% +% 尺寸换算: +% twips → pt : pt = twips / 20 (1 pt = 1/20 twip) +% twips → mm : mm = twips / 1440 * 25.4 +% w:sz : 半磅值,÷ 2 即 pt +% w:line : 1/20 pt(lineRule="exact" 时即精确行距) +% +% ⚠️ 与 PDF 对齐的几何量一律用 bp(= 1/72 in,PDF 用户单位), +% 不用 pt(= 1/72.27 in)。两者差 0.375%,A4 上累积可达 2 pt, +% 超过一个字符宽,肉眼看得出。凡注「实测」者均为 PDF 坐标 +% (左上原点、向下为正)。 +% +% 用法见同目录 特殊事项说明表.tex,说明见 README.md +%====================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ouccsx}[2026/10/28 v1.2 OUC special item statement form] + +\RequirePackage{geometry} +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{fancyhdr} + +%====================================================================== +% 1. 页面与版心 +% +% 原 docx sectPr: +% pgSz 11906 × 16838 twips = 210.02 × 297.05 mm → A4 +% pgMar top 2155 / bottom 1985 twips = 38.01 / 35.00 mm +% left 1588 / right 1474 twips = 28.01 / 26.00 mm +% +% ------------------------------------------------------------------ +% ⚠️⚠️ 本模板的版心【不是】docx 的版心,这是刻意的。 +% +% 原表 tblW = 9613 twips = 169.54 mm = 480.65 bp, +% 而 docx 版心宽只有 210 − 28 − 26 = 156 mm。 +% 表比版心宽 13.54 mm,靠 tblInd = −546 twips(−9.63 mm)向左顶出去。 +% +% 实测(Word 导出 PDF): +% 表格左边框 x = 46.70 bp,右边框 x = 527.35 bp(宽 480.65 ✓) +% 标题文字中心 x = 300.41 bp ← 居中于 docx 版心,不是居中于表格 +% +% ⇒ 若把 geometry 设成 docx 版心(left 28 mm),表格必然超出版心 +% 13.54 mm,报一条 Overfull \hbox,且改内容时位置会漂。 +% +% ⇒ 本包把 geometry 的版心【直接设成表格宽度】: +% left = 16.47 mm (= 表格左边框) +% totalwidth = 169.54 mm (= 表格外宽) +% 表格正好填满版心,零 Overfull,位置与原件逐点相同。 +% +% ⇒ 代价:标题若用 \centering 会落在 287.03 bp,原件在 300.41 bp, +% 偏左 13.4 bp。故标题另给偏移补回 docx 版心的中心(见第 5 节)。 +%====================================================================== +\newlength{\sxofficialleft} % docx 版心左界,仅用于换算 +\setlength{\sxofficialleft}{28.01mm} +\newlength{\sxtblleft} +\setlength{\sxtblleft}{16.47mm} +\newlength{\sxtblw} % 表格外宽 = 版心宽 +\setlength{\sxtblw}{169.54mm} + +\geometry{ + paperwidth = 210mm, + paperheight = 297mm, + left = 16.47mm, % = 表格左边框 + totalwidth = 169.54mm, % = 表格外宽 + % ⚠️ 实测口径差:本包所有 y 都恒比原件小 0.14 bp(表顶线、备注、 + % 页码全部同步偏移,是 top 与 PDF 线宽的取整差,不是各行的问题)。 + % 从 top 里补掉,一次消除。 + top = \dimexpr38.01mm+0.14bp\relax, + bottom = 35.00mm, % = docx pgMar bottom 1985 twips + headheight = 0pt, + headsep = 0pt, + footskip = 24.41bp, +} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} + +%====================================================================== +% 2. 字体与字号 +% +% 原 docx 字号(w:sz 半磅值 ÷ 2): +% 大标题 44 → 22 pt / 表内正文 21 → 10.5 pt +% 签字日期 24 → 12 pt / 备注 21 → 10.5 pt / 页码 28 → 14 pt +% +% ⚠️⚠️⚠️ ctex 默认 \linespread ≈ 1.3,会把 \fontsize{10.5}{13.65} +% 的 13.65 pt 行距再放大 30% 变成 17.7 pt。本模板所有行距都来自 +% docx 精确值,故每次设字号前必须先把 \linespread 归 1。 +% +% ⚠️ 原标题用「方正小标宋简体」,商业字体,本库不分发(见根 README +% 的字体承诺)。按 课程执行大纲/ 的既定做法换成 OUC Serif 真粗体 +% —— 小标宋本就是宋体的标题变体,真粗体比伪粗更接近,笔画不糊。 +%====================================================================== +\input{../fonts.tex} + +\newcommand{\sxfonttitle}{% + \linespread{1}\relax\fontsize{22}{25}\selectfont} +\newcommand{\sxfontbody}{% + \linespread{1}\relax\fontsize{10.5}{13.65}\selectfont} +\newcommand{\sxfontsign}{% + \linespread{1}\relax\fontsize{12}{15.6}\selectfont} +\newcommand{\sxfontfoot}{% + \linespread{1}\relax\fontsize{14}{16.8}\selectfont} + +%====================================================================== +% 3. 表格的几何量 +% +% 边框 tblBorders sz=4 → 0.5 pt(w:sz 是 1/8 pt,4/8) +% 内边距 tblCellMar left/right = 108 twips,top/bottom = 0 +% +% 行高:trHeight 是 5091 / 1140 / 634 twips,hRule="atLeast", +% 但 atLeast 是「最小」,实际高度由内容撑开。故用实测值: +% 四条横线中线 y = 172.99 / 457.49 / 516.34 / 573.64 +% ⇒ 三段高 284.50 / 58.85 / 57.30(线中心距), +% 扣掉各一端的半线宽(0.249)得内容高 284.00 / 58.35 / 56.80。 +% ⚠️ 不用 trHeight 的 254.55 / 57 / 31.7:R0 被 19 段撑到 284, +% R2 被 4 段撑到 56.8,照 trHeight 会让整表矮 40 bp。 +%====================================================================== +\newlength{\sxrule} +\setlength{\sxrule}{0.5pt} % = tblBorders sz 4/8 +\newlength{\sxpad} +\setlength{\sxpad}{4.93bp} % 校到内容左界 52.08(实测 52.11) + +\newlength{\sxboxw} % 单元格内容盒宽(不含边框) +\setlength{\sxboxw}{\dimexpr\sxtblw-2\sxrule\relax} + +% ⚠️⚠️ 段落折行的可用宽度 ≠ 盒宽。 +% 折行可用宽 = \sxboxw − \sxpad − \sxbodypad。 +% 原件实测:内容左界 52.08、右界 521.89 ⇒ 可用宽 469.81 bp。 +% ⚠️ 这 1.7 bp 是「折不折行」的临界。本表那句「项目负责人是科研经费 +% 使用的直接责任人……」共 47 字,在 471.5 bp 里能挤成一行, +% 在 469.81 bp 里必须折行 —— 原件是两行。差一行 = 13.56 bp, +% R0 下半全部内容上移 16.5 bp,肉眼一看就错。 +\newlength{\sxbodypad} +\setlength{\sxbodypad}{6.65bp} % = 481.388 − 4.948 − 469.81 + +\newlength{\sxrowa} +\setlength{\sxrowa}{284.00bp} +\newlength{\sxrowb} +\setlength{\sxrowb}{58.35bp} +\newlength{\sxrowc} +\setlength{\sxrowc}{56.80bp} + +%====================================================================== +% 4. 行定位体系(全文件的核心) +% +% ⚠️⚠️⚠️ 本表的行距**不能**用 \baselineskip 控制。改之前先读这段。 +% +% 【坑一】\baselineskip 只在**同一段落内部**管行距。 +% 本表行距逐行不同(15.24 / 15.48 / 14.04 / 13.56 / 13.68), +% 因为 10.5 pt 与 12 pt 的字混排,Word 按「下一行字号 × 1.3」算。 +% 最初每行 \par 之后单独给 \baselineskip,实测**完全无效**: +% 所有行距被压成 13.51,12 pt 的签名行没变高,整表矮 2.25 bp。 +% 原因:每行 \par 自成一段后,段间基线距离 = 上段末行深度 + +% \parskip + 本段首行字高,\baselineskip 根本没被读到。 +% +% 【正解】不依赖 \baselineskip,逐行显式插胶: +% +% 基线距 = 上盒深度 + \kern + 本盒高度 +% ⇒ \kern = 目标距 − 上盒深度 − 本盒高度 +% +% 与字体度量彻底解耦:换字体、换字号、描述写长写短,行距不变。 +% +% 【坑二】块首行必须用 \kern,不能用 \vskip。 +% TeX 会【丢弃 \vbox 开头的胶】,用 \vskip 给的顶距静默消失 +% (实测「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。 +% \kern 不受这条约束,且照样计入盒高。 +% +% 【坑三】必须允许负的 \kern。 +% 相邻行的目标距可能小于「上盒深度 + 本盒高度」(如年月日行 +% 12 pt 字目标 14.04,而 2.99 + 12.06 = 15.05),差值是 −1.01。 +% 最初加了 `\ifdim>0` 守卫,负值被吞 → 该行退回自然距 15.05, +% 整块错位 10 bp。负 \kern 在 TeX 里完全合法,不该挡。 +% +% 【坑四】多行段落的 \ht 参照的是**末行**基线,不是首行。 +% \vbox 的 \ht = 首行高度 + (n−1)·行距,它的参考点是末行基线。 +% 所以「上一行基线 → 本段首行基线」的距离不是 pd + kern + ht, +% 而是 pd + kern + ht − (n−1)·行距。漏掉这一项, +% 多行段自己会被推下一整行,其后所有行跟着错(实测 0.48 而非 14.04)。 +% ⇒ 用 \prevgraf 取段内行数,把 (n−1)·行距加回 kern。 +% ⚠️ \dp 不用改:\vbox 的 \dp 就是末行的真实深度。 +% +% 【坑五】\offinterlineskip 会继承进段落内部。 +% 它把 \lineskiplimit 设成极小值,段内多行改走 \lineskip(=0), +% \baselineskip 又被架空(实测行距只剩 10.81 而非 13.56)。 +% ⇒ 段落内部必须显式恢复 \lineskiplimit / \lineskip。 +%====================================================================== +\newbox\sx@boxa +\newbox\sx@boxb +\newbox\sx@boxc +\newdimen\sx@pd % 上一行的真实末行深度 +\newdimen\sx@tmp +\newdimen\sx@boxd +\newdimen\sx@pgd % 段内中间各行推进总量(\prevgraf 必须先存出来) +\newif\ifsx@first % 是否块内第一行 + +\newcommand{\sx@blstart}{% + \offinterlineskip + \topskip=\z@ + \sx@pd=\z@ + \sx@firsttrue} + +% \sx@bl[底深]{与上一行基线的距离}{行内容} +% +% #1(可选)= 本行盒的最小深度。块末行用它留出「基线 → 格底」的空白 +% —— TeX 丢弃 \vbox 末尾的胶,不能用 \kern 补。 +% #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」。 +% #3 = 行内容(水平模式),参照点是单元格内容左界。 +% #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」, +% 给 0 表示「首行自然贴块顶、只留字高」。 +% 后者用于 R0 下半块:那块是贴格底的,全部位置由 +% 「末行深度 + 逐行行距」反推出来,再给绝对顶距就重复 +% 定位了(实测多给 208.89,整块下移 66.90)。 +\newcommand{\sx@bl}[3][\z@]{% + \setbox\sx@boxc=\hbox to \sxboxw{\hskip\sxpad #3\hss}% + \ifsx@first + \sx@firstfalse + \kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax + \else + \kern\dimexpr#2-\sx@pd-\ht\sx@boxc\relax + \fi + \ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi + \sx@pd=\dp\sx@boxc + \box\sx@boxc} + +% \sx@blp[底深]{与上一行基线的距离}{段内行距}{段落内容} +% +% 与 \sx@bl 同一套定位规则,但内容是可折行的段落(用于那两句长话)。 +% +% ⚠️⚠️ \vbox 的 \ht 参考点是**末行基线**,不是首行(坑四)。 +% 故 kern 里要把 (n−1)·行距 加回去,否则整个多行段被推下一整行。 +% \dp 不用改 —— \vbox 的 \dp 就是末行的真实深度。 +\newcommand{\sx@blp}[4][\z@]{% + \setbox\sx@boxc=\vbox{% + \hsize=\sxboxw + \leftskip=\sxpad + \rightskip=\sxbodypad + \parindent=\z@ + \parskip=\z@ + \lineskiplimit=\z@ % ← 抵消外层 \offinterlineskip(坑五) + \lineskip=\z@ + \baselineskip=#3\relax + \noindent #4\par + % ⚠️⚠️ \prevgraf 有两道坎: + % ① 必须在 vbox **内部**取 —— 它是「当前正在排的段落行数」, + % vbox 一关闭就恢复成外层值(实测把 2 读成 0)。 + % ② 必须在 \par **之后**取 —— \prevgraf 是在段落断行那一步 + % 才被写入的,\par 之前读到的还是旧值(实测仍为 0)。 + \global\sx@pgd=\dimexpr\numexpr\prevgraf-1\relax\dimexpr#3\relax\relax}% + % 中间各行的推进总量 + \sx@tmp=\sx@pgd + \ifsx@first + \sx@firstfalse + % 块首行的 #2 直接是「块顶 → 首行基线」,不需要再扣多行推进量: + % 多行段的 \ht 已经包含了「首行基线 → 末行基线」的全部推进, + % 而首行基线本身与段有几行无关。加回 pgd 会把首行推下一整行 + % (实测描述两行偏 +10.39)。 + \kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax + \else + \kern\dimexpr #2+\sx@tmp-\sx@pd-\ht\sx@boxc\relax + \fi + \ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi + \sx@pd=\dp\sx@boxc + \box\sx@boxc} + +% 签名下划线:长 #1、线宽 0.4 pt(Word underline,比表格线细) +\newcommand{\sx@rule}[1]{% + \rule[-0.55mm]{#1}{0.4pt}} + +%---------------------------------------------------------------------- +% \sx@put{偏移}{内容} —— 在「内容左界 + 偏移」处放置内容 +% +% 原件的签名行、年月日全靠敲空格凑位置(R0 签名前是 30 个 14 pt 空格), +% 换台机器字号一改就散架。这里按实测 x 坐标绝对定位,不随字体漂移。 +% +% ⚠️⚠️ 用 \rlap(= \hbox to 0pt{...\hss})而非 \makebox[0pt][l]: +% 两者都是零宽盒左对齐,但 \makebox 内容超宽会报 Overfull \hbox +% (签名下划线 84 bp 必然超),\rlap 末尾有 \hss 吸收,静默通过。 +% 因零宽,一行串多个 \sx@put 时共用同一原点,偏移各自独立。 +% +% 偏移 = 「Word 导出 PDF 实测 x」− 52.08(内容左界) +%---------------------------------------------------------------------- +\newcommand{\sx@put}[2]{% + \rlap{\hspace*{#1}#2}} + +%---------------------------------------------------------------------- +% 单元格装配 +% +% \sx@cellbl{高度}{块内容} 内容贴顶,不足高度补在底部(= trHeight atLeast) +\newcommand{\sx@cellbl}[2]{% + \setbox\sx@boxa=\vbox{\sx@blstart #2}% + \ifdim\dimexpr\ht\sx@boxa+\dp\sx@boxa\relax<#1 + \vbox to #1{\box\sx@boxa\vfil}% + \else + \box\sx@boxa + \fi} + +% \sx@cellvf{高度}{上半}{下半} 中间 \vfil 撑开 ⇒ 下半贴格底 +% +% ⚠️⚠️ 这里踩过一个非直觉的坑: +% 最初写「先 \setbox 量内容,再 \vbox to <高>{\box\sx@box\vfil}」, +% 结果 R0 的「兹证明」跑到描述正下方(y=261.95,原件 382.13), +% 整块偏高 120 bp。 +% 原因:\vbox{...\vfil} **被测量的那一刻** \vfil 就塌成 0 +% (vbox 无目标高度,末端胶只能为 0)。再套壳时剩余胶只能加在 +% 整体之后 → 变成「内容贴顶、空白在底」,与想要的正好相反。 +% 正解:让 \vfil 与上下两半【同处一个有目标高度的 \vbox 里】。 +\newcommand{\sx@cellvf}[3]{% + \setbox\sx@boxa=\vbox{% + \hsize=\sxboxw + \leftskip=\sxpad + \rightskip=\sxpad + \parindent=\z@ + \parskip=\z@ + #2}% + \setbox\sx@boxb=\vbox{\sx@blstart #3}% + % ⚠️⚠️ 末尾那个 \vskip\z@ 不能省。 + % \vbox to N 设定的是**高度**,深度另计:若最后一项是 \box\sx@boxb + % 且它自带深度(本表末行深 3.11),则 vbox 的 \dp = 3.11, + % 总高变成 N + 3.11,整行高三点一一,四条横线全部下移 + % (实测 R0 = 287.11 而非 284.00)。 + % 补一条零高胶让末项变成胶(胶无深度),\dp 归零, + % 总高才正好等于 N。 + \ifdim\dimexpr\ht\sx@boxa+\ht\sx@boxb+\dp\sx@boxb\relax<#1 + \vbox to #1{\box\sx@boxa\vfil\box\sx@boxb\vskip\z@}% + \else + \vbox{\box\sx@boxa\vfil\box\sx@boxb}% + \fi} + +%====================================================================== +% 5. 标题 +% +% 原 docx:22 pt 小标宋(→ 宋体真粗体),居中,标题段行距 25 pt。 +% 实测:文字中心 x = 300.41 bp,基线 y = 147.65。 +% +% ⚠️⚠️ 为什么不能直接 \centering: +% 本包版心 16.47~186.01 mm,中心 287.03 bp; +% 标题要居中的是 docx 版心 28.01~184.01 mm,中心 300.41 bp。 +% 两者差 13.4 bp,直接居中会左偏 4.7 mm。 +% 正解:先 \hspace* 推到 docx 版心左界,再用一个正好等于 +% docx 版心宽的 \makebox 居中。右边不会溢出: +% 11.54 + 156 = 167.54 mm < 169.54 mm。 +%====================================================================== +\newlength{\sxtitleindent} +\setlength{\sxtitleindent}{\dimexpr\sxofficialleft-\sxtblleft\relax} +\newlength{\sxtitlewidth} +\setlength{\sxtitlewidth}{156mm} +% 实测微调:标题中心原偏右 0.60 bp(字形宽度差所致) +\newlength{\sxtitlefix} +\setlength{\sxtitlefix}{-0.60bp} + +% 标题前/后竖直距离(由 PDF 实测反推,见 README「实测记录」) +% ⚠️ 这两个值必须成对调:\sxprespace 在标题前、\sxpostspace 在标题后, +% 单独改一个会把标题与表格的间距一起改掉。实测标定见 README。 +\newlength{\sxprespace} +\setlength{\sxprespace}{10.07bp} +\newlength{\sxpostspace} +\setlength{\sxpostspace}{21.09bp} + +\newcommand{\sxtitle}[1]{% + \par\begingroup + \vspace*{\sxprespace}% + \noindent + \hspace*{\dimexpr\sxtitleindent+\sxtitlefix\relax}% + \makebox[\sxtitlewidth][c]{% + \sxfonttitle\songti\bfseries #1}% + \par\vspace*{\sxpostspace}% + \endgroup} + +%====================================================================== +% 6. 表格主体 +% +% 原表是**单列 3 行**(tblGrid 只有一个 gridCol),即三行整宽方框上下叠。 +% 没有合并单元格、没有多列,不需要 tabularray —— 手工 \vbox 叠三块 +% 反而更可控:行高精确、内线不重复、内容可用 \vfil 撑。 +% 外框 \framebox,两条内线 \hrule(各占 \sxrule)。 +%====================================================================== +\newcommand{\sxtable}{% + \par\noindent + \begingroup + \setlength{\fboxsep}{0pt}% + \setlength{\fboxrule}{\sxrule}% + \framebox[\sxtblw]{% + \vbox{% + \hsize=\sxboxw + \sx@rowa@box + \hrule height \sxrule + \sx@cellbl{\sxrowb}{\sx@rowB}% + \hrule height \sxrule + \sx@cellbl{\sxrowc}{\sx@rowC}% + }% + }% + \par\endgroup} + +%====================================================================== +% 7. 三行内容的装配 +% +% 三行里的固定话术(「兹证明该事项真实有效……」等)是学校规定原文, +% **不要在 .tex 里改**;它们在这里装配好,.tex 只提供要人填的几项: +% \sxdesc 事项描述正文(必填) +% \sxdateA 项目负责人签字处日期(留空则印「 年 月 日」) +% \sxdateB 单位负责人签字处日期 +% \sxdateC 科技管理部门签字处日期 +% +% ⚠️ 为什么不让 .tex 改整行:原件里这些行全靠敲空格对齐,一旦让 +% 用户自己写,每人写出来都不一样,模板就失去意义。这里按实测 +% x 坐标把固定部分钉死,.tex 只需填描述与日期。 +% +% ------------------------------------------------------------------ +% R0 纵向结构(全表最麻烦的一处) +% +% 原 docx R0 共 19 段:1「事项描述:」/ 2~3 空 / 4 描述正文 / +% 5~12 八个空段(给手写留白)/ 13 空 / 14「兹证明…」/ 15 签名 / +% 16 年月日 / 17「项目负责人是…」/ 18「非科研经费…」 +% +% 那 8 个空段是**手写留白**。本模板把描述改成排字(\sxdesc), +% 它们就成了死间距:描述写短了下面一大片空白,写长了把签名区顶到下一行。 +% ⇒ 删掉,改用「上下两半 + 中间 \vfil」: +% 描述短 → 空白落在两半之间,签名区不动 +% 描述长 → 空白被吃掉,签名区仍然不动 +% 这是本模板比原件更稳的地方。 +% ⚠️ 但 \vfil 不能无限压:描述特别长时签名区会挤出行外。 +% 这是内容超量的正常表现(Word 里也一样),不是 bug。 +% +% ------------------------------------------------------------------ +% 实测基线(PDF 绝对 y;Δ 为与上一行的基线距) +% +% R0(顶线 172.99,内容顶 173.24) +% 事项描述 183.77 (10.53) +% 描述首行 227.81 (54.57) ← 段内行距 13.68 +% 兹证明 382.13 (208.89) +% 项目负责人 397.37 (Δ15.24) +% 年月日 412.85 (Δ15.48) +% 项目负责人是 426.89 (Δ14.04) ← 段内行距 13.56 +% 责任。 440.45 (Δ13.56) +% 非科研经费 454.13 (Δ13.68) 末行深 3.11 +% +% R1(顶线 457.49,内容顶 457.74) +% 本人证明 468.29 (10.55) +% 单位负责人 483.41 (Δ15.12) +% 年月日 498.89 (Δ15.48) +% 学院 512.93 (Δ14.04) 末行深 3.16 +% +% R2(顶线 516.34,内容顶 516.59) +% 科技管理 527.09 (10.50) +% 负责人签字 554.33 (Δ27.24) ← 原件一个空段,留写字空间 +% 年月日 569.93 (Δ15.60) 末行深 3.46 +%====================================================================== + +%---------------------------------------------------------------------- +% 日期行 +% +% 原件「 年 月 日」,三字间隔**各处不同**: +% R0 370.08 / 412.08 / 454.08 步长 42 / 42 +% R1 400.08 / 442.08 / 484.08 步长 42 / 42 +% R2 424.08 / 454.08 / 478.08 步长 30 / 24 ← 这格右边距紧 +% +% ⚠️⚠️ 两个坑: +% ① 原来用 \makebox[12pt][l] + \hspace{步长−12pt} 拼步长, +% 12 pt(12.045 bp)与 42 pt(42.157 bp)混减,每字累积 +% 0.16 bp,第三个字偏出 1.6 bp。 +% ② 原来年份用 \makebox[12pt][l]{#1},即使 #1 为空**仍占 12 pt**, +% 把「年」推出 30 pt,整组右移 28.67 bp。 +% ⇒ 三字全用 \sx@put 绝对定位,不积累、不占位;年份用右对齐 +% \makebox 挂在「年」左边,空着就整块不出。 +% +% \sx@dateline{年份}{年 x}{月 x}{日 x} +%---------------------------------------------------------------------- +\newcommand{\sx@ifempty}[1]{\if\relax\detokenize{#1}\relax} + +\newcommand{\sx@dateline}[4]{% + \sx@ifempty{#1}\else + \sx@put{\dimexpr#2-26bp\relax}{\makebox[24bp][r]{#1}}% + \fi + \sx@put{#2}{年}% + \sx@put{#3}{月}% + \sx@put{#4}{日}} + +%---------------------------------------------------------------------- +% R0 —— 事项描述 + 项目负责人签字 +%---------------------------------------------------------------------- +\newcommand{\sx@rowa@box}{% + \sx@cellvf{\sxrowa}% + {\sxfontbody\songti + \sx@blstart + \sx@bl{10.53bp}{事项描述:}% + \sx@blp{44.04bp}{13.68bp}{\sxdesc}}% + {\sxfontbody\songti + \sx@blstart + \sx@bl{0bp}{\sx@put{31.56bp}{兹证明该事项真实有效,本人愿意为此承担责任。}}% + \sx@bl{15.24bp}{% + \sx@put{210.00bp}{\sxfontsign\songti 项目负责人(签名):}% + \sx@put{323.97bp}{\sx@rule{84bp}}}% + \sx@bl{15.48bp}{% + \sx@put{318.00bp}{\sxfontsign\songti}% + \sx@dateline{\sxdateA}{318.00bp}{360.00bp}{402.00bp}}% + \sx@blp{14.04bp}{13.56bp}{% + \hspace*{21.00bp}项目负责人是科研经费使用的直接责任人,对经费使用的真实性、合理性及有效性承担经济与法律责任。}% + \sx@bl[3.11bp]{13.68bp}{\sx@put{21.00bp}{非科研经费亦适用本表格。}}}} + +%---------------------------------------------------------------------- +% R1 —— 单位负责人签字 + 单位公章 +% 实测下划线 x 187.05~253.05(长 66 bp);「单位公章:」后不画线。 +%---------------------------------------------------------------------- +\newcommand{\sx@rowB}{% + \sxfontbody\songti + \sx@bl{10.55bp}{本人证明以上事项属实,并愿意承担相应责任。}% + \sx@bl{15.12bp}{% + \sx@put{21.00bp}{\sxfontsign\songti 单位负责人(签名):}% + \sx@put{134.97bp}{\sx@rule{66bp}}% + \sx@put{309.00bp}{\sxfontsign\songti 单位公章:}}% + \sx@bl{15.48bp}{% + \sx@put{348.00bp}{\sxfontsign\songti}% + \sx@dateline{\sxdateB}{348.00bp}{390.00bp}{432.00bp}}% + \sx@bl[3.16bp]{14.04bp}{\sx@put{15.72bp}{学院对本单位科研经费使用承担监督和管理责任。}}} + +%---------------------------------------------------------------------- +% R2 —— 科技管理部门审批意见 +% 「科技管理」→「负责人签字」差 27.24 bp,比正常行距 15.6 多 11.64, +% 对应原件这一个空段(审批意见要留写字空间)。 +%---------------------------------------------------------------------- +\newcommand{\sx@rowC}{% + \sxfontbody\songti + \sx@bl{10.50bp}{科技管理部门审批意见:}% + \sx@bl{27.24bp}{% + \sx@put{26.28bp}{\sxfontsign\songti 负责人签字:}% + \sx@put{314.28bp}{\sxfontsign\songti 单位公章:}}% + \sx@bl[3.46bp]{15.60bp}{% + \sx@put{372.00bp}{\sxfontsign\songti}% + \sx@dateline{\sxdateC}{372.00bp}{402.00bp}{426.00bp}}} + +%====================================================================== +% 8. 备注区 +% +% 原 docx 三条备注是「annotation text」样式 + 自动编号(decimal "%1."), +% 行距 15 pt。实测基线 585.89 / 600.89 / 615.89 / 630.89(间距 15)。 +% 实测 x: 「备注:」79.44,编号「1.」95.16~103.05,正文 113.16 +% ⇒ 减内容左界 52.08:27.36 / 50.97 / 61.08 +% +% ⚠️ 四条同样不能用 \baselineskip —— 各自独立成段(同第 4 节坑一)。 +% +% ⚠️ 第 3 条在原 docx 里是**手打的**「 3. 」(没有 numPr), +% 比前两条多两个空格、位置差 0.36 bp。本模板统一排齐, +% 这是与原件唯一的有意差异(README「与原件差异」已列明)。 +%====================================================================== +\newlength{\sxnotebody} +\setlength{\sxnotebody}{61.08bp} % 正文左端 +\newlength{\sxnotenum} +\setlength{\sxnotenum}{50.97bp} % 编号右端 +\newlength{\sxnotelab} +\setlength{\sxnotelab}{27.36bp} % 「备注:」左端 + +% #1 = 编号 #2 = 正文 +% +% ⚠️ 偏移用「相对内容左界」的值,不要再减 \sxpad。 +% \sx@bl 的行盒是 \hbox to \sxboxw{\hskip\sxpad 内容\hss}, +% \rlap 的参照原点就在那 \hskip 之后 —— 也就是内容左界本身。 +\newcommand{\sxnoteitem}[2]{% + \sx@bl{15bp}{% + \rlap{\hspace*{\sxnotenum}\makebox[0bp][r]{#1}}% + \rlap{\hspace*{\sxnotebody}#2}}} + +%---------------------------------------------------------------------- +% 备注区四条(引言 + 三条),原文照录 —— 学校规定文字,不要改 +% ⚠️ 引言「备注:使用科研经费报销时……」是**连排的一句话**, +% 「备注:」不是悬挂标签,整行从 79.44 起排,故只需一个 \sx@put。 +%---------------------------------------------------------------------- +% 第一行的「块顶 → 首行基线」:实测 585.89 − 表格底 573.89 = 12.00 +\newcommand{\sxnotes}{% + \par\nointerlineskip + \vbox{% + \sxfontbody\songti + \sx@blstart + \sx@bl{12.00bp}{\sx@put{\sxnotelab}{备注:使用科研经费报销时,本表需要相关负责人签字审批的情形和要求如下:}}% + \sxnoteitem{1.}{符合《办法》第十八条第八款、第二十三条情形的,需项目负责人、单位负责人签字;}% + \sxnoteitem{2.}{符合《办法》第二十二条的情形,需项目负责人、单位负责人和科技部门负责人签字;}% + \sxnoteitem{3.}{除以上两种情形外,其他均由项目负责人签字。}}% + \par} + +%====================================================================== +% 9. 页脚 +% +% 原 docx 页脚:右对齐「— 1 —」,宋体 14 pt,右缩进 180 twips = 9 pt。 +% 实测整串左端 463.56、右端 512.65。本包版心右界 527.02, +% 故整串需再左移 527.02 − 512.65 = 14.37 bp。 +% +% ⚠️⚠️ 这里踩过一个坑:最初写 \fancyfoot[R]{\hspace*{-14.7pt}内容}, +% 负 \hspace 放**开头** —— 完全没效果(实测偏右 24.94 bp)。 +% 原因:fancyhdr 的 [R] 位把内容放进 \hbox to \textwidth 并前置 +% \hfil,靠「内容块整体贴右」对齐。开头加负 \hspace 只把块起点 +% 左移,块宽没变,右边界仍贴版心右界。 +% 正解:把内容装进**零宽盒**,让它的右缘成为对齐基准, +% 再用末尾的 \hspace 把基准往里推。 +%====================================================================== +\newlength{\sxfootinset} +\setlength{\sxfootinset}{24.94bp} + +\newcommand{\sxfootfont}{\sxfontfoot\songti} + +\newcommand{\sxfootcontent}{% + \makebox[0pt][r]{\sxfootfont — \thepage\ —}% + \hspace*{\sxfootinset}} + +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyfoot[R]{\sxfootcontent} +\fancypagestyle{plain}{% + \fancyhf{}% + \renewcommand{\headrulewidth}{0pt}% + \renewcommand{\footrulewidth}{0pt}% + \fancyfoot[R]{\sxfootcontent}% +} + +%====================================================================== +% 10. 一句话入口 +% +% \sxform —— 在 .tex 里只调这一个,整张表就出来了。 +% 标题、表格、备注、页脚全在里面。 +%====================================================================== +\newcommand{\sxform}{% + \sxtitle{中国海洋大学特殊事项说明表}% + \sxtable + \sxnotes} + +\AtBeginDocument{\sxfontbody\songti} +\endinput \ No newline at end of file diff --git a/特殊事项说明表/特殊事项说明表.pdf b/特殊事项说明表/特殊事项说明表.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2752c0eadfd2be71d4d10c46ea288945a82051c3 GIT binary patch literal 41380 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 T+yaS%703-lqN0*il0y0q^jHq} literal 0 HcmV?d00001 diff --git a/特殊事项说明表/特殊事项说明表.tex b/特殊事项说明表/特殊事项说明表.tex new file mode 100644 index 0000000..ba37d41 --- /dev/null +++ b/特殊事项说明表/特殊事项说明表.tex @@ -0,0 +1,39 @@ +%====================================================================== +% 中国海洋大学 特殊事项说明表 +% +% 编译: xelatex 特殊事项说明表.tex +% +% 版式来源:报销相关/中国海洋大学特殊事项说明表.docx +% 所有尺寸已在 ouccsx.sty 内注明换算过程;要改版式请改 sty。 +% +% 填表时只改下面【第 1 节】三行。 +%====================================================================== +\documentclass[UTF8,fontset=none]{ctexart} +\usepackage{ouccsx} + +%====================================================================== +% 1. 填这里(只有四行) +%====================================================================== + +% 事项描述。写清楚:为什么、去哪、做什么、为什么必须这样。 +% ⚠️ 可直接写多段,用 \\ 或空行分段都行;表格会自动让出空间。 +% ⚠️ 下面填的是**虚构示例**(去菏泽做项目研讨、自驾), +% 仅演示一份填好的表长什么样,实际使用时整段替换。 +\newcommand{\sxdesc}{% +因项目研讨需要,前往菏泽进行项目研讨与系统演示,因携带大件演示设备, +公共交通多有不便,因此采用自驾方式前往。} + +% 三处方框里的日期。留空则印成「 年 月 日」等手写。 +% 想打印具体日期就写 \sxdateA{2026},或 {2026}{10}{28} 用下面的完整版。 +\newcommand{\sxdateA}{} % 项目负责人签字处 +\newcommand{\sxdateB}{} % 单位负责人签字处 +\newcommand{\sxdateC}{} % 科技管理部门签字处 + +%====================================================================== +% 2. 正文(不用改) +%====================================================================== +\begin{document} + +\sxform + +\end{document} \ No newline at end of file