# gradbars **直接嵌入 LaTeX 表格的数据条与迷你图形。** **v0.0.3 · pdfLaTeX / XeLaTeX / LuaLaTeX · MIT** ## 作者与维护者 gradbars 的作者与维护者为 **苏凡(SuFan)**。 **Tape5try** 是苏凡的 GitHub 用户名,不是另一位作者。 联系邮箱:[3546236610@qq.com](mailto:3546236610@qq.com)。 版权所有 (c) 2026 SuFan,采用 [MIT 许可证](LICENSE)。 [English](README.md) · [中文手册 PDF](gradbars-manual-v0.0.3.pdf) · [英文手册 PDF](gradbars-manual-en-v0.0.3.pdf) · [参数说明](docs/api.md) · [版本说明](docs/releases/v0.0.3.md) ![对比、正负贡献、趋势与目标评价](docs/images/overview-v0.0.3.svg) 在普通单元格中加入图形,保持共享尺度并保留原始数值。无需额外包裹 `tikzpicture`,无需开启 shell escape。 ## v0.0.3 新增内容 - **哑铃对比图**:空心基准点、实心当前点,可显示当前值减去基准值。 - **正负混合堆叠**:正负从零点分别累计,显示净值或两侧小计。 - **迷你趋势线**:等间隔观测,缺失断点,极值和末点标记,行内自动或共享固定范围。 - **目标与区间评价**:越接近目标越好、处于区间内最好,评价只改变颜色。 - **成组配色与类别纹理**:分类、顺序、发散、黑白四类方案;重排类别后仍可保持颜色与纹理。 - **重整图文手册**:六部分、56 个编号示例、六个应用表格、四类真实排版案例及接口索引。 普通条、正负条、双层条、棒棒糖、浮动区间、误差线、CSV、数值列与命名样式继续可用。 ## 快速开始 将 `gradbars.sty` 放在主 `.tex` 文件旁,可使用 **pdfLaTeX、XeLaTeX 或 LuaLaTeX**。 宏包依赖 TikZ、xparse、expl3、collcell。中文字体只用于中文手册,宏包本身不要求中文文档类。 ```latex \documentclass{article} \usepackage{booktabs,gradbars} \begin{document} \gradbarssetup{width=35mm,precision=0} \begin{tabular}{ll} \toprule View & Data \\ \midrule Value & \gradbar{72} \\ After / Before & \graddumbbell{58}{76} \\ Positive / Negative & \gradstack[min=-50,stack totals=separate]{60,-20,15,-10} \\ Trend / Last & \gradspark[spark range=fixed,min=0,max=100]{25,45,NA,60,80} \\ \bottomrule \end{tabular} \end{document} ``` ## 如何选图形 | 目的 | 入口 | | --- | --- | | 单个数值、相对零点的增减 | `\gradbar[min=-50,max=100]{值}` | | 更少填充面积 | `\gradbar[shape=lollipop]{值}` | | 宽基准条与细当前条 | `\gradcompare{基准}{当前}` | | 比较两个位置或差值 | `\graddumbbell[compare label=delta]{之前}{之后}` | | 给定上下界 | `\gradrange[range point=50]{35}{75}` | | 可相加的贡献 | `\gradstack[min=-60]{60,-25,20,-15}` | | 等间隔变化趋势 | `\gradspark{25,40,NA,60,80}` | | 点估计与不确定性 | `\gradbar[error minus=5,error plus=8]{60}` | ## 保持正确的数据含义 - 同列共用 `min`、`max`、`width`;负值需要负的 `min`。 - `unit` 只附加单位;`value format=percent` 计算数值相对于 max 的比例,且只用于非负量程。 - 空输入和 `NA` 为缺失;趋势中的缺失保留横向位置并断开,末项缺失不会用前一项替代。 - 正负堆叠的默认总标签是净值,`stack totals=separate` 显示“正小计 / 负小计”。净值为零仍可能有两侧贡献。 - 堆叠分段百分比为 `abs(段值) / sum(abs(所有段值))`,表示绝对活动量份额;不是净值占比,也不自动归一化条形。 - 自动趋势范围用于看形状;跨行比较水平和波动时,应统一 `spark range=fixed`、min、max、width、height。 - 越界默认警告并截断图形,标签保留原值;`overflow=error` 可改为报错。 ## 目标与区间评价 ```latex \gradbar[better=target,quality target=50, thresholds={5,15},target=50,palette=diverging]{52} \gradbar[better=interval,quality range={40,60}, thresholds={0,10},band={40,60},palette=diverging]{68} ``` 这两种模式的 thresholds 是非负距离:距离不超过第一个阈值为好,不超过第二个为中,否则为差。 `threshold colors` 顺序仍为差、中、好。quality 参数负责评价,target/band 负责绘制参考,需要分别设置。 已有的 `better=higher|lower` 用于越大或越小越好的指标。 ## 复用排版与类别身份 ```latex \gradbarsstyle{paperrow}{preset=paper,width=40mm,max=100,precision=1} \gradbar[style=paperrow]{82.5} \gradbarscategory{Compute}{gradbarsBlue}{diagonal} \gradbarscategory{Storage}{gradbarsOrange}{dots} \gradstack[stack names={Compute,Storage}]{60,30} \gradstack[stack names={Storage,Compute}]{30,60} \gradbarslegend{Compute,Storage} ``` 排版预设:`paper`、`report`、`presentation`、`outline`。 成组配色:`categorical`、`sequential`、`diverging`、`mono`。 原有七种主题和九种单色继续保留。 未注册名称时按段序号循环取色;注册后按名称匹配。print/mono 使用灰度配色并保留命名类别纹理。 图例与分段共用同一映射,颜色不足时可结合名称和纹理识别。 ## CSV 与现有表格 ```latex \gradbarsloadcsv{results}{results.csv} \gradbarscsvstyle{shared}{results}{Score} \gradbarcsv[style=shared]{results}{1}{Score} \gradbarscolumn{G}{style=shared} ``` 支持按列名读取、引号内逗号、缺失值映射和整列共享范围。CSV 字段按字符读取,不作为 TeX 执行。 完整用法与表格源码集中在手册中。 ## 一本文档,效果与源码对照 [手册源码](docs/gradbars-manual.tex) 按入门、图形、数据接口、外观、案例与参考六部分组织。 56 个编号示例包含前后对比、收支贡献和趋势汇总,以及双栏论文、跨页长表、黑白打印和幻灯片。 示例数据仅用于演示。 生成仓库根目录中的版本 PDF: ```sh python scripts/build_manual.py ``` 脚本先编译四类真实排版,再用 XeLaTeX 两遍编译中文手册、pdfLaTeX 两遍编译英文手册。中文文档需要 ctex/Fandol。 Python 仅用于文档构建;宏包本身不需要。仓库包含中英文 v0.0.3 PDF 与源码;所有文本文件采用 LF 换行。 ## 当前边界 - 宏包已通过 pdfLaTeX、XeLaTeX、LuaLaTeX 检查(包括 CSV);中文手册使用 XeLaTeX。完整坐标轴或大型绘图仍应使用专门工具。 - CSV 仅接受逗号分隔的单行字段,自动生成的 CSV 表格不自动分页。 - 堆叠不接受缺失段、条件阈值与误差线。 - 趋势线不解析日期,不接受柱形目标线、误差线、背景区间或阈值评价;观测必须等间隔。 - 固定量程要求 min 不大于零、max 为正;自动趋势范围支持正数、负数与恒定序列。 - 标签避让限于单个图形,长标签和图例仍需要表格预留空间。 - 尚未实现图形专用无障碍 PDF 标签或 tabularray 专用列接口。 MIT 许可证。提交问题时请附最小 `.tex` 示例、编译引擎和日志。