Files
ouc_latex_template/会议预算表

会议预算表

中国海洋大学会议预算表 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

⚠️ 签字栏为什么是独立的表

R27/R28(意见 + 签字)放在主表里无论怎么写都会出问题,四种组合全实测过:

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

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

⇒ 改成物理隔离:主表只到 R26「合计」(26 行),签字栏用独立的 oucmeetsign 环境紧贴下方。视觉上是同一张表(边框对接、列宽按主表 3:4 分界配平),排版上互不干扰。

签字表列宽算法(必须按主表实际竖线位置反推,不能自己估):

主表竖线 79.65 ~ 514.31 = 153.34mm,3:4 分界在 231.89 -> 距左 53.71mm
签字表 2 列:wd = 53.71-2 = 51.71mm  /  153.34-53.71-2 = 97.63mm

⚠️ 三个必须知道的坑

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] 不能在同一行

纵向合并和横向合并同时出现,报同样那串错。 本表因此全部改用 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 填写。 不含任何真实数据。