Noweb anidado en bloques org src

Sep 06 2020

Tengo los siguientes bloques de código:

El bloque 1 es solo una línea. Este es un MWE. En realidad, tengo varias líneas en el bloque 1.

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

El bloque 2 también se ha reducido por el bien de MWE.

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

Esto muestra un esqueleto de myfunc. Quiero incluir este esqueleto para dar una descripción general de myfunc.

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

Finalmente, esto muestra la especificación completa de myfunc.

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

Cómo espero que se vea al exportar

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

Lo que realmente parece

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

¿Cómo puedo hacer que los bloques anidados se expandan completamente cuando uso: noweb yes?

Respuestas

mankoff Sep 06 2020 at 18:28

Su ejemplo funciona si configuro todos los encabezados con :noweb yesy luego solo el último bloque tiene :tangle yes.

Un ejemplo más simple:

  1. Agregue esto en la parte superior del archivo: #+PROPERTY: header-args :noweb yes :tangle no :exports code
  2. Elimine todos los argumentos de encabezado de los bloques de código.
  3. Agregue :tangle yesencabezado a la "especificación completa".