Hola a todos: Por si le resultase de utilidad a alguien (que use Emacs), he escrito para mi uso esta funcioncilla en Elisp para convertir entre unidades de las que maneja TeX (pt, dd, bp, cm, in y todo eso). Hace falta requerir el paquete calc-units, que es el que hace el trabajo: (require 'calc-units) Y aquí va mi función. Se puede usar interactivamente, en cuyo caso pregunta por la cantidad a convertir (p.ej. "18in") y la unidad a convertir (p.ej. "bp"), y el resultado lo devuelve con un mensaje en la "echo area" y lo copia al portapapeles. Pero también se puede usar como código, de forma que admite un argumento que debe ser una lista de dos elementos, el primero la cantidad a convertir y el segundo la unidad a convertir. Es decir, podemos poner como código: (mi-convierte-unidades-tex '("18in" "bp")) La función (es más simple de lo que parece, ya que tuve que limpiar algo los resultados, pues calc-units usa cosas como "texbp", "texpt", etc.): (defun mi-convierte-unidades-tex (&optional cons-cell-de-a) (interactive) (let* ((unidades-tex (regexp-opt '("pt" "pc" "bp" "dd" "cc" "sp"))) (cantidad-de (if cons-cell-de-a (car cons-cell-de-a) (read-from-minibuffer "Convertir: "))) (cantidad-de-corr (if (string-match (concat "\\([[:digit:]]+\\)" "\\(" unidades-tex "\\)") cantidad-de) (concat (match-string 1 cantidad-de) "tex" (match-string 2 cantidad-de)) cantidad-de)) (cantidad-a (if cons-cell-de-a (car (cdr cons-cell-de-a)) (read-from-minibuffer "Convertir a: "))) (cantidad-a-corr (if (string-match (concat "\\(" unidades-tex "\\)") cantidad-a) (concat "tex" (match-string 1 cantidad-a)) cantidad-a)) (resultado (calc-eval (math-convert-units (calc-eval cantidad-de-corr 'raw) (calc-eval cantidad-a-corr 'raw)))) (resultado-corr (replace-regexp-in-string "tex\\|\s" "" resultado))) (if cons-cell-de-a resultado-corr (message resultado-corr) (kill-new resultado-corr)))) Y aprovechando que se puede usar como código, escribí esta otra, que partiendo de una cantidad devuelve una lista de equivalencias en diversas unidades (ampliable, en la variable 'unidades'): (defun cuanto-es-en-tex () (interactive) (let* ((unidades (list "pt" "pc" "bp" "dd" "cc" "sp" "cm" "mm" "in")) (desde (read-from-minibuffer "Cuánto es en TeX: ")) (resultado-bruto (mapcar (lambda (x) (mi-convierte-unidades-tex (list desde x))) unidades)) (resultado (mapconcat 'identity resultado-bruto "\n"))) (message (format "%s equivalen a:\n\n%s" desde resultado)) (kill-new (format "%s equivalen a:\n\n%s" desde resultado)))) Y la lista la copia también en el portapapeles además de entregarla como mensaje. Es decir, que si hacemos M-x cuanto-es-en-tex RET "24cm" RET, obtenemos la cadena: "24cm equivalen a: 682.866141732pt 56.905511811pc 680.31496063bp 638.187500795dd 53.1822917329cc 44752315.4646sp 24cm 240.mm 9.44881889764in" Saludos, Juan Manuel ---------------------------------------------------- Normas para el correcto uso del correo electrónico: http://www.rediris.es/mail/estilo.html ----------------------------------------------------