Вложенный noweb в блоки src org

Sep 06 2020

У меня есть следующие блоки кода:

Блок 1 - это всего одна линия. Это MWE. На самом деле у меня в блоке 1 несколько строк.

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

Блок 2 также был сокращен ради MWE.

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

Это показывает скелет myfunc. Я хочу включить этот скелет, чтобы дать обзор myfunc.

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

Наконец, это показывает полную спецификацию myfunc.

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

Как я ожидаю, что это будет выглядеть при экспорте

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

Как это на самом деле выглядит

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

Как я могу полностью развернуть вложенные блоки, когда использую: noweb yes?

Ответы

mankoff Sep 06 2020 at 18:28

Ваш пример работает, если я установил все заголовки, :noweb yesа затем только последний блок :tangle yes.

Более простой пример:

  1. Добавьте это вверху файла: #+PROPERTY: header-args :noweb yes :tangle no :exports code
  2. Удалите все аргументы заголовка из блоков кода.
  3. Добавьте :tangle yesзаголовок в «полную спецификацию».