Cuaderno de GNUtas

Números romanos en versalitas (Emacs y LaTeX)

Si en nuestro documento para LaTeX queremos normalizar los números romanos de ciertos contextos en versalitas, podemos escribir una muy simple función para Emacs que busque la expresión regular \(\b[IVXLCDM]+\b\) y encierre el número romano en un comando que previamente hayamos definido. Por ejemplo, algo así como

\def\miscrom#1{\textsc{\MakeLowercase{#1}}}

Claro, con una función así no podríamos fiar todo en la automatización, pues nos entregaría falsos positivos por todas partes. Así que se me ocurrió lo siguiente, que es un poco de andar por casa, pero no he sido capaz de encontrar una solución mejor:

Definimos primero una función para ejecutar los reemplazos, con dos argumentos: antes y despues

(defun reemplaza (antes despues)
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward antes nil t)
      (replace-match despues t nil))))

Y la función resultante se parecería a esta:

(defun romanos-en-versalitas ()
    (interactive)
    (reemplaza "siglo \\(\\b[IVXLCDM]+\\b\\)" "siglo \\\\miscrom{\\1}")
    (reemplaza " s. \\(\\b[IVXLCDM]+\\b\\)" " s. \\\\miscrom{\\1}")
    (reemplaza " p. \\(\\b[IVXLCDM]+\\b\\)" " p. \\\\miscrom{\\1}")
    (reemplaza "\\(\\b[IVXLCDM]+\\b\\)–" "\\\\miscrom{\\1}–")
    (reemplaza "–\\(\\b[IVXLCDM]+\\b\\)" "–\\\\miscrom{\\1}")
    (save-excursion
      (goto-char (point-min))
      (occur "\\(\\b[IVXLCDM]+\\b\\)")))

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

romanos-versalitas.gif

Publicado: 01/05/2019

Última actualización: 18/05/20


Índice general

Acerca de...

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

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