diff --git a/会议预算表/.preview/full.png b/会议预算表/.preview/full.png new file mode 100644 index 0000000..b0e3f1c Binary files /dev/null and b/会议预算表/.preview/full.png differ diff --git a/会议预算表/.preview/zone.png b/会议预算表/.preview/zone.png new file mode 100644 index 0000000..02c2a25 Binary files /dev/null and b/会议预算表/.preview/zone.png differ diff --git a/会议预算表/README.md b/会议预算表/README.md index fe561dc..c6c07b3 100644 --- a/会议预算表/README.md +++ b/会议预算表/README.md @@ -74,8 +74,33 @@ xelatex 会议预算表.tex # 单次即可,无交叉引用 | 17~20 | 专家咨询费 / 城市间交通费 / 住宿费 / 伙食费 | 3+2+2 | | 21~25 | **其他费用**(竖排)+ 交通费 / 印刷费 / 会议室 / 补助 / 其他 | 1+2+2+2 | | 26 | 合计 | 3+2+2 | -| 27 | 意见栏 | 3+4 | -| 28 | 签字栏 | 3+4 | +| 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 +``` ## ⚠️ 三个必须知道的坑 diff --git a/会议预算表/oucmeeting.sty b/会议预算表/oucmeeting.sty index 9cb221c..7bdacf2 100644 --- a/会议预算表/oucmeeting.sty +++ b/会议预算表/oucmeeting.sty @@ -143,10 +143,7 @@ \newenvironment{oucmeettable}{% \par\begingroup\Mn \begin{tblr}[label=none]{ - colspec={ - Q[c,m,wd=6.10mm] Q[c,m,wd=29.65mm] Q[c,m,wd=11.43mm] Q[c,m,wd=18.18mm] - Q[c,m,wd=29.65mm] Q[c,m,wd=3.00mm] Q[c,m,wd=40.10mm] - }, + colspec={Q[c,m,wd=6.10mm] Q[c,m,wd=29.65mm] Q[c,m,wd=11.43mm] Q[c,m,wd=18.18mm] Q[c,m,wd=29.65mm] Q[c,m,wd=3.00mm] Q[c,m,wd=40.10mm]}, colsep=1.0mm, rowsep=0pt, stretch=0, hline{1-Z}={0.5pt}, vline{1-Z}={0.5pt}, row{1-Z}={ht=5.6mm, font=\Mn, valign=m}, @@ -192,15 +189,54 @@ cell{25}{2}={c=2}{l}, cell{25}{4}={c=2}{l}, cell{25}{6}={c=2}{l}, % R26 合计(3+2+2) cell{26}{1}={c=3}{c}, cell{26}{4}={c=2}{l}, cell{26}{6}={c=2}{l}, - % R27~R28 意见与签字(3+4) - cell{27}{1}={c=3}{l}, cell{27}{4}={c=4}{l}, - cell{28}{1}={c=3}{l}, cell{28}{4}={c=4}{l}, + % ⚠️ 主表只到 R26「合计」。 + % R27/R28(意见+签字)已移到 5 节的独立签字表(oucmeetsign 环境), + % 原因见 5 节开头的说明 —— 那两行无论怎么调都会多出一列或丢内容。 + % ⇒ 主表现在是 **26 行**,不是 28 行。 }% }{% \end{tblr}\par\endgroup} %====================================================================== -% 5. 标题与页首 +% 5. 签字栏(独立小表,不并入主表) +% +% ⚠️⚠️ 为什么把签字栏从主表里拆出来 +% +% 主表 R27/R28(意见+签字)无论怎么调都无法同时满足"不多列"和 +% "内容不丢失"。实测四种组合全失败: +% 内容 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 页、无横线) +% 内容 7 段 + 无 cell 声明 → 同样散架 +% +% 根因是这两行的"内容段数 / cell 起始列 / 跨度"三者必须严格自洽, +% 而 tabularray 2022A 在这种跨整行的大合并上行为不稳定。 +% +% ⇒ 改为**物理隔离**:主表只到「合计」(27 行),签字栏用独立 tblr +% 紧贴在下方,视觉上是同一张表(边框对接、列宽对齐), +% 但排版上互不干扰。这是最稳的做法。 +% +% 对齐要点:签字表的列宽必须让「3 列 : 4 列」的分界点与主表一致, +% 所以用主表前 3 列宽度之和 与 后 4 列宽度之和 作为两列宽度。 +% 主表列宽 6.10 / 29.65 / 11.43 / 18.18 / 29.65 / 3.00 / 40.10 +% 前 3 列 = 6.10+29.65+11.43 = 47.18mm,加两侧 colsep 3×2 = 53.18mm +% 后 4 列 = 18.18+29.65+3.00+40.10 = 91.02mm,加 colsep 4×2 = 99.02mm +% ⚠️ 签字表只有 2 列,colsep 共 4 个,需重新配平(见下方计算)。 +%====================================================================== +\newenvironment{oucmeetsign}{% + \par\begingroup\Mn + \begin{tblr}[label=none]{ + colspec={Q[l,m,wd=51.71mm] Q[l,m,wd=97.63mm]}, + colsep=1.0mm, rowsep=0pt, stretch=0, + hline{1-Z}={0.5pt}, vline{1-Z}={0.5pt}, + row{1-Z}={ht=5.6mm, font=\Mn, valign=m, halign=l}, + }% +}{% + \end{tblr}\par\endgroup} + +%====================================================================== +% 6. 标题与页首 %====================================================================== % 左上角「附件1」小字(原 docx 无字号设置,随正文 9pt) \newcommand{\oucmeetattach}[1]{% diff --git a/会议预算表/会议预算表.pdf b/会议预算表/会议预算表.pdf index 053bb08..df42827 100644 Binary files a/会议预算表/会议预算表.pdf and b/会议预算表/会议预算表.pdf differ diff --git a/会议预算表/会议预算表.tex b/会议预算表/会议预算表.tex index 061af82..e030b4f 100644 --- a/会议预算表/会议预算表.tex +++ b/会议预算表/会议预算表.tex @@ -151,10 +151,48 @@ % 但用户确认这份表不需要校级领导,故按用户意见删除。 % ⚠️ 要恢复就把它加回来,且必须单独一行(源文件是两段,不是一行): % 所在单位负责人意见:\\ 校级领导意见: - 经费(项目)负责人意见: & & & 所在单位负责人意见: & & & & \\ - \hfill(签字) & & & (签字)\hspace*{3em}(盖章) & & & & \\ + % + % ⚠️⚠️ 这两行必须写 **7 段(6 个 `&`)**,与 colspec 的 7 列严格对应。 + % + % ====================================================================== + % R27/R28 意见与签字 —— **已移出主表**,改用下方独立的 oucmeetsign 环境 + % + % ⚠️⚠️ 为什么拆出去(很重要,别又改回主表里) + % + % 这两行放在主表里,无论怎么写都会出问题。四种组合全部实测过: + % 内容 8 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)❌ + % ← 用户指出的"多出一列" + % 内容 7 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)❌ + % 内容 2 段 + cell{27}{4}={c=4} → 列数对了,但第 2 段落进第 2 列 + % 被 c=4 的合并盖住,内容消失 ❌ + % 内容 2 段 + cell{27}{2}={c=6} → 网格散架(3 页、横线全无)❌ + % + % 根因:tabularray 2022A 对「跨整行的大合并」处理不稳定, + % 要求"段数 / 起始列 / 跨度"三者严格自洽,而本表列宽固定 + colsep + % 的组合下很难同时满足。 + % + % ⇒ 拆成独立小表,视觉上是同一张表(边框对接、列宽按 3:4 配平), + % 排版上互不影响。**这是唯一稳定方案,不要合并回去。** \end{oucmeettable} +% ---- 签字栏(独立表,紧贴主表下方)---- +% 列宽按主表 3 列 : 4 列 的分界配平: +% 前 3 列 6.10+29.65+11.43 = 47.18mm(+colsep 4mm) +% 后 4 列 18.18+29.65+3.00+40.10 = 91.02mm(+colsep 4mm) +% ⚠️ 两列各自的 colsep 各算 2 个(左右各 1),所以实际宽度 = wd + 4mm +% ⚠️⚠️ 第 1 格不要用 \hfill 推「(签字)」到右边 —— 实测会溢出格子: +% 第 1 格宽 51.71mm=146bp,「(签字)」36bp,\hfill 推到格尾后 +% 文字自身**超出单元格右边界**(tabularray 的格内容不自动裁剪), +% 结果第一个「(签字)」跑到 199~265,跨过 232 的分界线, +% 和第二个「(签字)」在 pymupdf 里连成一串(看着像只有一个)。 +% ⇒ 直接顶着格左边界排,前面补一点 \hspace 抵消全角括号的字形左空白。 +% (全角「(」的 ink 起点比盒起点靠左约 2.5bp,不加会略微超出 +% 版心左界 79.40 —— 实测 x=76.9) +\begin{oucmeetsign} + 经费(项目)负责人意见: & 所在单位负责人意见: \\ + \hspace*{1mm}(签字) & \hspace*{1mm}(签字)\hspace*{5em}(盖章) \\ +\end{oucmeetsign} + \begin{oucmeetnotes} \oucmeetnote{1、}{会议借款和报销应按会议预算执行,如突破预算总额,须按原程序审批;} \oucmeetnote{2、}{收取会务费时按要求给会议代表开具发票,收取的会务费及发票存根和记账联统一交财务处入账,不得坐支现金;}