Noweb aninhado em blocos org src

Sep 06 2020

Eu tenho os seguintes blocos de código:

O bloco 1 é apenas uma linha. Este é um MWE. Na realidade, tenho várias linhas no bloco 1.

#+name: block1
#+begin_src python :noweb no :exports none
print("Block 1")
#+end_src

Bloco 2 também foi reduzido por causa do MWE.

#+name: block2
#+begin_src python :noweb no :exports none
<<block1>>
print("Block 2")
#+end_src

Isso mostra um esqueleto de myfunc. Quero incluir este esqueleto para dar uma visão geral do myfunc.

#+name: block3
#+begin_src python :noweb no :exports code
def myfunc(x):
    <<block2>>
#+end_src

Finalmente, isso mostra a especificação completa do myfunc.

#+begin_src python :noweb yes :exports code
<<block3>>
#+end_src

Como espero que pareça quando exportado

def myfunc(x):
    print("Block 1")
    print("Block 2")

O que realmente parece

def myfunc(x):
    <<block1>>
    print("Block 2")

Como posso fazer com que os blocos aninhados se expandam completamente quando eu uso: noweb yes?

Respostas

mankoff Sep 06 2020 at 18:28

Seu exemplo funcionará se eu definir todos os cabeçalhos com :noweb yese somente o último bloco tiver :tangle yes.

Um exemplo mais simples:

  1. Adicione isso no topo do arquivo: #+PROPERTY: header-args :noweb yes :tangle no :exports code
  2. Remova todos os argumentos de cabeçalho dos blocos de código.
  3. Adicione o :tangle yescabeçalho à "especificação completa".