3

在以下 org-mode 源代码片段中,不会生成任何结果:

#+BEGIN_SRC ipython :session
  import numpy as np
#+END_SRC

但是,在执行时#+RESULTS:会添加到文档中。如何将 org-mode / babel 配置为仅在有要显示的内容时插入结果?

我知道我可以使用 禁用输出:results silent,但我不希望根据是否生成结果来指定不同的标志。

4

2 回答 2

1

ob-ipython与 Org 9 一起使用,我可以使用以下 hack,前提是源块配置为返回值(即,默认标头指定:results value):

; don't label empty outputs, exclude empty result blocks
(advice-add 'ob-ipython--process-response :filter-return
            (λ (contents)
               (if (string-match-p "\\`# Out\[[0-9]+\]:\n\\'" contents)
                   "" contents)))
(advice-add 'org-babel-insert-result :filter-args
            (λ (args)
               (let ((result (car args))
                     (result-params (cadr args))
                     (others (cddr args)))
                 (apply 'list
                        result
                        (if (string-empty-p result) '("silent") result-params)
                        others))))

ob-ipython当输出中没有任何内容(使结果为空)时,第一个建议会删除插入的输出标记,而第二个建议:results silent在结果为空时有效地应用。这些部分可以根据您的用例进行不同的排列。

于 2019-04-05T07:28:54.330 回答
1

我在 thcoffee-msft 的答案中添加了一个 nil 结果检查,以与 emacs-jupyter 兼容。如果当前结果为空,它还会删除任何先前的结果:

(advice-add 'org-babel-insert-result :filter-args
        (lambda (args)
          (let ((result (car args))
            (result-params (cadr args))
            (others (cddr args)))
        (apply 'list
               result
               (if (or
                (string-empty-p result) (not result))
               (progn (org-babel-remove-result) '("silent"))
                result-params)
               others))))
于 2021-12-07T13:52:33.570 回答