Files
ouc_latex_template/会议预算表/README.md
T
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

173 lines
5.5 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 模板(空表,可印刷手填)。
## 来源
用户从微信收到的 `会议预算表.doc`(51712 字节,**OLE2 老式 .doc**,
`D0CF11E0` 签名,不是伪装成 .doc 的 docx)。
python-docx 读不了老格式,处理链路是:
```
.doc --(LibreOffice headless)--> .docx --(python-docx)--> 结构
```
```bash
soffice --headless --convert-to docx --outdir . 会议预算表.doc
```
## 编译
```bash
cd 会议预算表
xelatex 会议预算表.tex # 单次即可,无交叉引用
```
或仓库根:`bash build.sh 会议预算表`
## 文件
| 文件 | 作用 |
|---|---|
| `oucmeeting.sty` | 版式包(页面、字体、表格环境 + 全部合并规则) |
| `会议预算表.tex` | 空表正文(只有内容,无任何 `\SetCell`) |
| `README.md` | 本文件 |
## 版式参数(实测)
```
页面 A4 210 × 297 mm
边距 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 行塞进一页压出来的。照抄,不"优化"。
## 表格结构
7 列基准网格,原 docx 的 `tblGrid` 是
`[424, 2054, 790, 1262, 2056, 209, 2793]` twips = 169.12mm,
比分宽出版心 13.12mm(原文件靠 fixed 布局硬撑、压进页边距)。
→ 本模板等比缩到版心内,列宽
`[7.48, 36.23, 13.93, 22.26, 36.27, 3.69, 49.27] × 0.9224`。
28 行合并结构:
| 行 | 内容 | 跨度 |
|---|---|---|
| 1 | 会议名称 | 2+5 |
| 2 | 会议时间 / 会议地点 | 2+2+2+1 |
| 3 | 会议类型(三选一) | 2+5 |
| 4 | 参会人数 | 2+5 |
| 5 | 会议支出项目卡号 | 2+5 |
| 6 | 会议内容 | 2+5 |
| 7 | **会议收入预算**(分节) | 跨 7 |
| 8 | 收入项目 / 经费卡号 / 金额 / 备注 | 2+2+2+1 |
| 9~13 | 会务费收入 / 科研经费 / 财政拨款专项 / 学校预算 / 其他 | 2+2+2+1 |
| 14 | 合计 | 2+2+2+1 |
| 15 | **会议支出预算**(分节) | 跨 7 |
| 16 | 支出项目 / 预算金额 / 实际支出 | 3+2+2 |
| 17~20 | 专家咨询费 / 城市间交通费 / 住宿费 / 伙食费 | 3+2+2 |
| 21~25 | **其他费用**(竖排)+ 交通费 / 印刷费 / 会议室 / 补助 / 其他 | 1+2+2+2 |
| 26 | 合计 | 3+2+2 |
| 27 | 意见栏 | 3+4 |
| 28 | 签字栏 | 3+4 |
## ⚠️ 三个必须知道的坑
### 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}`**,完全看不出是哪个格。最小复现:
```latex
\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}{对齐}`:
```latex
\begin{tblr}{
colspec={...},
cell{1}{1}={c=2}{c},
cell{1}{3}={c=5}{l},
}
A & & B & & & & \\ % 被合并掉的格留空
\end{tblr}
```
被合并掉的格**留空**(写 `& &`),不要写 `{}`。
好处:合并关系与内容彻底分离,改内容不会破坏结构。
### 2. `\SetCell[r=n]` 与 `\SetCell[c=m]` 不能在同一行
纵向合并和横向合并同时出现,报同样那串错。
本表因此全部改用 `cell{}` 矩阵语法(含纵向合并 `cell{21}{1}={r=5}{c}`)。
「其他费用」用 `\shortstack{其\\[4bp]他\\[4bp]费\\[4bp]用}` 逐字竖排,
**不是** `\rotatebox{90}` 旋转——旋转只是把横排整句转个角度,
不是"上下排列"。
#### 字距必须卡准,否则字会贴格线
合并格高 81.9bp,四字的文字块高度随字距变化(实测数据):
| 字距 | 文字块高 | 上下留白 | 观感 |
|---|---|---|---|
| `\\[17bp]` | 94bp | 2.5bp | ❌ 比格还高,字和表格线连成一片 |
| `\\[8bp]` | 67bp | 7.4bp | ⚠️ 偏挤 |
| **`\\[4bp]`** | **56bp** | **13.4bp** | ✅ 采用 |
| 不加参数 | 43bp | 19bp | ⚠️ 字挤成一小团,看不出竖排 |
⚠️ 拉字距不能用局部 `\baselineskip`——`\shortstack` 内部会重置它,
实测设 19bp 完全无效(字距仍是 11.6bp)。必须在 `\\` 上给可选参数。
⚠️ 也不能用 `\parbox{}{其\\他\\费\\用}`——那会变成 4 个独立行盒子,
tabularray 排版错乱,四个字跑到不同段落。
### 3. colspec / hline / vline / ht 的参数不能用宏
tabularray 用自带的展开器解析这些选项,遇到用户宏直接报
`! Undefined control sequence.`。全部写字面值。
## 页高预算(重要)
28 行 × 行高 + 标题区 + 说明,必须 ≤ 223.98mm:
```
28 × 5.6mm = 156.8mm
标题区(附件1 + 22pt 标题 + 日期行)≈ 30mm
说明 3 条(其中第 2 条两行)≈ 35mm
合计 ≈ 222mm ✅ 刚好放进一页
```
⚠️ 行高 5.6mm 是**下限附近**。若把行高改回 6.0mm,28 行多出 11.2mm,
第 3 条说明就会被挤到第 2 页。改行高前先算这笔账。
## 验证
```
1 页 error 0 Overfull 0 Underfull 0
表格 155.52mm,版心 155.99mm → 在界内
内容 50 项逐项核对,全部存在
双端一致:WSL TeX Live 2025 / Windows TeX Live 2022
```
## 说明
这是**空表**。金额、卡号、日期、人名一律留空,供下载后手填或转 Word 填写。
不含任何真实数据。