Considere el siguiente archivo Org:
#+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
rendimientos
(message "willkommen")
(message "hi")
; initialization code
; this *must* come first
Sin embargo, eliminar el :tangle
argumento de encabezado en uno de los bloques Cool Stuff
soluciona el problema, pero duplica el código:
; initialization code
; this *must* come first
(message "hi")
(message "willkommen")
(message "hi")
¿Qué debo hacer para garantizar un comportamiento correcto? Sé que podría simplemente desactivar el enredo para el documento y hacer que todo sea nuevo, pero esto se siente como una solución alternativa en lugar de una solución.
var
iables en org-babel, pero las otras respuestas son casi exactamente lo que estoy haciendo.Respuestas:
Creo que el problema es simplemente que está utilizando dos formas diferentes de especificar el idioma de los bloques de origen:
emacs-lisp
para algunos yelisp
para otros. Parece que todos loselisp
bloques están enredados antes que todosemacs-lisp
(¿orden alfabético?). Si usa uno u otro de manera sistemática, se respetará el orden de los bloques en su archivo:enredos a
fuente
Hay dos problemas aquí. La primera es que está configurando la
tangle
propiedad en todo el documento. Cuando hace esto, necesita establecer cada bloque que sea un bloque noweb como:tangle no
. Es mucho más fácil establecer latangle
propiedad en un bloque y usarla como marco para todo el documento enredado. Puedes ver cómo funciona esto en mi ejemplo a continuación.El segundo problema son sus declaraciones de tipo fuente inconsistentes. los
elisp
bloques salen primero porque antes se juntanemacs-lisp
. Todos deberían tener la misma etiqueta si son del mismo idioma y van en el mismo archivo (hay excepciones, por supuesto, como incrustar SQL en PHP o algo así, pero seguir mi primera sugerencia ayudará a evitar problemas.Enredos a
fuente