Cuaderno de GNUtas

Revoltijo Elisp (II)

Convertir entre unidades de TeX en GNU Emacs (con LaTeX de fondo)

Esta función convierte desde Emacs las unidades habituales usadas en TeX1. Ejecuta de fondo algunos comandos de bash y las unidades se convierten a través de LaTeX. Para ello, requiere que creemos un documento *.tex cargado con el paquete xparse y lo guardemos en algún lugar permanentemente. Para confeccionar este documento a gusto de cada cual, véase esta respuesta en tex.stackexchange.com.

Lo que la función hace en segundo plano: añade la dimensión a convertir en el archivo *.tex, lo compila, convierte el pdf a texto plano y muestra los resultados en un búfer temporal. La función cuenta con dos versiones (a y b). Cualquiera de ambas es usable (pero hay que reemplazar, naturalmente, las rutas que aparecen, según donde hayamos guardado nuestro archivo *.tex).

;; versión a

(defun convierte-unidades ()
  (interactive)
  (let
      ((convde (read-from-minibuffer "Convertir unidades:")))
    (save-window-excursion
      (dired "/home/juanmanuel/Tipografía/unidades/")
      (shell-command (concat "sed -i 's/\\(convertto{.\\+}{\\).\\+}/\\1"
			     (format "%s" convde)
			     "}/g' unidades.tex"))
      (shell-command "lualatex unidades.tex")
      (shell-command "pdftotext -layout unidades.pdf unidades.txt"))
    (when (get-buffer "*unidades convertidas*")
      (kill-buffer "*unidades convertidas*"))
    (get-buffer-create "*unidades convertidas*")
    (set-buffer "*unidades convertidas*")
    (insert-file-contents "/home/juanmanuel/Tipografía/unidades/unidades.txt")
    (temp-buffer-window-show "*unidades convertidas*"
			     '((display-buffer-below-selected display-buffer-at-bottom)
			       (inhibit-same-window . t)
			       (window-height . fit-window-to-buffer)))))

;; version b

(defun convierte-unidades ()
  (interactive)
  (let
      ((convde (read-from-minibuffer "Convertir unidades:")))
    (save-window-excursion
      (dired "~/Tipografía/unidades/")
      (with-temp-file "unidades-temp.tex"
	(insert-file-contents "unidades.tex")
	(replace-regexp "\\(convertto{.+}{\\).+}" (concat "\\1" (format "%s" convde) "}") nil))
      (shell-command "lualatex unidades-temp.tex")
      (shell-command "pdftotext -layout unidades-temp.pdf unidades.txt"))
    (when (get-buffer "*unidades convertidas*")
      (kill-buffer "*unidades convertidas*"))
    (get-buffer-create "*unidades convertidas*")
    (set-buffer "*unidades convertidas*")
    (insert-file-contents "~/Tipografía/unidades/unidades.txt")
    (temp-buffer-window-show "*unidades convertidas*"
			     '((display-buffer-below-selected display-buffer-at-bottom)
			       (inhibit-same-window . t)
			       (window-height . fit-window-to-buffer)))))

Y como un gif vale más que mil palabras:

unidades-emacs.gif

Publicado: 12/09/2019

Última actualización: 12/09/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

Notas:

1

Si queremos hacernos una visión de conjunto (incluso también una camiseta) de todo el amplio repertorio de medidas y dimensiones que maneja TeX, Tobias Weh tuvo a bien crear (en TeX, por supuesto) una bonita infografía. El código fuente puede descargarse aquí.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs