Resposta curta: use :cache yes
Alguns detalhes adicionais:
O Org-mode (talvez seja novo desde que a pergunta foi feita, mas agora existe) :cache
option . A essência é que você define :cache yes
na linha #+BEGIN_SRC
e, em seguida:
- Quando você executa o código pela primeira vez (mesmo que os resultados tenham sido armazenados anteriormente, ele precisará ser executado novamente pelo menos uma vez, na primeira vez que você ativar
:cache
), ele armazenará em cache os resultados da saída normalmente. e também armazenar um hash SHA1 do estado do código-fonte (e quaisquer entradas de dados, por exemplo, listas ou tabelas referenciadas) que o geraram.
- Então, quando você faz uma operação que avaliaria o código (seja
org-babel-execute-src-block
(por exemplo, via Cc Cc ), ou um dos comandos de exportação, ele recalculará a soma de verificação no < em> bloco de origem e quaisquer entradas de dados , e somente se eles tiverem mudado, ele executará o código novamente.
Se você tiver um código cuja entrada não tenha sido explicitamente listada no arquivo (por exemplo, usa a hora do sistema ou o conteúdo de um arquivo ou algo assim) que possa alterar os resultados, será necessário desativar o cache (ou fazer alguma outra alteração) para obter o código para executar novamente. Mas se os dados são todos auto-contidos dentro do arquivo org, geralmente deve armazenar em cache quando é suposto, e re-gerar quando tem um motivo para.
Exemplo:
A seguir, um exemplo inventado em que você tem uma tabela de pontuações que as pessoas conseguiram de alguma forma e você deseja fazer um resumo dos dados.
Este código será executado quando qualquer alteração da tabela ou o código for alterado (ou ambos), mas, desde que ambos permaneçam os mesmos, a soma de verificação não será alterada e, portanto, o código não será executado novamente. Obviamente, não é um grande negócio neste exemplo em particular, mas para código como você menciona que leva muito tempo para ser executado, pode ser.
Exemplo de snippet do modo organizacional com tabela de dados, código-fonte e resultados:
** Participants:
#+NAME: mytable
| Name | Points |
|-------+--------|
| Alice | 30 |
| Bob | 20 |
| Carol | 25 |
| Dan | 18 |
** Summary data:
#+BEGIN_SRC emacs-lisp :cache yes :var data=mytable :exports results
(let* ((scores (mapcar (lambda (row) (cadr row)) data))
(sum (apply '+ scores))
(avg (/ sum (length scores))))
(list '("Total Score" "Average Score")
'hline
(list sum avg)))
#+END_SRC
#+RESULTS[a15af1d9cd34a76f4a6f822c36eccbc8bd493195]:
| Total Score | Average Score |
|-------------+---------------|
| 93 | 23 |
nota lateral:
Descobri que fazer, por exemplo, org-html-export-to-html
parece recalcular os valores das coisas quando necessário, mas NÃO armazená-los nas seções RESULTS
. Então, algo para estar ciente ... pode querer computá-los apenas com C-c C-c , e exportar somente depois de feito isso. : - /