Limpiar el archivo intermediario de exportación del modo org

7

Yo uso el modo org para exportar PDF. Lo hace a través de LaTeX; multa.

Entonces obtengo archivos .pdf y .tex .

Solo el PDF es interesante para mí. ¿Alguna configuración / forma en que el modo org limpia los archivos .tex por sí mismo (o lo almacena en una carpeta temporal)?

Jocelyn delalande
fuente

Respuestas:

6

Simplemente puede personalizar la variable org-latex-logfiles-extensionspara permitir que org elimine esos archivos auxiliares después de exportarlos automáticamente. es decir

(setq org-latex-logfiles-extensions (quote ("lof" "lot" "tex~" "aux" "idx" "log" "out" "toc" "nav" "snm" "vrb" "dvi" "fdb_latexmk" "blg" "brf" "fls" "entoc" "ps" "spl" "bbl")))

Agregue la extensión que desea eliminar a la variable.

Leu_Grady
fuente
buen plomo! Mi solución final es:(add-hook 'org-mode-hook (lambda ()(add-to-list 'org-latex-logfiles-extensions "tex")))
Jocelyn delalande
No creo que necesite agregar esto al enlace del modo org. Esta variable solo debería funcionar en modo org.
Leu_Grady
@ leu-grady: la cosa es que si uso add-to-list, la var tiene que ser preexistente, que es solo el caso después de que se ha inicializado el modo org.
Jocelyn delalande
@Jocelyndelalande tienes razón. Pero tal vez puedas probar eval-after-load.
Leu_Grady
También debe asegurarse de que org-latex-remove-logfilesno sea nulo: de forma tpredeterminada, pero si los archivos no se eliminan, su valor podría haber cambiado. Además, esto solo limpia los diversos archivos que produce el látex. No limpia, por ejemplo, los subdirectorios que la organización misma (o emacs) podría producir.
NickD
2

Esta es una pregunta simple pero no tiene respuestas tan simples. Los archivos temporales se utilizan repetidamente en la producción de salida en pdf. Ni AUCTeX ni ORG saben cuándo es seguro eliminarlos. Por lo tanto, se dejan allí para su eliminación manual después de determinar si ya no son necesarios.

Aquí hay algunas maneras de acelerar el proceso de eliminación manual. Un simple comando de shell hará el trabajo sin demasiado alboroto (agregue otras extensiones según sea necesario):

(defun clear-latex-temp-files () (shell-command "rm -rf *.tex *.prv preview.fmt"))

Use latexmk (en lugar de pdflatex) para generar su pdf para que pueda usar la -copción de eliminar los archivos temporales:

latexmk -c 

y luego ponga la siguiente línea en este archivo ~\.latexmkrcpara cubrir todos los archivos temporales, no solo *.texy *.prv:

@generated_exts = qw(aux idx ind lof lot out toc acn acr alg glg glo gls ist);

Puede agregar otros archivos temporales (.synctex .gz .nav .vrb .snm .blg -blx .bib .bbl .run .xml) según sus necesidades. Esta es la opción más personalizable.

Para evitar esta complicación para archivos organizativos simples, puede usar la -output-directoryopción integrada de pdflatex.

pdflatex -output-directory=target <file>

Lo que también colocará la salida pdf allí en el directorio de destino. Luego puede mover el archivo pdf fuera de allí una vez que esté satisfecho de que se generó correctamente. Todos los archivos borrables están en una ubicación que se puede purgar periódicamente.

¿Por qué no usar una macro para delete-filedespués org-latex-compile? Porque eso a veces puede eliminar los archivos temporales prematuramente. Puede terminar con enlaces rotos, entradas bibliográficas no vinculadas, encabezados de capítulos no vinculados en TOC e índices no terminados, lista de tablas, lista de figuras. Consulte la cadena de documentación del modo org para C-h f org-latex-compile:

La razón por la que se trata de una lista es que generalmente requiere varias ejecuciones de 'pdflatex', tal vez mezclado con una llamada a 'bibtex'. Org no tiene un mecanismo inteligente para detectar cuáles de estos comandos deben ejecutarse para obtener un resultado estable, y tampoco realiza ninguna comprobación de errores.

Usuario de Emacs
fuente
Genial, solo lo había intentado con un ejemplo muy simple, que solo requería la creación de un solo archivo ".tex"
Jules
¿Qué opinas sobre la solución @ leu-grady?
Jocelyn delalande
Simplemente no entiendo por qué: la limpieza org-mode parece ocurrir después de que se produjo el PDF (ver. org-latex-remove-logfilesDoc); ¿Cómo podría necesitar el .tex ? Me encantaría entender tu punto, pero por favor siembra un ejemplo problemático.
Jocelyn delalande
Para otros que lean esta respuesta: si observa índices, enlaces o entradas de TOC faltantes en su pdf, use esta solución. Para archivos organizativos simples, no habrá diferencia cuando se eliminen los archivos temporales. De lo contrario, da una falsa sensación de integridad. El OP quiere ver un ejemplo problemático, pero como dice la documentación no hay verificación de errores. Para cada ejecución, puede observar que faltan elementos aleatorios en su pdf dependiendo de cuándo se eliminaron los archivos temporales (después de la primera, segunda o tercera pasada).
Usuario de Emacs
1

Puede poner consejos después de la función para eliminar el archivo intermedio de esta manera:

(advice-add 'org-latex-compile :after #'delete-file)
Jules
fuente
0

Me puse org-latex-pdf-processa algo como:

latexmk -outdir=/tmp/latexmk -f -pdf %F; mv %f /tmp/latexmk; mv /tmp/latexmk/%b.pdf %o

De esta manera, guardo todos los archivos intermedios en un lugar "oculto" para acelerar las sucesivas compilaciones, pero solo el pdf se mantiene en el lugar original.

memeplex
fuente