(更新)org-headline-card 0.3:更换图片渲染引擎,更轻更快支持更多特效

org-headline-card 最近更新到 v0.3.0,核心目标是让 Org 标题卡片的导出更快、更轻、支持更多效果。

之前使用 PlantUML 作为渲染引擎,由于它在文本效果的支持有天生的缺陷。最近无意间发现自己忽略了 Emacs 对 SVG 的支持。所以萌发了将 org-headline-card 的渲染引擎转换成 SVG 的想法。

结果是相当不错的,同等长度的内容,渲染时间大幅下降,导出图片的体积大幅降低,而且支持的文字特效更多。导出图片如下:

本次更新重点

  • 渲染引擎升级:从 PlantUML 切换为 SVG + ImageMagick,不再依赖 Java/PlantUML,配置更轻量
  • 性能显著提升:相同内容长度的导出耗时从约 1~3 秒降低到 1 秒以内(典型值)
  • 体积大幅降低:相同内容长度的导出图片体积从约 1MB 降到约 10~40KB(典型值)
  • 预览能力增强:新增交互式 preview,可在 Emacs 内实时切换主题/边框、编辑内容,并一键导出
  • 可导出特效:在 preview 中可以对文本添加并导出多种效果(背景高亮、文字光晕、文本描边框、波浪下划线),并支持自定义颜色/线宽

使用方式(简要)

  • 生成卡片:光标放在 Org headline 上,执行 M-x org-headline-card-at-point
  • 预览卡片:执行 M-x org-headline-card-preview
    • 常用按键:t 切换主题、b 切换边框、r 刷新、e 编辑、RET 导出
    • 特效按键:h 高亮、g 光晕、s 文本描边框、w 波浪线、0 移除光标处特效、C-c C-c 清空特效
    • 用 C-u 前缀可交互指定颜色/线宽(例如 C-u h、C-u s)

一些实现层面的收获

  • 实现过程中,最大的坑是“预览和导出错位”:看起来同一段文本加了效果,但导出后位置偏移。
  • 解决的关键思路是先生成一份“唯一真相”的 canonical layout(统一的换行、缩进、宽度、行高、字符定位规则),再让 preview 与 export 都消费它,从根上消灭错位问题。

欢迎大家试用 v0.3.0,如果你在不同字体/中英文混排/复杂标记下遇到边界问题,也欢迎直接发 issue 或贴复现样例,我会继续优化。

3 个赞