新增要点框自动排布环境 pointboxgrid(每行最多 4 个)

把任意多个要点自动排成网格,规则:行数 = ceil(N/4),尽量均匀且上行不少于下行
(1~4 一行;5→3+2;6→3+3;7→4+3;8→4+4;9→3+3+3;10→4+3+3;11→4+4+3;12→4+4+4)。

用法:
  \begin{pointboxgrid}{高度}
    \pointitem{标题}{颜色}{内容}
    ...
  \end{pointboxgrid}
另提供 \pointboxsetup{每行最多几个}{横向间距}{纵向间距}(默认 4 / 8pt / 6pt)。

实现要点(本机 expl3 的坑,已在代码注释中说明):
 - 比较一律用 \ifnum:\int_compare:nNnT 在本机 TeX Live 下会把所有 ##1
   都判成“小于等于”,导致行内个数分配失效。
 - 列宽走 \fp_eval:n + \dim_to_fp:n:expl3 的维度乘法(*)在此环境下静默算出 0pt。
 - 要点内容存进带索引的宏、再用 \tl_use:c 取用,避开不可靠的 \exp_after:wN 展开。
 - 必须 \begin{columns}[onlytextwidth],否则默认 columns 的左右边距会让 4 列各溢出约 10pt。

另外:总高超过正文可用高度时给出 oucslide Warning
(总高 ≈ 69 + 行数×高度 + (行数−1)×25 pt;正文可用高度取 243pt)。

已验证:1~12 个排布全部符合规则;TL2022/2023/2024/2025/2026 均 0 错误 0 溢出;
原有内容不受影响(纯新增 174 行)。
This commit is contained in:
2026-10-13 08:32:02 +08:00
parent b200e44687
commit e38b39310f
4 changed files with 207 additions and 0 deletions
+33
View File
@@ -249,6 +249,39 @@ Tex文件的开头,是基本信息部分,可以根据需要添加`\title`{
![块](/figs/fig07.png)
![标题框和文本框](/figs/fig08.png)
### 要点框自动排布(pointboxgrid)
要点框数量多的时候,不需要自己摆 `columns`——用 `pointboxgrid` 环境会自动排成网格:
```
\begin{pointboxgrid}{高度}
\pointitem{标题}{颜色}{内容}
\pointitem{标题}{颜色}{内容}
...
\end{pointboxgrid}
```
**排布规则:每行最多 4 个;超过 4 个自动分成多行,并尽量均匀(上行不少于下行)。**
| 个数 | 排布 | 个数 | 排布 |
|------|------|------|------|
| 1~4 | 一行 | 9 | 3 + 3 + 3 |
| 5 | 3 + 2 | 10 | 4 + 3 + 3 |
| 6 | 3 + 3 | 11 | 4 + 4 + 3 |
| 7 | 4 + 3 | 12 | 4 + 4 + 4 |
| 8 | 4 + 4 | N | 行数 = ⌈N/4⌉,前 N mod 行数 行每行多放一个 |
![自动排布总览(1~12 个)](/figs/fig14.png)
几点说明:
1. **高度参数的含义和 `pointbox` 的 `height` 一样**,是固定高度——内容别写超,超了会画到框外(见下)。数量多时记得**把高度调小**。
2. **行数多了会超出页面底部**。经验值:正文区高约 243pt,总高 ≈ `69 + 行数×高度 + (行数−1)×25`(pt)。
所以 **4 行时高度不要超过 24pt**。超过时编译日志里会有 `oucslide Warning` 提醒。
3. 想让每行放更多/更少,可改 `\l_ouc_pbg_max`(默认 4);间距可改 `\l_ouc_pbg_gap`(横向,默认 8pt)与
`\l_ouc_pbg_vgap`(纵向,默认 6pt)。
4. 单个要点框仍然可以像以前那样手写 `columns` + `pointbox`,两种用法并存。
## 代码
模板可以插入代码块,使用`lstlisting`即可。