Penrose – 通过输入纯文本符号来创建图表

Penrose 是卡内基梅隆大学的一个研究项目,它通过纯文本的领域特定语言生成数学图表,将“substance”(底层关系)与“style”分离,并使用受约束的优化来布局视觉元素。评论者将其与 Mermaid、Graphviz、TikZ 和 D2 等其他基于文本的图表工具进行比较,称赞其表达力和可复用样式,同时质疑其学习曲线、性能,以及是否适合日常 UML 风格或业务图表。讨论还涉及一些展示示例(如化学结构)的质量与正确性,以及将项目命名为 Roger Penrose 的争议,并对未来与 LaTeX、IDE 和大型语言模型的集成表示兴趣,以降低编写成本。

入门与 DSL 结构

  • 一些人难以找到这种记法;回答指向了 “Learn Penrose”、“Documentation” 和示例图库。
  • 每个图表使用三个组件:
    • Substance – 抽象数据/对象。
    • Style – 向量图形层面的布局和外观。
    • Domain – 领域特定的类型/关系。
  • style 文件通常包含大部分复杂性;有人觉得这种三分法很强大,但也很重,并提到未来最终会统一这些 DSL。

Substance 与 style 的分离

  • 一个核心想法:将图表所表示的 是什么 与它 看起来如何 分开,类似于 HTML vs CSS。
  • 相同的 substance(例如集合-子集关系)可以渲染成不同类型的图表(Venn、树等)。
  • 图表生成被表述为一个受约束的优化问题,从而能够通过约束而不是固定坐标来实现自动布局和探索。

与其他工具的比较

  • 与 Mermaid、Graphviz、D2、TikZ、MetaPost、Asymptote、PlantUML、Pic/Pikchr 等进行比较。
  • 更多被看作是 MetaPost / 数学图形系统的替代品,而不是业务/UML 工具(Mermaid、D2)的替代品。
  • 一些用户更喜欢 WYSIWYG 工具(Inkscape、Illustrator、Excalidraw),因为它们便于直接控制和草绘。

可用性、人体工学与 AI

  • 有几个人觉得这个 DSL 让人望而生畏,对快速绘图来说“太多了”;另一些人则看重它的表达力和样式复用能力。
  • 对“diagrams as code”的批评包括:难以草绘、需求变化时脆弱,而且除简单情况外投入产出比往往不高。
  • 也有人看重源代码管理友好性,以及由代码生成图表(例如来自状态机)。
  • 多条评论建议使用 LLM 生成 Penrose/Mermaid 代码;该项目本身也在研究基于 LLM 的 Penrose 编写方式。

渲染、集成与性能

  • 有一个 CLI 工具可以在不使用浏览器的情况下导出 SVG,使用 canvas/Cairo 风格后端。
  • 浏览器中的内存问题已被承认,这与重复的 Wasm 分配有关;正在探索解决办法(内存复用、worker、未来的 Wasm GC)。
  • 用户对与 LaTeX 更紧密的集成很感兴趣,并提到早期/不确定的插件(例如 Obsidian)。

示例质量与领域正确性

  • 一些示例因其美观而受到称赞;另一些则被批评为令人困惑或杂乱,注释掉的代码损害了它们作为教学材料的价值。
  • 化学图(例如咖啡因、甲烷燃烧)引发了强烈批评,因为其物理结构不正确;维护者承认这些是天真的“no-overlap”布局,并计划采用更好的领域感知方法。
  • 有评论者指出,Penrose 可能需要针对不同领域的多个专用布局引擎。

范围、随机性与控制

  • 关于如何在不使用显式坐标的情况下控制位置的问题,凸显了自动布局与精确放置之间的张力。
  • 有些人希望默认是确定性的、手工调优的布局;另一些人则认为带约束的随机探索有价值。
  • 也有人将其与 GeoGebra 之类的工具进行比较,后者保持构造的确定性,但会对变化作出响应。

命名与术语

  • 有人提到与相对论中的“Penrose diagrams”以及 Penrose 张量记号的混淆;时空图有独立的工具。
  • 关于将系统命名为 “Penrose”(以及将 CLI 命名为 “roger”)的争论,主要集中在:在没有明确关联的情况下使用一位在世科学家的名字是否不合适;也有人指出这个姓氏并不唯一。
  • 还澄清了标语中的 “plain text” 指的是非二进制、可编辑的文本文件,而不是自然语言英语。