Ejecute el bloque src en la exportación del modo org

7

Tengo algún tipo de confusión fundamental sobre el uso de bloques src en modo org.

Defino una clase de látex personalizada en un bloque emacs-lisp src en la parte superior de mi archivo de organización. Sin embargo, la exportación falla, a menos que ejecute manualmente el bloque src (porque la clase de látex requerida no existe hasta que se ejecuta el bloque src). No se me solicita permiso para ejecutar el bloque.

Como ejemplo mínimo, intenté exportar esto:

#+name: test
#+begin_src emacs-lisp
(message "Success")
#+end_src

En la exportación, veo org-babel-exp processing...en mi búfer de mensajes, y esperaría verlo "Success"inmediatamente después, pero no lo hago.

Claramente me falta algo obvio, pero no me queda claro por la información lo que debería estar haciendo.

jake
fuente
Los bloques de código no se evalúan a menos que le indique específicamente a org-mode que lo haga . El fragmento en su ejemplo simplemente se exportará a un bloque de código en el formato de exportación elegido: pdf, html, etc. Más sobre el modo org y los bloques de origen .
Kaushal Modi
1
Ese era el eslabón perdido. Agregar #+CALL: test()al ejemplo anterior me dio el comportamiento esperado.
Jake

Respuestas:

6

Los bloques de código no se evalúan a menos que le indique específicamente a org-mode que lo haga . El fragmento en su ejemplo simplemente se exportará a un bloque de código en el formato de exportación elegido: pdf, html, etc.

Más información sobre el modo org y los bloques fuente.

Aquí está la versión modificada de su ejemplo con la #+CALL:línea requerida y la buena opción de tener una declaración de variable local de búfer para marcar la ejecución de emacs-lispfragmentos como segura.

#+NAME: test
#+BEGIN_SRC emacs-lisp
(message "Success")
#+END_SRC

#+CALL: test()

# Local Variables:
# org-confirm-babel-evaluate: (lambda (lang body) (not (string= lang "emacs-lisp")))
# End:
Kaushal Modi
fuente
2
¿Qué está haciendo exactamente el código de "Variable local" nuevamente? ¿Para qué sirve?
147pm
@ 147pm: la variable local permite que el bloque de origen emacs-lisp se ejecute durante la exportación sin solicitar confirmación al usuario. Para deshabilitar la confirmación para todos los idiomas, en su org-confirm-babel-evaluate: nillugar.
Melioratus