能否在导出时从二级标题开始?

用org-mode导出html时:

* 一级标题
** 二级标题

导出之后是两级标题。 如果在org-mode下只不用一级标题,直接从二级标题开始:

** 二级标题
** 二级标题

导出html之后,自动都自动变成一级标题了。

请教各位大神,这个有没有什么解决方案? 是在org-mode中写代码的时候能解决,还是需要怎么做?

在导出 headline 的时候,ox-html.el 中的 org-html-headline 会使用 ox.el 中的 org-export-get-relative-level 来获取标题的级别。这个函数会由当前标题的绝对级别(你给出的例子就是二级标题)加上 :headline-offset 这个导出属性来决定。

;; see https://orgmode.org/worg/dev/org-export-reference.html#org0fc5381
(defun org-export-get-relative-level (headline info)
  "Return HEADLINE relative level within current parsed tree.
INFO is a plist holding contextual information."
  (+ (org-element-property :level headline)
     (or (plist-get info :headline-offset) 0)))

:headline-offset 属性由 org-export--collect-tree-properties 来设定,具体是如下代码:

(setq info
	(plist-put info
		   :headline-offset
		   (- 1 (org-export--get-min-level data info))))

对于最小级别为二级的情况,:headline-offset 就是 -1 ,因此导出时由 org-export-get-relative-level 得到的就是一级标题。

要修改这个行为,可以考虑给 org-export--collect-tree-properties 设定一个 :filter-return advice:

(defun my-headline-filter (info)
  (plist-put info :headline-offset 0))

(advice-add 'org-export--collect-tree-properties :filter-return 'my-headline-filter)
;;(advice-remove 'org-export--collect-tree-properties 'my-headline-filter)

当然这只是一种方法。

1 个赞

谢谢大神指点。 刚才我自己试了下,在一级标题后边写了个空格,问题解决了。

* 空格
** 二级标题

这样确实也行,生成了一个空的 headline