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

126 lines
5.7 KiB
TeX
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.
%======================================================================
% 中国海洋大学会议预算表(空表模板)
%
% 用途:演示 oucmeeting.sty 的用法,并作为可直接印刷使用的空表。
%
% 编译: xelatex 会议预算表.tex (单次即可)
%
% ⚠️ 这是**空表**。金额、卡号、日期、人名一律留空,供手填。
%
% ⚠️⚠️ 本文件的表格**只写内容,不写任何 \SetCell**。
% 所有合并规则都在 oucmeeting.sty 的 oucmeettable 环境里,
% 用 cell{行}{列}={c=n}{对齐} 矩阵式声明。
% 原因(踩了两小时):在这套 7 列 Q[c,m,wd=…] + colsep 配置下,
% 一写 \SetCell 就报一串 Missing number,且错误全指向 \end{tblr}。
% 详见 sty 第 4 节的记录。
%
% ⚠️ 被合并掉的格在内容里**留空**(写 `& &`),不要写 {}。
%
% 28 行的合并结构(行号 = 表格第几行,从 1 起):
% R1 会议名称 2+5
% R2 会议时间/地点 2+2+2+1
% R3 会议类型 2+5
% R4 参会人数 2+5
% R5 支出项目卡号 2+5
% R6 会议内容 2+5
% R7 会议收入预算 跨 7 列
% R8 收入表头 2+2+2+1
% R9 会务费收入 2+2+2+1
% R10 科研经费 2+2+2+1
% R11 财政拨款专项 2+2+2+1
% R12 学校预算经费 2+2+2+1
% R13 其他 2+2+2+1
% R14 合计 2+2+2+1
% R15 会议支出预算 跨 7 列
% R16 支出表头 3+2+2
% R17 专家咨询费 3+2+2
% R18 城市间交通费 3+2+2
% R19 住宿费 3+2+2
% R20 伙食费 3+2+2
% R21 其他费用/交通费 1+2+2+2
% R22 会议资料印刷费 1+2+2+2
% R23 会议室使用费 1+2+2+2
% R24 工作人员补助 1+2+2+2
% R25 其他 1+2+2+2
% R26 合计 3+2+2
% R27 意见栏 3+4
% R28 签字栏 3+4
%======================================================================
\documentclass[UTF8]{ctexart}
\usepackage{oucmeeting}
\begin{document}
\oucmeetattach{附件 1}
\oucmeettitle{中国海洋大学会议预算表}
\oucmeetdateline{填表日期:\hspace*{4em}年\hspace*{2em}月\hspace*{2em}日%
\hfill 金额单位:\hspace*{3em}元}
\begin{oucmeettable}
% ---- R1~R6 基本信息 ----
会议名称 & & & & & & \\
会议时间 & & 会议地点 & & & & \\
% ⚠️ R3/R4 的填空横线用 \hspace 撑,宽度必须控制。
% 跨 5 列约 122mm,三个选项各带一对(\hspace{3em})就要 6×3em=18em
% 再加文字,实测撑到 529.7bp(版心止于 521.57),超 8bp。
% ⇒ 单个填空收到 2.2em(约 7mm,手写两三个字够用)。
会议类型 & & 国内业务会议(\hspace*{2.2em})\hspace*{1em}%
国内管理会议(\hspace*{2.2em})\hspace*{1em}%
在华举办国际会议(\hspace*{2.2em}) & & & & \\
参会人数 & & 总数\hspace*{2.2em}人\hspace*{1em}%
(其中参会代表\hspace*{2.2em}人;工作人员\hspace*{2.2em}人;%
外宾\hspace*{2.2em}人) & & & & \\
会议支出项目卡号 & & & & & & \\
会议内容 & & & & & & \\
% ---- R7~R14 收入预算 ----
\bfseries 会议收入预算 & & & & & & \\
收入项目 & & 项目经费卡号 & & 金额 & & 备注 \\
会务费收入 & & & & & & 每人\hspace*{2.5em}元 \\
科研经费 & & & & & & \\
财政拨款会议专项经费 & & & & & & \\
学校预算经费 & & & & & & \\
其他 & & & & & & \\
合计 & & & & & & \\
% ---- R15~R26 支出预算 ----
\bfseries 会议支出预算 & & & & & & \\
支出项目 & & & 预算金额 & & 实际支出金额(由财务处填写) & \\
专家咨询费(含讲课及评审费) & & & & & & \\
专家城市间交通费 & & & & & & \\
住宿费 & & & & & & \\
伙食费 & & & & & & \\
% R21~R25:「其他费用」竖排,只写在第 1 列的第一行(R21),
% 下面 4 行该列留空。用 \rotatebox 真旋转,不用 \\ 换行
% (\\ 会被 tabularray 当成行结束,破坏整表)。
\rotatebox{90}{其他费用} & 交通费 & & & & & \\
& 会议资料印刷费 & & & & & \\
& 会议室使用费 & & & & & \\
& 工作人员补助 & & & & & \\
& 其他 & & & & & \\
合计 & & & & & & \\
% R27~R28 意见与签字(跨 3+4)
% ⚠️⚠️ 这里的 \hspace 会把**单元格撑宽,进而把表格右边框推出纸外**,
% 而且文字本身仍在版心内 —— 所以逐 span 查文字查不出来,
% 只有查竖线坐标才能发现(实测最右竖线跑到 526.40,版心止于 521.57)。
% 实测数据:\hspace*{7em} → 超 4.83bp;4.5em → 仍超 4.83bp(跨列宽度已定死,
% hspace 只是让内容溢出单元格,不改列宽)。
% ⇒ 该单元格内容必须能在一行内放下。「(签字) (盖章)」共 9 个全角字符
% ≈ 9×9bp = 81bp,跨 4 列约 96mm = 272bp,够放,只要 hspace 不太大。
% 给 3em(约 9.5mm)即可,手写签名空间足够。
经费(项目)负责人意见: & & & 所在单位负责人意见:\hspace*{4em}校级领导意见: & & & & \\
\hfill(签字) & & & (签字)\hspace*{3em}(盖章) & & & & \\
\end{oucmeettable}
\begin{oucmeetnotes}
\oucmeetnote{1、}{会议借款和报销应按会议预算执行,如突破预算总额,须按原程序审批;}
\oucmeetnote{2、}{收取会务费时按要求给会议代表开具发票,收取的会务费及发票存根和记账联统一交财务处入账,不得坐支现金;}
\oucmeetnote{3、}{会议费开支实行定额控制,标准参照《中国海洋大学会议费管理办法》。}
\end{oucmeetnotes}
\end{document}