Commit Graph
5 Commits
Author SHA1 Message Date
laoyang f87d763602 重写全部 README,只保留使用说明
17 个 README 统一改成使用说明书,去掉来源、踩坑、需求过程等内容。

只保留:
- 怎么编译、跑几遍
- 文件结构
- 要改哪些参数(逐项列出宏名与含义)
- 用到的命令(表格)
- 版式参数

删除:
- 原文件来源、抽取过程
- 踩坑记录、最小复现、实测数据
- 用户需求、工单号、历史沿革
- 改造前后对比

行数 4185 → 2261。

全库 16/16 编译通过。
2026-11-01 08:52:54 +08:00
laoyang 333e2a7789 会议预算表:修掉多出的一列,签字盖章间距拉开 #24
用户反馈两点:
  ① 所在单位负责人意见下面,签字和盖章距离太近
  ② 表格右侧整体多出一列

## ② 多出一列的根因

实测竖线 **9 条 = 8 列**,而 colspec 只定义了 7 列。
多出来那列宽 2.18mm,横贯全部 28 行。

定位过程:
  删掉 R27/R28(意见+签字两行)→ 变 8 条竖线(7 列,正确)
  加回去 → 又变 9 条
  ⇒ 问题就在这两行。

四种组合全试过,全部失败:

| 内容段数 | cell 声明 | 结果 |
|---|---|---|
| 8 段(7 个 &) | cell{27}{4}={c=4} | 9 条竖线,多一列 ❌ |
| 7 段(6 个 &) | cell{27}{4}={c=4} | 9 条竖线,多一列 ❌ |
| 2 段(1 个 &) | cell{27}{4}={c=4} | 列数对,但第 2 段被合并盖住,内容消失 ❌ |
| 2 段 | cell{27}{2}={c=6} | 网格散架(3 页、横线全无)❌ |
| 7 段 | 无 cell 声明 | 同样散架 ❌ |

根因:tabularray 2022A 对「跨整行的大合并」处理不稳定,要求
「内容段数 / cell 起始列 / 跨度」三者严格自洽;在固定列宽 + colsep
1.0mm 的组合下,这三者无法同时满足。

### 解法:物理隔离

主表只到 R26「合计」(26 行),R27/R28 用独立的 oucmeetsign 环境
紧贴在下方。视觉上是同一张表,排版上互不干扰。

签字表列宽**不能自己估**,必须按主表实际竖线位置反推:
   主表竖线 79.65~514.31 = 153.34mm
   3:4 分界 231.89 -> 距左 53.71mm
   第1列 wd = 53.71 - 2 = 51.71mm
   第2列 wd = 153.34 - 53.71 - 2 = 97.63mm
(减 2 = 两侧 colsep 各 1mm)

⚠️ 第一版估的 47.18/93.80 总宽只有 144.98mm,比主表窄 10.5mm,
边框对不上,两格在 pymupdf 里连成一串,看着像只有一格。

## ① 签字盖章间距

3em(27bp=9.5mm) → 5em(45bp=15.8mm)。
实测「(签字)」右端 274.2,「(盖章)」左端 319.0,间距 44.8bp = 15.8mm。

