org-mode – ¿Cómo puedo exportar un archivo de organización a PDF en modo por lotes y ejecutar bloques de código fuente?

Pregunta:

En Debian Stretch, estoy intentando exportar este archivo llamado test.org

# -*- org-confirm-babel-evaluate: nil -*-
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t c:nil creator:nil d:(not "LOGBOOK") date:t e:t
#+OPTIONS: email:nil f:t inline:t num:t p:nil pri:nil prop:nil stat:t
#+OPTIONS: tags:t tasks:t tex:t timestamp:t title:t toc:t todo:t |:t
#+TITLE: Emacs Batch Test
#+DATE: 
#+EMAIL: 
#+LANGUAGE: en
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 25.2.1 (Org mode 8.3.4)
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS:
#+LATEX_HEADER:
#+LATEX_HEADER_EXTRA:
#+DESCRIPTION:
#+KEYWORDS:
#+SUBTITLE:

* Section 1

This is some text.

* Section 2

#+NAME: testcode
#+HEADER: :session R:emacsbatchtest
#+BEGIN_SRC R :exports both :results output 
library(arm)
example(display)
#+END_SRC

usando este script test.el llamado test.el

(progn
  (require 'cl-lib)
  (require 'org)
  (require 'ox)
  (require 'ox-latex)
  (require 'ox-publish)
  (defun bh-export-batch-dot-org ()
    (find-file "test.org")
    (org-latex-export-to-pdf nil nil nil nil nil)
    )
  (bh-export-batch-dot-org)
)

usando esta línea de comando:

$ emacs -batch -l test.el 

Emacs produce el PDF sin problemas, pero no ejecuta el código fuente de R. Puedo intentar configurar org-confirm-babel-evaluate Evaluation en mi .emacs o en el archivo; no hace ninguna diferencia en los resultados (y no estoy seguro de que la configuración en el archivo sea sintácticamente correcta; no parece hacer nada). He buscado, pero no he encontrado una solución en stackexchange o en otro lugar que parezca funcionar.

Si exporto el archivo .org manualmente, ejecuta el código fuente de R y genera el PDF completo.

Aquí hay algunos fragmentos posiblemente pertinentes de la sección de custom-set-variables de mi .emacs:

 '(org-babel-load-languages
   (quote
    ((emacs-lisp . t)
     (J . t)
     (calc . t)
     (shell . t)
     (ditaa . t)
     (dot . t)
     (plantuml . t)
     (python . t)
     (octave . t)
     (ledger . t)
     (sqlite . t)
     (stan . t)
     (R . t))))
 '(org-confirm-babel-evaluate t)
 '(org-export-backends (quote (ascii beamer html icalendar latex md odt)))

También probé esto en Windows Server 2016 con cygwin bash, y no produce nada. Agradecería información sobre cómo hacer que esto funcione en ambas plataformas. Si bien sería bueno, no es necesario que la solución sea la misma en ambos.

EDITAR: He intentado exportar este archivo de dos maneras: configurando org-confirm-babel-evaluate Evaluation en nil en mi .emacs (no se muestra en este ejemplo) o configurándolo en nil en una variable de archivo en la primera línea de prueba. org (que se muestra aquí). La sintaxis que se muestra aquí es incorrecta, falta un ; después de nil . Lo arreglé y ahora ya no consulta sobre la ejecución de R.

Consulta por otras dos razones. Primero, pregunta si puede aplicar las variables locales. ¡Ya he respondido ! , y ya no pregunta.

En segundo lugar, solicita el directorio del proyecto inicial de R si no hay una sesión ESS en vivo con el nombre R:emacsbatchtest . Lo arreglé agregando

#+HEADER: :dir FQPN

a los encabezados del bloque de código fuente (donde FQPN es el nombre de ruta completo del directorio actual).

Ahora tengo un archivo que se exporta de forma interactiva sin interacción después del Cc Ce lo .

El modo por lotes aún no puede ejecutar la fuente o producir el pdf, presumiblemente porque '(safe-local-variable-values (quote ((org-confirm-babel-evaluate)))) evaluation '(safe-local-variable-values (quote ((org-confirm-babel-evaluate)))) ahora está en mi init.el, que no es llamado en lote. Tan pronto como determine cómo configurarlo, lo intentaré.

EDITAR 2:

Como señalé en un comentario, esto funciona bien en Linux, pero falla en W7.

Por "esto" me refiero a ejecutar emacs --batch --eval '(setq org-confirm-babel-evaluate nil)' -l test.el usando el archivo test.el proporcionado anteriormente y un archivo test.org ligeramente modificado:

#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t c:nil creator:nil d:(not "LOGBOOK") date:t e:t
#+OPTIONS: email:nil f:t inline:t num:t p:nil pri:nil prop:nil stat:t
#+OPTIONS: tags:t tasks:t tex:t timestamp:t title:t toc:t todo:t |:t
#+TITLE: Emacs Batch Test
#+DATE: 
#+EMAIL: 
#+LANGUAGE: en
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 25.2.1 (Org mode 8.3.4)
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS:
#+LATEX_HEADER:
#+LATEX_HEADER_EXTRA:
#+DESCRIPTION:
#+KEYWORDS:
#+SUBTITLE:

* Section 1

This is some text.

* Section 2

#+NAME: testcode1
#+HEADER: :session R:emacsbatchtest
#+HEADER: :dir FQDN
#+BEGIN_SRC R :exports both :results output 
library(arm)
example(display)
#+END_SRC
* Section 3
#+NAME: testcode2
#+HEADER: :session R:emacsbatchtest
#+BEGIN_SRC R :exports both :results output 
example(sim)
#+END_SRC

* Section 4

#+NAME: elispexample
#+HEADER: :exports both :results value
#+BEGIN_SRC emacs-lisp
(setq mylist '(a b c))
(cadr mylist)
#+END_SRC

Dejé caer la variable local del archivo, gracias a que la configuré en la sección --eval , agregué el encabezado: dir en el primer bloque de código, y agregué un segundo bloque de código R y un bloque de código emacs-lisp.

En GNU / Linux, ejecuta cada bloque de código y publica el resultado en un PDF.

En W7, genera test.tex , pero no genera el PDF.

Además, ninguno de los dos bloques de código R se ejecuta, pero se ejecuta el bloque de código emacs-lisp.

Creo que eso significa que hay algo mal al ejecutar R como una llamada de función desde dentro del modo org y hay algo mal al encontrar pdflatex.

Quizás no pueda iniciar R con éxito; Cygwin tiene sus desafíos:

$ R
Fatal error: you must specify '--save', '--no-save' or '--vanilla'

Robando de mi init.el, tal vez esto funcione:

$ /cygdrive/c/emacs/emacs-25.2-x86_64/bin/runemacs.exe --batch --eval "(setq org-confirm-babel-evaluate nil)"  --eval '(setq ess-directory-containing-R "c:")' --eval '(setq ess-rterm-version-paths "C:/R/R-3.4.3/bin/x64/Rterm.exe")' --eval '(setq org-babel-R-command "c:/R/R-3.4.3/bin/R --slave --no-save")'  -l test.el

No.

¿Alguien ve el problema? Creo que probé todo lo pertinente que veo en mi init.el

Respuesta:

Como descubrió, el problema es que --batch evita que Emacs cargue su archivo init. Puedes solucionarlo usando algo como

emacs --batch -l ~/.emacs ...

o

emacs --batch -l ~/.emacs.d/init.el ...

o

emacs --batch --eval '(setq org-confirm-babel-evaluate nil)' ...

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım