Considere o seguinte arquivo organizacional:
#+PROPERTY: tangle "init.el"
#+PROPERTY: noweb yes
* A
#+begin_src elisp
; initialization code
; this *must* come first
#+end_src
* B
#+begin_src emacs-lisp
<<support-functions>>
#+end_src
** Cool Stuff
#+begin_src elisp :noweb-ref "support-functions" :tangle no
(message "willkommen")
#+end_src
** Test
#+begin_src elisp :noweb-ref "support-functions" :tangle no
(message "hi")
#+end_src
rendimentos
(message "willkommen")
(message "hi")
; initialization code
; this *must* come first
ainda assim, remover o :tangle
argumento do cabeçalho em um dos blocos Cool Stuff
corrige o problema, mas duplica o código:
; initialization code
; this *must* come first
(message "hi")
(message "willkommen")
(message "hi")
O que devo fazer para garantir o comportamento correto? Sei que poderia simplesmente desativar o emaranhamento do documento e deixar tudo pronto agora, mas isso parece mais uma solução alternativa do que uma solução.
var
iables no org-babel, mas as outras respostas são quase exatamente o que estou fazendo.Respostas:
Acho que o problema é simplesmente o fato de você estar usando duas maneiras diferentes de especificar o idioma dos blocos de origem:
emacs-lisp
para alguns eelisp
para outros. Parece que todos oselisp
blocos estão emaranhados antes de todosemacs-lisp
(ordem alfabética?). Se você usa um ou outro de forma consistente, a ordem dos blocos no seu arquivo é respeitada:emaranhados para
fonte
Existem dois problemas aqui. A primeira é que você está definindo a
tangle
propriedade em todo o documento. Ao fazer isso, você precisa definir cada bloco que é um bloco noweb como:tangle no
. É muito mais fácil definir atangle
propriedade em um bloco e usá-la como estrutura para todo o documento emaranhado. Você pode ver como isso funciona no meu exemplo abaixo.O segundo problema são suas declarações de tipo de fonte inconsistentes. os
elisp
blocos estão saindo primeiro porque eles se agrupam antesemacs-lisp
. Todos devem ser rotulados da mesma forma se forem da mesma linguagem e forem no mesmo arquivo (é claro que há exceções, como incorporar SQL no PHP ou algo assim, mas seguir a minha primeira sugestão ajudará a evitar problemas.Emaranhados para
fonte