Tengo un documento de modo org con una serie de bloques de código. Algunos de estos tardan mucho tiempo en ejecutarse, por lo que no quiero volver a evaluarlos cada vez que hago una exportación.
Sé que puedo evitar la reevaluación configurando org-export-babel-eval en nil, pero cuando hago esto, tampoco se imprimirán los resultados de evaluaciones anteriores, incluso si tengo la opción de "resultados" del bloque de código establecer en "salida".
Sí, sé que puedo eliminar la línea "# + resultados:" antes del bloque de resultados a mano, pero esto se vuelve molesto cada vez que necesito reevaluar a mano, por ejemplo cuando hago un cambio de código.
Entonces, ¿cómo puedo conseguir que exporte los resultados anteriores en lugar de reevaluarlos cada vez?
:exports results
en algún código de emacs-lisp, y todavía se evaluó en la exportación ... No estoy seguro de cuál es exactamente la diferencia, por lo que solo debo señalar que puede haber más en esto. (También: esto afecta lo que sucede en la salida, lo que puede o no ser deseable).Con org-mode 9, puede evitar la ejecución de un bloque de origen durante la exportación con
:eval no-export
.Desde el documentación :
fuente
Respuesta corta: usar
:cache yes
Algunos detalles adicionales:
El modo Org tiene (quizás esto es nuevo desde que se hizo la pregunta, pero ahora existe) un
:cache
opción . Lo esencial es que se establece:cache yes
sobre el#+BEGIN_SRC
línea, y luego::cache
), almacenará en caché los resultados de la salida como de costumbre, y también almacenará un SHA1 hash del estado de la código fuente (y cualquier entrada de datos, por ejemplo, listas o tablas a las que se hace referencia) que lo generaron.org-babel-execute-src-block
(por ejemplo, a través de C-c C-c ), o uno de los comandos de exportación, volverá a calcular la suma de comprobación en el bloque fuente y cualquier entrada de datos , y solo si han cambiado volverá a ejecutar el código.Si tiene un código que tiene entradas que no están enumeradas explícitamente en el archivo (por ejemplo, usa la hora del sistema o el contenido de un archivo o algo) que podría cambiar los resultados, tendrá que deshabilitar el almacenamiento en caché (o hacer algún otro cambio) para obtener Código para ejecutar de nuevo. Pero si los datos son todos autocontenidos dentro del archivo de la organización, por lo general, se debe almacenar en caché cuando se supone que debe hacerlo, y volver a generar cuando tenga una razón para hacerlo.
Ejemplo:
El siguiente es un ejemplo artificial en el que tiene una tabla de puntuaciones que las personas han logrado de alguna manera y desea hacer un resumen de los datos.
Este código se ejecutará cuando ya sea la mesa cambia o el código cambia (o ambos), pero mientras ambos permanezcan igual, la suma de comprobación no cambiará y, por lo tanto, el código no se ejecutará nuevamente. Obviamente, no es un gran problema en este ejemplo en particular, pero para un código como el que mencionas que tarda mucho tiempo en ejecutarse, podría ser.
Ejemplo de fragmento de modo de organización con tabla de datos, código fuente y resultados:
nota al margen:
He descubierto que haciendo, por ejemplo,
org-html-export-to-html
parece volver a calcular los valores de las cosas cuando sea necesario, pero NO guárdalos en elRESULTS
secciones Por lo tanto, algo de lo que hay que estar atento ... es posible que desee calcularlos solo con C-c C-c , y exportar solo después de que se haya hecho. : - /fuente