# gradbars **用一套接口,在 LaTeX 表格中呈现数值、比较与趋势。** **v0.0.4 · 2026-10-06 · pdfLaTeX / XeLaTeX / LuaLaTeX · MIT** **已收录至 CTAN**:访问 [gradbars 宏包页面](https://ctan.org/pkg/gradbars),查看收录版本、文档与下载入口。 [English](README.md) · [中文手册 PDF](gradbars-manual.pdf) · [英文手册 PDF](gradbars-manual-en.pdf) ![对比、正负贡献、趋势与目标评价](docs/images/overview-v0.0.3.svg) 既可把单个图形嵌入现有 `tabular`,也可通过 `gradtable` 声明列、填写数据,统一生成可视化表格。图形保留共享尺度与真实数值,无需额外包裹 `tikzpicture`,无需开启 shell escape。 版本更新记录见 [CHANGELOG.md](CHANGELOG.md)。 中文手册包含 **六部分、42 章、77 个编号示例**;英文手册包含 **六部分、28 节**。两份手册均提供实际效果与源码。 ## 快速开始 将 `gradbars.sty` 放在主 `.tex` 文件旁,可使用 **pdfLaTeX、XeLaTeX 或 LuaLaTeX**。 宏包依赖 TikZ/PGF、xparse、expl3、collcell、array、booktabs、colortbl 和 longtable。中文字体只用于中文手册,宏包本身不要求中文文档类。 ```latex \documentclass{article} \usepackage{gradbars} \setlength{\parindent}{0pt} \begin{document} \begin{gradtable}[width=\linewidth,header align=c, label width=12mm,column sep=6pt] \gradcolumn{method}{Method} \gradcolumn[type=bar,weight=2,mark=both, options={max=100,precision=1}]{score}{Score} \gradcolumn[type=number,width=22mm,mark=best, options={better=lower,precision=1}]{time}{Time / ms} \gradheader{\gradspan{1}{Setup}\gradspan{2}{Evaluation}} \gradgroup{Baselines} \gradrow{Method A,82.4,14.8} \gradrow{Method B,91.6,18.2} \gradgroup{Improved} \gradrow{Method C,87.3,11.5} \gradrow{Pending,NA,NA} \end{gradtable} \end{document} ``` 得分越高越好,耗时越低越好;最佳值加粗,得分次佳值加下划线。`NA` 表示缺失,不等于零。上例使用英文表头,可直接用三种引擎编译;中文内容可使用 XeLaTeX 和 `ctexart` 文档类。 默认表格不跨页。需要跨页时,添加 `long=true`,将表格直接放在单栏正文中;不要置于浮动体或 `minipage` 内。 ## 如何选图形 | 目的 | 入口 | | --- | --- | | 单个数值、相对零点的增减 | `\gradbar[min=-50,max=100]{值}` | | 更少填充面积 | `\gradbar[shape=lollipop]{值}` | | 宽基准条与细当前条 | `\gradcompare{基准}{当前}` | | 比较两个位置或差值 | `\graddumbbell[compare label=delta]{之前}{之后}` | | 给定上下界 | `\gradrange[range point=50]{35}{75}` | | 分级背景上的完成度 | `\gradbullet[bullet bands={{60/black!8},{100/black!20}},target=85]{78}` | | 可相加的贡献 | `\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) 按入门、图形、外观、专属表格、案例与参考六部分组织。 77 个编号示例包含前后对比、收支贡献、趋势汇总和专属表格,以及双栏论文、跨页长表、黑白打印和幻灯片。 [英文手册源码](docs/gradbars-manual-en.tex) 同步介绍 v0.0.4 接口,章节与示例编号独立。 示例数据仅用于演示。 生成仓库根目录中的版本 PDF: ```sh python scripts/build_manual.py ``` 脚本先编译四类真实排版,再用 XeLaTeX 两遍编译中文手册、pdfLaTeX 两遍编译英文手册。中文文档需要 ctex/Fandol。 Python 仅用于文档构建;宏包本身不需要。随包提供的 PDF 为 `gradbars-manual.pdf` 和 `gradbars-manual-en.pdf`,构建脚本生成带版本号的 PDF 文件名。手册源码也包含在包中;所有文本文件采用 LF 换行。 ## Tagged PDF 与替代文本 在支持 PDF tagging 的 LaTeX 发行版中,在文档类之前开启标记: ```latex \DocumentMetadata{tagging=on,lang=en-US} \documentclass{article} \usepackage{gradbars} \begin{document} \gradbar{72} \gradbar[alt={Accuracy is 72 out of 100.}]{72} \end{document} ``` 开启标记后,独立图形和图例会依据原始数据生成英文替代文本,可用 `alt={...}` 覆盖描述。 `accessibility=auto|artifact|off` 分别表示自动描述、装饰图形或交由外层文档控制标记。 表格测量阶段暂停标记,避免重复描述。在已有 TikZ 图形内使用时,应为外层图形提供描述。 宏包不会自行开启文档标记,这些功能也不代表整份文档已经符合 PDF/UA。 ## 当前边界 - 宏包支持 pdfLaTeX、XeLaTeX、LuaLaTeX;中文手册使用 XeLaTeX。完整坐标轴或大型绘图仍应使用专门工具。 - CSV 仅接受逗号分隔的单行字段,自动生成的 CSV 表格不自动分页。 - 堆叠不接受缺失段、条件阈值与误差线。 - 趋势线不解析日期,不接受柱形目标线、误差线、背景区间或阈值评价;观测必须等间隔。 - 固定量程要求 min 不大于零、max 为正;自动趋势范围支持正数、负数与恒定序列。 - 标签避让限于单个图形,长标签和图例仍需要表格预留空间。 - 图形替代文本需要开启文档标记并使用兼容的 LaTeX/TikZ 发行版,详见上文。尚未实现 tabularray 专用列接口。 MIT 许可证。提交问题时请附最小 `.tex` 示例、编译引擎和日志。