源文件:微信收到的 会议预算表.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 ## 说明 空表,金额/卡号/日期/人名一律留空。不含任何真实数据。
会议预算表
中国海洋大学会议预算表 LaTeX 模板(空表,可印刷手填)。
来源
用户从微信收到的 会议预算表.doc(51712 字节,OLE2 老式 .doc,
D0CF11E0 签名,不是伪装成 .doc 的 docx)。
python-docx 读不了老格式,处理链路是:
.doc --(LibreOffice headless)--> .docx --(python-docx)--> 结构
soffice --headless --convert-to docx --outdir . 会议预算表.doc
编译
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},完全看不出是哪个格。最小复现:
\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}{对齐}:
\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] 不能在同一行
纵向合并和横向合并同时出现,报同样那串错。
本表因此完全不用纵向合并——「其他费用」改成 \rotatebox{90} 竖排,
第 1 列下面 4 行留空,视觉上等价。
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 填写。 不含任何真实数据。