(发布)org-luhmann,为 org 标题添加卢曼风格的编号

org-luhmann

一个为 Org 模式实现卢曼编号系统的 Emacs 包。

figure1

概述

org-luhmann 提供了一种系统化的方法,使用 Org 模式中的卢曼编号系统来组织您的笔记。该系统支持:

  • 层级编号(例如,1,1.1,1.2)
  • 带有字母的分支序列(例如,1a,1b,1c)
  • 在现有笔记之间无限插入
  • 基于上下文的自动编号生成

工作原理

org-luhmann 被设计为增量式工作,帮助您一次构建一个节点的笔记结构。与自动大纲编号不同,它:

  • 不会一次性自动编号所有标题
  • 基于现有上下文(兄弟节点和父节点)生成编号
  • 允许您选择新节点与现有节点的关系
  • 保留您的笔记结构的语义含义

当您添加新编号时,org-luhmann 会分析:

  • 当前标题的级别
  • 前一个兄弟节点的编号(如果有)
  • 父节点的编号(如果有)
  • 现有的分支序列

然后提供适当的编号选项,例如:

  • 下一个主序列编号(1,2,3,…)
  • 下一个分支字母(1a,1b,1c,…)
  • 下一个子编号(1.1,1.2,…)
  • 下一个父分支(2.1,2.2,…)

这种方法确保您的笔记结构有机地增长,并保持笔记之间有意义的关系。

7 个赞

这个包,现在得到了 2 名大佬的星标~

一位是开发了 org-tranclusion 的 nobit,一位是 magit 的开发者 tarsius,哈哈哈!

存照,哈哈哈!

导出成 html 时候会不会和自动生成的序号冲突呀?

赞!提个小建议,能否为中文习惯加上:一、二,(一)、(二)这样的,然后能支持 一.1 等?

高产的大佬

1 个赞

@yibie 是否可以把 org-luhmann 搞成一个 minor-mode,导出是根据这个 mode 来禁用自动编号?

这个能不能解析整个 buffer,自动处理所有 headline?或者设置为 headline 创建的 hook,而不需要专门的命令来添加?

我试过解析整个 buffer 这个方向:

  1. 性能问题,会卡
  2. 需要实时监控页面变化,也会卡
  3. 容易陷入无限循环,直接卡死 Emacs

考虑到用卢曼编码的,一般是一个主 org 打包一切,标题数量和标题层级肯定很多,我测试的时候只是 10 个标题左右,已经开始有点卡了,随着标题数量的增加,性能问题应该会非常明显

后来我放弃了这个方向,才做成这种基于上下文确定编号的方法

应该是我水平未到😂

我没试过导出的场景,因为笔记和输出我是分开的

如果是导出为 html,我建议你关闭 org-mode 导出时自动生成序号

如果不关闭的话,我估计 org-mode 自动生成的序号,和这个卢曼编号会同时存在

因为 ox-export 应该会直接把编号当成标题的一部分进行处理

这个需求很少见,我建议你直接 fork 项目,然后基于自己的习惯定制

也不是很困难,你给编号之前再添加一个前缀,依据标题层级来判断放啥中文编号

至于其它的,里面算法已经做好了,不用动

或者设置为 headline创建的 hook,而不需要专门的命令来添加?

主要是卢曼编码规则是特殊的,同一个级别里的标题里,可以混用数字和字母,但代表的意义不同,举个例子:

1 标题一
1.1   标题二
1.1a  延续标题二的内容或讨论
1.2   标题三,与标题二的内容完全不关联

如果是直接 hook,这个混用字母和数字的编号系统就失效了应该

这个包的编号规则是比较特殊的,看上去可以实现一个更加普适的版本

新增(自定义选项):显示模式的切换

使用编号代替星号进行显示,添加如下代码到配置:

(setq org-luhmann-display-style 'number) 
(org-luhmann-display-mode 1)

该软件包为标题提供了两种显示样式:

  • star:传统的 org-mode 星号(默认)
  • number:用卢曼数字替换星号

org-luhmann 显示模式

您可以使用 M-x org-luhmann-display-mode 切换显示增强功能。

好,我试试

我在弄一个 org-numbering,针对更加普遍的场景,和卢曼编号这种针对特殊场景的区分开来

1 个赞