是否可以从其他代码块调用Org Babel代码块?

Con*_*nor 4 emacs org-mode org-babel

我的Babel库中有许多Org Babel代码块,我经常会依次调用它们。

是否可以制作一个Org Babel代码块来依次调用其他代码块?

fni*_*sen 6

是的你可以。只需使用 :var ,其中参数是另一个块执行的结果。

#+name: clean
#+begin_src ...
...
#+end_src

#+name: plot
#+begin_src :var data=clean
...
#+end_src
Run Code Online (Sandbox Code Playgroud)

  • 回答我自己的问题:它是 – 只需使用 `#+name: ex\n#+begin_example xml` 而不是 `begin_src`,然后您可以 `#+begin_src sh :var f=ex\necho "$f" | xmllint --format -\n#end_src` (2认同)

小智 5

是的,我有几个org-babel文件。这是一种实现方法:

#+srcname: foo
#+begin_src python :exports code :tangle yes
  def foo():
      print "I'm foo()"
#+end_src

#+name: bar
#+begin_src python :exports code :tangle yes
  def bar():
      foo()
      print "I'm bar()'"
#+end_src

#+srcname: main
#+begin_src python :exports code :tangle yes
  foo()
  bar()
#+end_src
Run Code Online (Sandbox Code Playgroud)

此文件的输出是一个如下所示的文件:

def foo():
    print "I'm foo()"

def bar():
    foo()
    print "I'm bar()'"

foo()
bar()
Run Code Online (Sandbox Code Playgroud)

如果org文件中的代码与您要生成的代码顺序不同,则可以使用noweb标记按您想要的顺序生成代码文件,如下所示:

#+name: bar
#+begin_src python :noweb-ref bar :tangle no
  def bar():
      foo()
      print "I'm bar()'"

#+end_src

#+srcname: foo
#+begin_src python :noweb-ref foo :tangle no
  def foo():
      print "I'm foo()"

#+end_src


#+begin_src python :noweb tangle :tangle yes

  <<foo>>
  <<bar>>

  foo()
  bar()
#+end_src
Run Code Online (Sandbox Code Playgroud)

缠结的输出是:

def foo():
    print "I'm foo()"

def bar():
    foo()
    print "I'm bar()'"

foo()
bar()
Run Code Online (Sandbox Code Playgroud)