diff --git a/会议预算表/README.md b/会议预算表/README.md index 96de78a..cb65cc0 100644 --- a/会议预算表/README.md +++ b/会议预算表/README.md @@ -117,8 +117,16 @@ xelatex 会议预算表.tex # 单次即可,无交叉引用 ### 2. `\SetCell[r=n]` 与 `\SetCell[c=m]` 不能在同一行 纵向合并和横向合并同时出现,报同样那串错。 -本表因此**完全不用纵向合并**——「其他费用」改成 `\rotatebox{90}` 竖排, -第 1 列下面 4 行留空,视觉上等价。 +本表因此全部改用 `cell{}` 矩阵语法(含纵向合并 `cell{21}{1}={r=5}{c}`)。 + +「其他费用」用 `\shortstack{其\\[17bp]他\\[17bp]费\\[17bp]用}` 逐字竖排, +**不是** `\rotatebox{90}` 旋转——旋转只是把横排整句转个角度, +不是"上下排列"。字距 `\\[17bp]` 让四个字撑满 5 行高(约 82bp)。 + +⚠️ 拉字距不能用局部 `\baselineskip`——`\shortstack` 内部会重置它, +实测设 19bp 完全无效(字距仍是 11.6bp)。必须在 `\\` 上给可选参数。 +⚠️ 也不能用 `\parbox{}{其\\他\\费\\用}`——那会变成 4 个独立行盒子, +tabularray 排版错乱,四个字跑到不同段落。 ### 3. colspec / hline / vline / ht 的参数不能用宏 diff --git a/会议预算表/oucmeeting.sty b/会议预算表/oucmeeting.sty index e64de74..9cb221c 100644 --- a/会议预算表/oucmeeting.sty +++ b/会议预算表/oucmeeting.sty @@ -16,7 +16,8 @@ \RequirePackage{fontspec} \RequirePackage{xeCJK} \RequirePackage{tabularray} -\RequirePackage{graphicx} % \rotatebox —— 「其他费用」竖排用 +% 注:不再需要 graphicx。早期版本用 \rotatebox 做「其他费用」竖排, +% 现已改为 \shortstack 逐字竖排(#24 按用户意见修正),不再依赖 graphicx。 %====================================================================== % 1. 页面 @@ -175,7 +176,15 @@ cell{18}{1}={c=3}{l}, cell{18}{4}={c=2}{l}, cell{18}{6}={c=2}{l}, cell{19}{1}={c=3}{l}, cell{19}{4}={c=2}{l}, cell{19}{6}={c=2}{l}, cell{20}{1}={c=3}{l}, cell{20}{4}={c=2}{l}, cell{20}{6}={c=2}{l}, - % R21~R25 其他费用区(1+2+2+2),第 1 列竖排文字、下面 4 行留空 + % R21~R25 其他费用区(1+2+2+2) + % ★ 「其他费用」纵向合并 5 行,文字逐字竖排(不是旋转 90°) + % 写法:cell{21}{1}={r=5}{c} 声明纵向合并, + % 内容用 \shortstack{其\\他\\费\\用} 逐字堆叠。 + % ⚠️ 不能用 \rotatebox{90} —— 那只是把整行文字旋转, + % 仍然是"横向一句转个角度",不是你要的上下排列(#24 修正)。 + % ⚠️ 纵向合并也必须用 cell{} 矩阵语法。写成 \SetCell[r=5] 在 + % 内容里,会与同行的 \SetCell[c=n] 冲突报 Missing number。 + cell{21}{1}={r=5}{c}, cell{21}{2}={c=2}{l}, cell{21}{4}={c=2}{l}, cell{21}{6}={c=2}{l}, cell{22}{2}={c=2}{l}, cell{22}{4}={c=2}{l}, cell{22}{6}={c=2}{l}, cell{23}{2}={c=2}{l}, cell{23}{4}={c=2}{l}, cell{23}{6}={c=2}{l}, diff --git a/会议预算表/会议预算表.pdf b/会议预算表/会议预算表.pdf index 3fd568d..49a5047 100644 Binary files a/会议预算表/会议预算表.pdf and b/会议预算表/会议预算表.pdf differ diff --git a/会议预算表/会议预算表.tex b/会议预算表/会议预算表.tex index 90f507a..a343e7c 100644 --- a/会议预算表/会议预算表.tex +++ b/会议预算表/会议预算表.tex @@ -60,8 +60,20 @@ \begin{oucmeettable} % ---- R1~R6 基本信息 ---- + % + % ⚠️⚠️ 每行必须写满 7 段(6 个 `&`),被 cell{} 合并掉的格**留空**。 + % 实测(最小复现):同样的 cell{} 配置下 + % 写 7 段 `甲 & & 乙 & & 丙 & & 丁` → 四个字全部正确 + % 写 4 段 `甲 & 乙 & 丙 & 丁` → **乙、丁 被吞掉** + % ⇒ 段数 ≠ 列数时,多出来的内容会静默丢失,不报错。 + % + % ⚠️ 标签落在哪一格,取决于 cell{} 的合并位置,不是"第几个字": + % R2 的 cell 配置是 2+2+2+1,即 + % 格1(列1-2)=会议时间 格3(列3-4)=空值 格5(列5-6)=会议地点 格7(列7)=空值 + % 所以「会议地点」必须写在**第 5 段**,写在第 3 段就会挤到左边、 + % 与「会议时间」贴在一起(踩过)。 会议名称 & & & & & & \\ - 会议时间 & & 会议地点 & & & & \\ + 会议时间 & & & & 会议地点 & & \\ % ⚠️ R3/R4 的填空横线用 \hspace 撑,宽度必须控制。 % 跨 5 列约 122mm,三个选项各带一对(\hspace{3em})就要 6×3em=18em % 再加文字,实测撑到 529.7bp(版心止于 521.57),超 8bp。 @@ -93,10 +105,22 @@ 住宿费 & & & & & & \\ 伙食费 & & & & & & \\ - % R21~R25:「其他费用」竖排,只写在第 1 列的第一行(R21), - % 下面 4 行该列留空。用 \rotatebox 真旋转,不用 \\ 换行 - % (\\ 会被 tabularray 当成行结束,破坏整表)。 - \rotatebox{90}{其他费用} & 交通费 & & & & & \\ + % R21~R25:「其他费用」**逐字竖排**,占 5 行高(不是旋转 90°) + % 纵向合并由 sty 里的 cell{21}{1}={r=5}{c} 声明, + % 这里用 \shortstack 让四个字上下堆叠。 + % ⚠️ 不能用 \rotatebox{90}:那只是把横排整句转个角度, + % 不是"上下排列"(#24 按用户意见修正)。 + % ⚠️ \shortstack 里的 \\ 是**普通换行**,tabularray 在 cell{} 语法下 + % 不会把它误当行结束(旧版 \SetCell 语法下会崩,那是另一个坑)。 + % + % ★ 字距按 5 行高(约 82bp)拉开:四字之间有 3 个间隔, + % 基础行距 12bp + \\[17bp] ≈ 29bp/字,总高约 87bp,正好填满格高。 + % 做法:给 \\ 加可选参数显式指定额外行距。 + % ⚠️ 不能靠局部设 \baselineskip —— \shortstack 内部会重置它, + % 实测设 19bp 无效(字距仍是 11.6bp)。 + % ⚠️ 也不能用 \parbox{}{其\\他\\费\\用} —— 那会变成 4 个独立行盒子, + % tabularray 排版错乱(实测四个字跑到不同 y 段落)。 + \shortstack{其\\[17bp]他\\[17bp]费\\[17bp]用} & 交通费 & & & & & \\ & 会议资料印刷费 & & & & & \\ & 会议室使用费 & & & & & \\ & 工作人员补助 & & & & & \\ @@ -113,7 +137,14 @@ % ⇒ 该单元格内容必须能在一行内放下。「(签字) (盖章)」共 9 个全角字符 % ≈ 9×9bp = 81bp,跨 4 列约 96mm = 272bp,够放,只要 hspace 不太大。 % 给 3em(约 9.5mm)即可,手写签名空间足够。 - 经费(项目)负责人意见: & & & 所在单位负责人意见:\hspace*{4em}校级领导意见: & & & & \\ + % + % ⚠️ 关于「校级领导意见」:源 .doc 的 R26 第二格里确实有**两个段落** —— + % 「所在单位负责人意见:」和「校级领导意见:」,不是转换时多出来的 + % (用 LibreOffice 直接转 txt 核过,原文件就有)。 + % 但用户确认这份表不需要校级领导,故按用户意见删除。 + % ⚠️ 要恢复就把它加回来,且必须单独一行(源文件是两段,不是一行): + % 所在单位负责人意见:\\ 校级领导意见: + 经费(项目)负责人意见: & & & 所在单位负责人意见: & & & & \\ \hfill(签字) & & & (签字)\hspace*{3em}(盖章) & & & & \\ \end{oucmeettable}