⚠️ 第 1 格的「(签字)」不能用 \hfill 推到右边:第 1 格宽 51.71mm=146bp,
「(签字)」36bp,\hfill 推到格尾后文字**溢出单元格右边界**
(tabularray 不裁剪格内容),实测跑到 199~265 跨过分界线 232,
和第二个「(签字)」连成一串。
⇒ 直接顶格左排,前面补 1mm 抵消全角括号的字形左空白
(「(」的 ink 起点比盒起点靠左 2.5bp,不加会超出左界 79.40)。

## 验证

   主表竖线 8 条 -> **7 列**(多出的列已消除)
   内容核查 49 项,**缺失 0**
   校级领导意见 0 次
   其他费用竖排 y 531.3~586.4,上下留白各 13.4bp
   1 页  err 0  Overfull 0  Underfull 0
   最左 79.40(界79.40)  最右 521.58(界521.57)  最下 711.80(界742.65)

全库 15/15 通过。双端一致:
   WSL TeX Live 2025      1 页 err=0 over=0 under=0
   Windows TeX Live 2022  1 页 err=0 over=0 under=0
2026-10-30 23:37:12 +08:00
laoyang 2e79b00d50 会议预算表:其他费用字距收回,不再贴格线 #24
用户指出:「其他费用,五个字,不能跟那个格子一样高啊,这样字和表格的
线都连在一起了。」

## 问题

上一版为了让四字"填满 5 行",把 \\ 的行距拉到 \\[17bp],
结果文字块高 94bp,而合并格只有 81.9bp —— **文字块比格还高**,
头尾字距格线只剩 2.5bp,视觉上字和表格横线糊成一片。

## 修正

字距改 \\[4bp]。实测对比(9pt 字,合并格高 81.9bp):

   \\[17bp]  文字块 94bp   上下留白 2.5bp    ❌ 贴线
   \\[8bp]   文字块 67bp   上下留白 7.4bp    ⚠️ 偏挤
   \\[4bp]   文字块 56bp   上下留白 13.4bp   ✅ 采用
   不加参数  文字块 43bp   上下留白 19bp     ⚠️ 挤成一团,看不出竖排

## 验证(坐标实测)

   四字 y: 531.3~540.2 / 546.9~555.8 / 562.1~571.0 / 577.4~586.4
   合并格 y: 517.9 ~ 599.8   高 81.9 bp
   距上格线 13.4 bp   距下格线 13.4 bp   ← 完全对称居中

   1 页  error 0  Overfull 0  Underfull 0
   最右 521.58(版心限 521.57)  最下 710.30(版心底 742.65)
   表格宽 155.52 mm(版心 155.99 mm)

全库 15/15 通过。双端一致:
   WSL TeX Live 2025      1 页 err=0 over=0 under=0
   Windows TeX Live 2022  1 页 err=0 over=0 under=0

## 顺便记录

README 里加了字距对照表,说明为什么必须卡在 4bp,避免以后又调回大值。
2026-10-30 20:17:03 +08:00
laoyang f42e6e398a 会议预算表:修正四处排版问题 #24
用户反馈四点,逐条修。

## ① 会议时间与会议地点位置错乱

**现象**:两个字挤在一起,中间没有留填写区。

**根因**:tabularray 的 cell{} 合并位置决定标签落在哪一格,
不是"第几个字"。R2 的合并是 2+2+2+1,即
   格1(列1-2)=会议时间   格3(列3-4)=空值
   格5(列5-6)=会议地点   格7(列7)=空值
「会议地点」必须写在第 5 段,我原先写在第 3 段。

**顺带查清 tabularray 的一个静默失败**(最小复现):
写 7 段 `甲 & & 乙 & & 丙 & & 丁` → 四个字全对
写 4 段 `甲 & 乙 & 丙 & 丁`         → **乙、丁 被吞掉,不报错**
⇒ 段数必须等于列数,被合并的格留空。

**修正**:`会议时间 & & & & 会议地点 & & \\`
实测:会议时间 x=118.6(列1-2),会议地点 x=324.1(列5-6),
中间 193~289 是填写区。

## ② 其他费用应为竖排,不是旋转 90°

**根因**:`\rotatebox{90}` 只是把横排整句转个角度,
不是"上下排列"。用户要的是逐字竖着叠。

**修正**:改 `\shortstack{其\\[17bp]他\\[17bp]费\\[17bp]用}`,
并用 `cell{21}{1}={r=5}{c}` 做纵向合并 5 行。

实测:格高 82bp(y 517.9~611.7),四字 y=517.7/546.4/574.6/602.9,
字距 28.7bp,基本填满。

⚠️ 拉字距**不能**用局部 `\baselineskip` —— `\shortstack` 内部会重置它,
实测设 19bp 完全无效(字距仍是 11.6bp)。必须在 `\\` 上给可选参数。
⚠️ 也**不能**用 `\parbox{}{其\\他\\费\\用}` —— 会变成 4 个独立行盒子,
tabularray 排版错乱,四个字跑到不同段落(实测)。

⚠️ 之前认为「纵向合并和横向合并不能共存」,那是因为写在内容里用
`\SetCell[r=n]`;改用 cell{} 矩阵语法后**可以共存**,本条即证据。
第 2 节的说法已相应更正。

## ③ 校级领导意见是多余的

**先核实**:源 .doc 的 R26 第二格里**确实有两个段落**——
「所在单位负责人意见:」和「校级领导意见:」。
用 LibreOffice 直接转 txt 核过,原文件就有,不是转换时多出来的。

**但用户确认这份表不需要校级领导,故删除。**

代码里注明了原文件有两个段落,要恢复时加回来且必须单独一行。

## 顺带

去掉 `\RequirePackage{graphicx}` —— 不再用 \rotatebox,减少一个依赖。

## 验证

   1 页   error 0   Overfull 0   Underfull 0
   表格 155.52mm / 版心 155.99mm  界内
   最右 521.58(版心止 521.57)  最下 722.27(版心底 742.65)
   校级领导意见 出现 0 次
   会议时间/会议地点 相距 205bp 中间留空

全库 15/15 通过。双端一致:
   WSL TeX Live 2025     1 页 err=0 over=0 under=0
   Windows TeX Live 2022  1 页 err=0 over=0 under=0
2026-10-30 20:11:50 +08:00
laoyang 1c67b7ded1 新增《会议预算表》LaTeX 模板 #24
源文件:微信收到的 会议预算表.doc(51712 字节,**OLE2 老式 .doc**,
D0CF11E0 签名)。python-docx 读不了,处理链路:
.doc --(LibreOffice headless)--> .docx --(python-docx)--> 结构

## 新增文件

   会议预算表/oucmeeting.sty   版式包(含全部 28 行合并规则)
   会议预算表/会议预算表.tex   空表正文(只有内容,无 \SetCell)
   会议预算表/README.md        用法 + 踩坑记录

## 版式(实测)

   页面    A4 210×297mm
   边距    top 38.01 / bottom 35.01 / left 28.01 / right 26.00 mm
   版心    155.99 × 223.98 mm
   字号    标题 22pt,表格与说明 9pt
   表格    28 行 × 7 列,边框 0.5pt,行高 5.6mm

四个边距都不常见,是原表为把 28 行塞进一页压出来的。照抄不"优化"。

⚠️ 原表宽 169.12mm(tblGrid 9588 twips),**比分宽出版心 13.12mm**,
原 docx 靠 fixed 布局硬撑、实际压进页边距。本模板等比缩到版心内。

## 三个踩了很久的坑(全部写进代码注释 + README)

### 1. 合并必须用矩阵式语法,不能写 \SetCell

在这套 7 列 Q[c,m,wd=…] + colsep=1.0mm 配置下,内容里一写
\SetCell[c=n] 就报:

   ! Missing number, treated as zero.
   ! Illegal unit of measure (pt inserted.)
   \__dim_eval_end:

**所有错误都定位到 \end{tblr}**,完全看不出是哪个格。
最小复现(已验证):
   \begin{tblr}{colspec={Q[c,m,wd=21mm]...7列..., colsep=0.8mm}}
     \SetCell[c=2]{c} A & \SetCell[c=5]{l} B \\
   \end{tblr}   % 必崩

✅ 正解:在 tblr 选项里用 cell{行}{列}={c=n}{对齐},被合并格留空。

这个坑吃掉最多时间 —— 因为报错行号指向 \end{tblr},
试过 \shortstack、\rotatebox、\newline 各种改,全都不对,
最后靠「同一合并规则换成 cell{} 语法就 0 错」的最小复现才定位到。

### 2. \SetCell[r=n] 与 \SetCell[c=m] 不能同现

纵向合并和横向合并放同一行,报同样那串错。
本表完全不用纵向合并 —— 「其他费用」改成 \rotatebox{90} 竖排,
第 1 列下面 4 行留空,视觉等价。

### 3. colspec / hline / vline / ht 参数不能用宏

tabularray 用自带展开器解析这些选项,遇到用户宏直接
`! Undefined control sequence.`。全部写字面值。

## 页高预算(关键,别乱改行高)

   28 × 5.6mm = 156.8mm
   标题区(附件1 + 22pt 标题 + 日期行)≈ 30mm
   说明 3 条(第 2 条占两行)≈ 35mm
   合计 ≈ 222mm  ≤ 223.98mm  ✅ 刚好一页

⚠️ 行高 5.6mm 已在下限附近。改回 6.0mm 会让 28 行多出 11.2mm,
第 3 条说明立刻被挤到第 2 页(实测过)。

## 验证

   1 页   error 0   Overfull 0   Underfull 0
   表格 155.52mm / 版心 155.99mm  → 界内
   内容 50 项逐项核对,全部存在
   (唯一"缺失"项是「不得坐支现金」因跨行被 \n 断开,
     去空白后匹配通过 —— 不是真缺失)

全库 bash build.sh all → **15/15 通过**(新增第 15 项,已加入 verify_all.sh)

双端一致:
   WSL TeX Live 2025     1 页 err=0 over=0 under=0
   Windows TeX Live 2022  1 页 err=0 over=0 under=0

## 说明

空表,金额/卡号/日期/人名一律留空。不含任何真实数据。
2026-10-30 16:50:32 +08:00