组织模式代码块结果中的内部链接和目标链接,例如,到其他代码块的结果

Internal links and targets in results of org-mode code blocks linking, e.g., to the results of other code blocks

我正在使用 org-mode 编写软件文档,其中 API 函数、变量等文档是自动从代码的文档字符串中提取的(恰好在 Common Lisp 中)。然后将此文档导出到 HTML(我碰巧通过带有 ox-rst and Sphinx 的 reStructuredText 执行此操作)。它的工作方式在很大程度上类似于直接将 Sphinx 与 Python 一起使用,但具有 org-mode 的所有功能,如可执行代码块。

为了简要说明原理,我将在下面演示使用 Emacs Lisp 稍微简化的方法。我有一个提取函数文档的代码块(使用 Common Lisp 的 format 并使用 :results output raw 我避免在结果,但为了简单起见,我将它们留在下面的简短演示中)。

#+name: function-doc
#+begin_src emacs-lisp :results output raw :exports results :var name='list
  (print (documentation name))
#+end_src

然后我用我想要记录的函数调用该代码块,并且在导出过程中这个调用被替换为生成的文档。

#+CALL function-doc(name:'map)

自动插入到导出文件中的 map 的结果文档恰好如下。

"Map a FUNCTION across one or more SEQUENCEs, returning a sequence.
TYPE is the sequence type to return.

(fn TYPE FUNCTION SEQUENCE...)"

我可以在我的文档字符串中使用 org-mode 格式,并且可以按预期导出这种格式。

我的问题来了。 我想使用 links 到 API 条目(例如, 一个函数的文档)在其他函数、变量等的文档字符串和主文本(即不会自动插入的文本)中。使用函数名称自动插入目标很容易,我只需要相应地扩展上面的代码块 function-doc。但是,在导出过程中找不到这些目标。即使我的 MY-FUNCTION 文档的目标自动添加了上面的代码块 function-doc,当我插入 org- mode link [[MY-FUNCTION]] 到该函数,org-mode 中断导出并出现以下错误。

user-error: Unable to resolve link: "MY-FUNCTION" 

有什么办法可以解决这个限制吗?在导出过程中,org-mode 代码块结果中的目标是否可以 "seen" by org-mode?

我已经尝试了各种解决方法,但到目前为止都没有成功。例如,我尝试使用 org-mode 宏而不是代码块,但是要获得多行宏结果非常棘手(Define org mode macro with line breaks 中报告的技巧对我来说还不够)。我正在寻找一种方法将有关未解决的 links 的错误消息转换为警告,但我发现的只是标记损坏的 links 的选项,如下所示。有什么方法可以导出并忽略(看似)损坏的 links?

#+OPTIONS: broken-links:mark 

我还考虑过首先将我的 org 文件自动导出到一个已插入所有代码块结果的 org,以便 org-mode 可以看到 links 的所有目标,但显然导出一个org 文件到 org 模式也不可能(看似)损坏 links.

有什么帮助吗?非常感谢!

当仅对 Sphinx 使用 reStructuredText 导出时,我可以使用内联 rST links,如下所示。这里的一个额外好处是 rST links 不区分大小写,不像 org-mode links.

See also @@rst:`my-function`_@@.

如果我想导出为多种格式,那么我可以定义一个 org-mode 宏来生成上面的 rST link,以及用于其他导出格式的 links。