2 Commits
Author SHA1 Message Date
laoyang 08afe5b644 修复金字塔组件:画出来是平行四边形,改为真正的梯形金字塔
问题(用户反馈):\flatpyramid 显示成「平行四边形」而不是梯形。

根因:tikz 的 trapezium 形状在给定 minimum width 时,会同时把上边和下边
撑到同一宽度,整体只是平移 —— 于是上下边等宽,就是一个平行四边形。
实测顶层顶点:上边宽 60.2pt、下边宽 60.2pt(完全相等),整体平移 3.7pt。

修复:不再使用 trapezium 形状,改为按显式坐标自绘梯形。
每一层的上边宽 = 上一层下边宽(斜边连续),各层中心对齐。
实测修复后(TL2026):
  层   上边宽   下边宽
  ①    42.5     78.7
  ②    78.7    114.8
  ③   114.8    150.9
  ④   150.9    187.1

形状参数已提到代码顶部并加注释(\flpw 顶半宽 / \flbw 底半宽 / \fllyh 层高),
需要调整胖瘦或高矮时改这三个值即可。figs/fig16.png 一并更新(含金字塔)。

已验证:0 错误 0 溢出;跨版本渲染逐像素一致。
2026-10-13 15:28:37 +08:00
laoyang e60e1d768b 新增「扁平简约图示组件」:9 个纯 TikZ 绘图元素
设计基调:圆角色块 + 实心纯色 + 白字 + 细箭头。
**无渐变、无阴影、无立体**(已量化验证:PDF 中 shading 对象数为 0)。
不依赖 smartdiagram 等外部绘图宏包,全部用 TikZ 自绘。

九个组件(颜色列表写在方括号里,可写一个或多个):
  \flatflow[颜色]{条目1, 条目2, ...}          横向箭头流程,自动等分满宽
  \flatstack[颜色]{...}                       纵向流程
  \flatcycle[颜色]{...}                       循环图(弧线箭头)
  \flathub[颜色]{中心}{环绕1, 环绕2, ...}      中心辐射
  \flatsteps[颜色]{...}                       阶梯递进
  \flattime[颜色]{年份列表}{事件列表}           时间轴(上下交替)
  \flatquad[颜色]{左上}{右上}{左下}{右下}       四象限
  \flatpyramid[颜色]{顶层, ..., 底层}          金字塔
  \flatcompare[左色][右色]{左标题}{左内容}{右标题}{右内容}   左右对比

颜色支持列表循环:\flatflow[oucblue,oucred]{...} 两个块不同色;
\flatflow[oucred,oucblue]{六个块} 则按红蓝红蓝循环取色。

防错:颜色是可选参数,若误写成花括号,会报
「图示组件的颜色要写在方括号里」的明确错误(不会静默出错)。

实现中踩到的三个本机 expl3/pgf 坑(均已写进代码注释):
 - 长度做乘除一律用 \pgfmathsetlength,且表达式里只能是「长度」或「纯数字」,
   绝不能出现计数器(否则静默算成 0pt)。
 - \foreach 每轮迭代会开组,内层 \def 出组即失效,需用 \global\def。
 - \ifstrequal 在本机恒为假,字符串比较必须用 \ifx。

另修正一处定义顺序问题:组件必须放在 \ExplSyntaxOff 之后,
否则 `@` 不是字母类别,\fl@... / fl@i@... 这类名字会被解析错。

已验证:TL2022~2026 全部 0 错误 0 溢出;跨版本渲染逐像素一致;
slides.tex 新增 5 页演示,README 新增「图示组件(扁平风格)」一节。
2026-10-13 15:06:04 +08:00