p Valdés writes:
> Sería muy sencillo hacer un pdf por cada capitulo y pegarlos todos
> juntos al final, pero daría problemas con el paginado y no es tan
> recomendable
Para la edición bilingüe de las Cartas de Esquines y Demóstenes escribí
esta función en Elisp (está muy en crudo), que se puede evaluar dentro
de un bloque de código de Org-Mode y devuelve como resultado los
comandos necesarios de pdfpages. En el segundo argumento opcional se
pueden añadir comandos por página del PDF, como una lista de listas. En
cada sublista, el car (1er elemento) es siempre el número de pág. y el
cdr (cola) una cadena con los comandos que queremos añadir en esa página
con un \pagecommand de pdfpages. El primer argumento opcional sería para
un \pagecommand global, como una cadena (requiere mutool de mupdf, para
sacar el número de páginas totales).
(defun inserta-pdfpages (pdf &optional page-command page-commands)
(let ((pdfpages-bi-resultado))
(setq pdfpages-bi-resultado
(with-temp-buffer
(let ((contador 0)
(pags-pdf (shell-command-to-string
(format "mutool info %s | grep '^Pages' | cut -d ' ' -f 2"
pdf))))
(dotimes (num (string-to-number pags-pdf))
(insert (concat
"\n\\includepdf[pages={"
(number-to-string
(setf contador (+ contador 1)))
"},"
"noautoscale=true,"
(if page-command
(format "pagecommand={%s}" page-command) "")
"]{"
pdf
"}"))))
(if page-commands
(mapc (lambda (x)
(let ((pag (number-to-string (car x)))
(str (cadr x)))
(save-excursion
(goto-char (point-min))
(while (re-search-forward (concat "pages={" pag "}") nil t)
;; si existe un pagecommand
(re-search-forward "\\(pagecommand={\\)\\\\thispagestyle{[^{}]+}" nil t)
(replace-match (concat "\\1" str))))))
page-commands)
"")
(buffer-string)))
pdfpages-bi-resultado))
Un ejemplo de uso (este bloque lo colocaría en el documento "máster" de
Org-Mode:
#+begin_src emacs-lisp :exports results :results latex
(inserta-pdfpages "cartas-bi.pdf" "\\thispagestyle{base}"
'((13 "\\\\label{fig:3}")
(14 "\\\\label{fig:4}")
(29 "\\\\label{fig:5}")
(55 "\\\\thispagestyle{empty}")))
#+end_src
Y, antes de que se evalúe ese bloque, se evalúa este otro, que se
encarga de compilar cada documento por separado (la edición crítica en
griego y la traducción), y luego enfrenta las páginas con pdftk:
#+HEADER: :exports results :results none
#+NAME: comp-cartas-bi
#+begin_src sh
cd ~/Git/cartas/libro/tex/
latexmk -lualatex -e '$lualatex=q/lualatex %O -shell-escape %S/' cartas.tex
latexmk -lualatex -e '$lualatex=q/lualatex %O -shell-escape %S/' cartas-trad.tex
pdftk A=cartas.pdf B=cartas-trad.pdf shuffle A B output cartas-bi.pdf
#+end_src
También se evalúa cuando abro el documento "máster", así tengo siempre
la última versión. Y también puedo trabajar y compilar uno u otro
archivo por separado. Y se puede comentar el "#+HEADER", si no queremos
que se compile más. Otras partes del libro, como la introducción, el
índice analítico y demás van por Org Publish, como subdocumentos.
Naturalmente, todo eso no hace a TeX más rápido, pero permite
"focalizar" el trabajo en partes del libro, sin necesidad de tener que
estar compilando todo a cada vez. La compilación final la hago con el
paquete de Emacs async, corriendo latexmk en modo interactivo.
Dependiendo del tamaño del libro, puede tardar lo suyo, pero al menos
puedo hacer otras cosas mientras compila. Realmente, en ese punto no
suelo tener especial prisa.
En general, me parece que es más útil y práctico establecer un flujo de
trabajo donde la depuración de errores sea lo más localizada y "ágil"
posible. Aquí es donde entra también lo de la pre-visualización de
regiones dentro de un documento de Org, que comenté en otro mensaje de
este hilo. Si, luego, cuando toca compilar todo el tochazo, podemos
tener una certeza más o menos razonable de que todo va a estar en su
sitio y no vamos a tener sorpresas desagradables, entonces a mí,
personalmente, no me importaría que tardase once horas en compilar. Que
no las va a tardar, vaya, pero por poner un ejemplo extremo.
Saludos,
Juan Manuel
----------------------------------------------------
Para darse de baja ES-TEX pincha y envia el siguiente url
mailto:[log in para visualizar]
----------------------------------------------------
|