Noweb annidato nei blocchi org src

Sep 06 2020

Ho i seguenti blocchi di codice:

Il blocco 1 è solo una riga. Questo è un MWE. In realtà, ho diverse righe nel blocco 1.

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

Anche il blocco 2 è stato ridotto per il bene di MWE.

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

Questo mostra uno scheletro di myfunc. Voglio includere questo scheletro per dare una panoramica di myfunc.

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

Infine, questo mostra le specifiche complete di myfunc.

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

Come mi aspetto che appaia una volta esportato

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

Come appare effettivamente

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

Come posso far espandere completamente i blocchi nidificati quando uso: noweb yes?

Risposte

mankoff Sep 06 2020 at 18:28

Il tuo esempio funziona se imposto tutte le intestazioni con :noweb yese solo l'ultimo blocco ha :tangle yes.

Un esempio più semplice:

  1. Aggiungi questo all'inizio del file: #+PROPERTY: header-args :noweb yes :tangle no :exports code
  2. Rimuove tutti gli argomenti dell'intestazione dai blocchi di codice.
  3. Aggiungi :tangle yesintestazione alla "specifica completa".