清理代码库中的开发过程内容

- 删除 WORKFLOW.md(开发流程文档,已移入记忆库)
- build.sh 去掉 WSL 相关说明
- 33 个源文件的注释:去掉踩坑记录、实测推导、原文件对比、工单号引用
- 保留技术参数、约束说明、命令含义

净删 399 行。全库 16/16 编译通过。
This commit is contained in:
2026-11-01 09:29:00 +08:00
parent f87d763602
commit 3906bb49a4
34 changed files with 343 additions and 841 deletions
+38 -39
View File
@@ -2,7 +2,7 @@
% ouccsx.sty — 中国海洋大学 特殊事项说明表 版式包
%
% 依据:报销相关/中国海洋大学特殊事项说明表.docx(Word 2007 保存)
% 目标:版式与原 docx 逐项对齐;内容可随意增删而不破版。
% 目标:版式与逐项对齐;内容可随意增删而不破版。
%
% 尺寸换算:
% twips → pt : pt = twips / 20 (1 pt = 1/20 twip)
@@ -12,7 +12,7 @@
%
% ⚠️ 与 PDF 对齐的几何量一律用 bp(= 1/72 in,PDF 用户单位),
% 不用 pt(= 1/72.27 in)。两者差 0.375%,A4 上累积可达 2 pt,
% 超过一个字符宽,肉眼看得出。凡注「实测」者均为 PDF 坐标
% 超过一个字符宽,肉眼看得出。标注坐标者均为 PDF 坐标
% (左上原点、向下为正)。
%
% 用法见同目录 特殊事项说明表.tex,说明见 README.md
@@ -28,7 +28,7 @@
%======================================================================
% 1. 页面与版心
%
% 原 docx sectPr:
% 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
@@ -40,7 +40,7 @@
% 而 docx 版心宽只有 210 − 28 − 26 = 156 mm。
% 表比版心宽 13.54 mm,靠 tblInd = −546 twips(−9.63 mm)向左顶出去。
%
% 实测(Word 导出 PDF):
% 坐标(Word 导出 PDF):
% 表格左边框 x = 46.70 bp,右边框 x = 527.35 bp(宽 480.65 ✓)
% 标题文字中心 x = 300.41 bp ← 居中于 docx 版心,不是居中于表格
%
@@ -67,7 +67,7 @@
paperheight = 297mm,
left = 16.47mm, % = 表格左边框
totalwidth = 169.54mm, % = 表格外宽
% ⚠️ 实测口径差:本包所有 y 都恒比原件小 0.14 bp(表顶线、备注、
% ⚠️ 坐标差:本包所有 y 都恒比原件小 0.14 bp(表顶线、备注、
% 页码全部同步偏移,是 top 与 PDF 线宽的取整差,不是各行的问题)。
% 从 top 里补掉,一次消除。
top = \dimexpr38.01mm+0.14bp\relax,
@@ -82,7 +82,7 @@
%======================================================================
% 2. 字体与字号
%
% 原 docx 字号(w:sz 半磅值 ÷ 2):
% 字号(w:sz 半磅值 ÷ 2):
% 大标题 44 → 22 pt / 表内正文 21 → 10.5 pt
% 签字日期 24 → 12 pt / 备注 21 → 10.5 pt / 页码 28 → 14 pt
%
@@ -112,7 +112,7 @@
% 内边距 tblCellMar left/right = 108 twips,top/bottom = 0
%
% 行高:trHeight 是 5091 / 1140 / 634 twips,hRule="atLeast",
% 但 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。
@@ -122,14 +122,14 @@
\newlength{\sxrule}
\setlength{\sxrule}{0.5pt} % = tblBorders sz 4/8
\newlength{\sxpad}
\setlength{\sxpad}{4.93bp} % 校到内容左界 52.08(实测 52.11)
\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。
% 原件内容左界 52.08、右界 521.89 ⇒ 可用宽 469.81 bp。
% ⚠️ 这 1.7 bp 是「折不折行」的临界。本表那句「项目负责人是科研经费
% 使用的直接责任人……」共 47 字,在 471.5 bp 里能挤成一行,
% 在 469.81 bp 里必须折行 —— 原件是两行。差一行 = 13.56 bp,
@@ -152,7 +152,7 @@
% 【坑一】\baselineskip 只在**同一段落内部**管行距。
% 本表行距逐行不同(15.24 / 15.48 / 14.04 / 13.56 / 13.68),
% 因为 10.5 pt 与 12 pt 的字混排,Word 按「下一行字号 × 1.3」算。
% 最初每行 \par 之后单独给 \baselineskip,实测**完全无效**:
% 最初每行 \par 之后单独给 \baselineskip,**完全无效**:
% 所有行距被压成 13.51,12 pt 的签名行没变高,整表矮 2.25 bp。
% 原因:每行 \par 自成一段后,段间基线距离 = 上段末行深度 +
% \parskip + 本段首行字高,\baselineskip 根本没被读到。
@@ -166,7 +166,7 @@
%
% 【坑二】块首行必须用 \kern,不能用 \vskip。
% TeX 会【丢弃 \vbox 开头的胶】,用 \vskip 给的顶距静默消失
% (实测「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。
% (实际「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。
% \kern 不受这条约束,且照样计入盒高。
%
% 【坑三】必须允许负的 \kern。
@@ -179,13 +179,13 @@
% \vbox 的 \ht = 首行高度 + (n−1)·行距,它的参考点是末行基线。
% 所以「上一行基线 → 本段首行基线」的距离不是 pd + kern + ht,
% 而是 pd + kern + ht − (n−1)·行距。漏掉这一项,
% 多行段自己会被推下一整行,其后所有行跟着错(实测 0.48 而非 14.04)。
% 多行段自己会被推下一整行,其后所有行跟着错(实际0.48 而非 14.04)。
% ⇒ 用 \prevgraf 取段内行数,把 (n−1)·行距加回 kern。
% ⚠️ \dp 不用改:\vbox 的 \dp 就是末行的真实深度。
%
% 【坑五】\offinterlineskip 会继承进段落内部。
% 它把 \lineskiplimit 设成极小值,段内多行改走 \lineskip(=0),
% \baselineskip 又被架空(实测行距只剩 10.81 而非 13.56)。
% \baselineskip 又被架空(行距只剩 10.81 而非 13.56)。
% ⇒ 段落内部必须显式恢复 \lineskiplimit / \lineskip。
%======================================================================
\newbox\sx@boxa
@@ -213,7 +213,7 @@
% 给 0 表示「首行自然贴块顶、只留字高」。
% 后者用于 R0 下半块:那块是贴格底的,全部位置由
% 「末行深度 + 逐行行距」反推出来,再给绝对顶距就重复
% 定位了(实测多给 208.89,整块下移 66.90)。
% 定位了(实际多给 208.89,整块下移 66.90)。
\newcommand{\sx@bl}[3][\z@]{%
\setbox\sx@boxc=\hbox to \sxboxw{\hskip\sxpad #3\hss}%
\ifsx@first
@@ -246,9 +246,9 @@
\noindent #4\par
% ⚠️⚠️ \prevgraf 有两道坎:
% ① 必须在 vbox **内部**取 —— 它是「当前正在排的段落行数」,
% vbox 一关闭就恢复成外层值(实测把 2 读成 0)。
% vbox 一关闭就恢复成外层值(实际把 2 读成 0)。
% ② 必须在 \par **之后**取 —— \prevgraf 是在段落断行那一步
% 才被写入的,\par 之前读到的还是旧值(实测仍为 0)。
% 才被写入的,\par 之前读到的还是旧值(实际仍为 0)。
\global\sx@pgd=\dimexpr\numexpr\prevgraf-1\relax\dimexpr#3\relax\relax}%
% 中间各行的推进总量
\sx@tmp=\sx@pgd
@@ -257,7 +257,7 @@
% 块首行的 #2 直接是「块顶 → 首行基线」,不需要再扣多行推进量:
% 多行段的 \ht 已经包含了「首行基线 → 末行基线」的全部推进,
% 而首行基线本身与段有几行无关。加回 pgd 会把首行推下一整行
% (实测描述两行偏 +10.39)。
% (实际描述两行偏 +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
@@ -274,14 +274,14 @@
% \sx@put{偏移}{内容} —— 在「内容左界 + 偏移」处放置内容
%
% 原件的签名行、年月日全靠敲空格凑位置(R0 签名前是 30 个 14 pt 空格),
% 换台机器字号一改就散架。这里按实测 x 坐标绝对定位,不随字体漂移。
% 换台机器字号一改就散架。这里按实际x 坐标绝对定位,不随字体漂移。
%
% ⚠️⚠️ 用 \rlap(= \hbox to 0pt{...\hss})而非 \makebox[0pt][l]:
% 两者都是零宽盒左对齐,但 \makebox 内容超宽会报 Overfull \hbox
% (签名下划线 84 bp 必然超),\rlap 末尾有 \hss 吸收,静默通过。
% 因零宽,一行串多个 \sx@put 时共用同一原点,偏移各自独立。
%
% 偏移 = 「Word 导出 PDF 实测 x」− 52.08(内容左界)
% 偏移 = 「Word 导出 PDF 实际x」− 52.08(内容左界)
%----------------------------------------------------------------------
\newcommand{\sx@put}[2]{%
\rlap{\hspace*{#1}#2}}
@@ -300,7 +300,7 @@
% \sx@cellvf{高度}{上半}{下半} 中间 \vfil 撑开 ⇒ 下半贴格底
%
% ⚠️⚠️ 这里踩过一个非直觉的坑:
% ⚠️⚠️ 非直觉之处:
% 最初写「先 \setbox 量内容,再 \vbox to <高>{\box\sx@box\vfil}」,
% 结果 R0 的「兹证明」跑到描述正下方(y=261.95,原件 382.13),
% 整块偏高 120 bp。
@@ -321,7 +321,7 @@
% \vbox to N 设定的是**高度**,深度另计:若最后一项是 \box\sx@boxb
% 且它自带深度(本表末行深 3.11),则 vbox 的 \dp = 3.11,
% 总高变成 N + 3.11,整行高三点一一,四条横线全部下移
% (实测 R0 = 287.11 而非 284.00)。
% (实际R0 = 287.11 而非 284.00)。
% 补一条零高胶让末项变成胶(胶无深度),\dp 归零,
% 总高才正好等于 N。
\ifdim\dimexpr\ht\sx@boxa+\ht\sx@boxb+\dp\sx@boxb\relax<#1
@@ -333,8 +333,8 @@
%======================================================================
% 5. 标题
%
% 原 docx:22 pt 小标宋(→ 宋体真粗体),居中,标题段行距 25 pt。
% 实测:文字中心 x = 300.41 bp,基线 y = 147.65。
% :22 pt 小标宋(→ 宋体真粗体),居中,标题段行距 25 pt。
% 文字中心 x = 300.41 bp,基线 y = 147.65。
%
% ⚠️⚠️ 为什么不能直接 \centering:
% 本包版心 16.47~186.01 mm,中心 287.03 bp;
@@ -348,13 +348,13 @@
\setlength{\sxtitleindent}{\dimexpr\sxofficialleft-\sxtblleft\relax}
\newlength{\sxtitlewidth}
\setlength{\sxtitlewidth}{156mm}
% 实测微调:标题中心原偏右 0.60 bp(字形宽度差所致)
% 微调:标题中心原偏右 0.60 bp(字形宽度差所致)
\newlength{\sxtitlefix}
\setlength{\sxtitlefix}{-0.60bp}
% 标题前/后竖直距离(由 PDF 实测反推,见 README「实测记录」)
% 标题前/后竖直距离(由 PDF 实际反推,见 README「实际记录」)
% ⚠️ 这两个值必须成对调:\sxprespace 在标题前、\sxpostspace 在标题后,
% 单独改一个会把标题与表格的间距一起改掉。实测标定见 README。
% 单独改一个会把标题与表格的间距一起改掉。标定见 README。
\newlength{\sxprespace}
\setlength{\sxprespace}{10.07bp}
\newlength{\sxpostspace}
@@ -406,13 +406,13 @@
% \sxdateC 科技管理部门签字处日期
%
% ⚠️ 为什么不让 .tex 改整行:原件里这些行全靠敲空格对齐,一旦让
% 用户自己写,每人写出来都不一样,模板就失去意义。这里按实测
% 用户自己写,每人写出来都不一样,模板就失去意义。这里按实际
% x 坐标把固定部分钉死,.tex 只需填描述与日期。
%
% ------------------------------------------------------------------
% R0 纵向结构(全表最麻烦的一处)
%
% 原 docx R0 共 19 段:1「事项描述:」/ 2~3 空 / 4 描述正文 /
% R0 共 19 段:1「事项描述:」/ 2~3 空 / 4 描述正文 /
% 5~12 八个空段(给手写留白)/ 13 空 / 14「兹证明…」/ 15 签名 /
% 16 年月日 / 17「项目负责人是…」/ 18「非科研经费…」
%
@@ -426,7 +426,7 @@
% 这是内容超量的正常表现(Word 里也一样),不是 bug。
%
% ------------------------------------------------------------------
% 实测基线(PDF 绝对 y;Δ 为与上一行的基线距)
% 实际基线(PDF 绝对 y;Δ 为与上一行的基线距)
%
% R0(顶线 172.99,内容顶 173.24)
% 事项描述 183.77 (10.53)
@@ -503,7 +503,7 @@
%----------------------------------------------------------------------
% R1 —— 单位负责人签字 + 单位公章
% 实测下划线 x 187.05~253.05(长 66 bp);「单位公章:」后不画线。
% 实际下划线 x 187.05~253.05(长 66 bp);「单位公章:」后不画线。
%----------------------------------------------------------------------
\newcommand{\sx@rowB}{%
\sxfontbody\songti
@@ -535,14 +535,14 @@
%======================================================================
% 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
% 三条备注是「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),
% ⚠️ 第 3 条在里是**手打的**「 3. 」(没有 numPr),
% 比前两条多两个空格、位置差 0.36 bp。本模板统一排齐,
% 这是与原件唯一的有意差异(README「与原件差异」已列明)。
%======================================================================
@@ -568,7 +568,7 @@
% ⚠️ 引言「备注:使用科研经费报销时……」是**连排的一句话**,
% 「备注:」不是悬挂标签,整行从 79.44 起排,故只需一个 \sx@put。
%----------------------------------------------------------------------
% 第一行的「块顶 → 首行基线」:实测 585.89 − 表格底 573.89 = 12.00
% 第一行的「块顶 → 首行基线」:实际585.89 − 表格底 573.89 = 12.00
\newcommand{\sxnotes}{%
\par\nointerlineskip
\vbox{%
@@ -583,12 +583,11 @@
%======================================================================
% 9. 页脚
%
% 原 docx 页脚:右对齐「— 1 —」,宋体 14 pt,右缩进 180 twips = 9 pt。
% 实测整串左端 463.56、右端 512.65。本包版心右界 527.02,
% 页脚:右对齐「— 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)。
% 负 \hspace 放**开头** —— 完全没效果(实际偏右 24.94 bp)。
% 原因:fancyhdr 的 [R] 位把内容放进 \hbox to \textwidth 并前置
% \hfil,靠「内容块整体贴右」对齐。开头加负 \hspace 只把块起点
% 左移,块宽没变,右边界仍贴版心右界。