请教:org 导出subtree时,内部链接如果有指向subtree外的heading/search text时,如何处理?

目前发现问题是,在导出文本中,那个internal link信息会完全丢失。 比如:

这是一个指向[[*heading][display text]]的链接

会导出成:

这是一个指向的链接

这种情况下,期待的输出是(即:如果heading在当前subtree外,则忽略,但是保留display text):

这是一个指向display text的链接

有最小例子吗,zsbd

org-export-with-broken-linksnil 时,如果指向 headline 不存在应该不能正常导出,当它非空时如果链接破损会被忽略掉:

org-export-with-broken-links is a variable defined in ‘ox.el’.

Its value is nil

Non-nil means do not raise an error on broken links.

When this variable is non-nil, broken links are ignored, without
stopping the export process.  If it is set to ‘mark’, broken
links are marked as such in the output, with a string like

  [BROKEN LINK: path]

where PATH is the un-resolvable reference.

如果设定为 mark,则导出得到类似效果:

<p>
这是一个指向[BROKEN LINK: *heading]的链接</p>

可以考虑 hack 一下 org-export-data

      (cl-macrolet
	  ((broken-link-handler
	    (&rest body)
	    `(condition-case err
		 (progn ,@body)
	       (org-link-broken
		(pcase (plist-get info :with-broken-links)
		  (`nil (user-error "Org export aborted.  Unable to resolve link: %S\nSee `org-export-with-broken-links'" (nth 1 err)))
		  (`mark (org-export-data
			  (format "[BROKEN LINK: %s]" (nth 1 err)) info))
		  (_ nil))))))
...

这时候可以用 #+INCLUDE 语法直接将其它地方的文本包含到你要输出的文档里。

您好,我基本不懂elisp. 请教, 对于一个[[link][description]]格式的链接, 如何修改org-export-data, 使得在org-export-with-broken-links 设定为’mark时,直接输出为description? 链接的description信息能够在err中获得吗?

(`mark (org-export-data (format “[BROKEN LINK: %s]” (nth 1 err)) info))

您好, 用include可能和我的使用场景不太符合. 我目前主要使用两种格式的链接,基本用于文档内前后相关文意的跳转:

  1. [[fuzzy search text][description]]
  2. [[*headline][description]]

Occur 了一下,org-link-broken 错误的产生者还不少,而且大部分只提供了 id 相关信息,反倒是没有链接文本的信息,可以考虑修改这些 singal 错误的函数来携带文本信息并在 org-export-data 中处理。

不过,这应该不是 Org 推荐的做法,出现了引用错误应该尽快解决掉。

你可以会。

好,谢谢。 我这个场景其实不是链接有问题,链接本身是可以跳转的。只是说在处理大型文档时,有时候希望导出部分内容,这时候就会有问题。特别是,为了方便,文档原文的字词作为了链接的description部分,那么导出时这部分正文内容就丢失了。