Matemáticas en Emacs

Table of Contents

Actualizado a 06 de agosto de 2017.

Apuntes a ordenador

Tomar apuntes de matemáticas con el ordenador es una tarea difícil por lo complejo que es transcribir la notación (símbolos, letras en otros alfabetos, índices…) y la velocidad necesaria. Además, los diagramas, dibujos, flechas o anotaciones no textuales que tomamos parecen imposibles de transcribir fielmente a un fichero.

Latex permite notación matemática pero no facilita la velocidad (al fin y al cabo, Latex estaría pensado para edición de libros, no para tomar apuntes). Markdown, por otro lado, simplifica mucho el poder escribir, pero pierde mucha potencia respecto a Latex. Así que una solución es usar org-mode como lenguaje de marcado; es relativamente simple y fácilmente legible, como markdown, mientras que permite visualización de latex conforme se edita, programación literaria y exportación a latex y html, permitiendo la inclusión de código latex o html arbitrario para exportarlo.

Ventajas de org-mode

org-mode tiene internamente un lenguaje de marcado similar al de markdown, con la ventaja para el usuario de Emacs de que está adaptado especialmente al editor. Permite escribir fórmulas en Latex y exportar luego a .tex y .pdf, controlando las opciones de Latex.

Una fórmula en Latex puede escribirse directamente en org-mode incluyéndola entre \(\mathtt{\backslash\left( \dots \backslash\right)}\), si está dentro de una línea de texto (como en \(i \ast x = x\)); o entre \(\backslash[\ \dots\ \backslash]\), cuando queremos que se muestre aparte del texto como en el siguiente ejemplo

\[ \sum_{n=0}^\infty \frac{1}{2^n}. \]

Cuando terminamos de escribirla podemos previsualizarla directamente con C-c C-x C-l, como si fuera un editor WYSIWYG.

Si vamos a acabar exportando a latex podemos insertar entornos como los que ofrece la biblioteca de la AMS con

#+begin_theorem
[texto del teorema]
#+end_theorem

o incluso definir nuestros propios entornos y usarlos después de la misma forma. Además, también permite la inclusión de bloques de código con

#+begin_src ruby
[código en ruby]
#+end_src

en la mayoría de lenguajes de programación y algunos especialmente útiles para matemáticas como Sage.

Zoom

Un problema menor (y quizá sólo mío) al configurar todo esto es que las fórmulas previsualizadas parecen demasiado pequeñas. Aunque estén en proporción con el texto, cuesta más leerlas; y cuando aumentamos el tamaño del texto con C-x C-+, las fórmulas no se amplían con él. Para conseguir que lo hagan hay que incluir el siguiente trozo de código en el archivo de configuración de Emacs, mezcla de dos respuestas de thisirs y Mark en Stack Overflow:

  (defun update-org-latex-fragment-scale ()
    (let ((text-scale-factor
           (expt text-scale-mode-step text-scale-mode-amount)))
      (plist-put org-format-latex-options
                 :scale (* 1.2 text-scale-factor)))
  )
  (add-hook
   'text-scale-mode-hook
   'update-org-latex-fragment-scale)

Después de volver a cargar el archivo de configuración, las fórmulas nuevas deberían volver a ajustarse con el texto.

Aumentando la velocidad de escritura

Mi objetivo principal con todo esto era escribir matemáticas más rápidamente, así que pregunté sobre autocompletado y concluí en usar latex-math-mode. Esto permite incluir comandos de Latex con atajos de teclado. En su configuración original usa el caracter ` para acceder a ellos, así que `-a escribe \alpha. Yo he decidido cambiar el acento invertido, que ya cuesta dos pulsaciones en el teclado en español, por la ç, que no la suelo usar. Además de los que incluye el paquete por defecto, se pueden escribir atajos propios.

Además de latex-math-mode, cdlatex es un modo de Emacs escrito por el mismo creador de org-mode, que facilita la escritura rápida de símbolos de latex. Puede añadirse a org-mode usando

  (use-package cdlatex
    :ensure t)

  (add-hook 'org-mode-hook 'turn-on-org-cdlatex)

y las instrucciones del paquete pueden encontrarse aquí.

Por otro lado, empecé a usar yasnippets en Emacs. Son cómodos, fáciles de programar, y me permiten simplificar tareas como escribir diagramas conmutativos o complejos simpliciales en pocos pasos.

Diagramas conmutativos

Ahora estoy escribiendo sobre álgebra homológica y teoría de categorías, así que la mayoría de lo que escribo usa secuencias exactas y diagramas conmutativos.

Para las secuencias exactas, por ejemplo, tengo simplemente una plantilla con yasnippet, que me deja incluirlas escribiendo complex_ y pulsando <tab>:

  # -*- mode: snippet -*-
  # name: complex
  # key: complex_
  #--
  \begin{aligned*} $1 \overset{$6}\longrightarrow 
  $2 \overset{$7}\longrightarrow 
  $3 \overset{$8}\longrightarrow 
  $4 \overset{$9}\longrightarrow 
  $5 \end{aligned*}

Para los diagramas conmutativos, la solución es un poco más compleja. El paquete tikz de Latex es muy útil para escribirlos pero tiene una sintaxis es demasiado recargada; así que existe tikz-cd, que simplifica esa sintaxis para centrarla en diagramas conmutativos. Para usarlo, hay que empezar por incluir en el archivo de configuración init.el las siguientes líneas

(add-to-list
  'org-latex-packages-alist '("" "tikz" t))

(eval-after-load "preview"
  '(add-to-list
    'preview-default-preamble
    "\\PreviewEnvironment{tikzpicture}"
    t))

que pueden modificarse y escribirse de forma análoga si queremos que Emacs use internamente otros paquetes de Latex.

Además en mi caso, tuve que cambiar el programa con el que generaba las imágenes. Parece funcionar sólo imagemagick cuando queremos usar diagramas conmutativos

     (setq org-latex-create-formula-image-program 'imagemagick)

Cabeceras en Latex

Cuando necesitamos funcionalidad adicional que ofrece Latex en bibliotecas aparte, como usar tikz-cd, podemos incluirlas en la cabecera del archivo org como:

Además, si queremos que sea funcionalidad que sólo se use en la exportación de latex pero no en la previsualización, podemos incluirla con #+latex_header_extra.

Archivos de configuración de org

Para evitar tener que repetir varias veces la misma cabecera en varios archivos, podemos usar un sólo archivo para escribir matemáticas y fraccionarlo en secciones temáticas. Cuando necesitamos tratar una sección, podemos usar la funcionalidad de narrowing de org para tratar sólo una sección.

Otra opción es la de tener un sólo archivo de configuración math.setup con reglas de la forma

y cargarlo en cada archivo org con #+SETUPFILE: math.setup.

Ejemplos

Pueden encontrarse ejemplos de uso en este repositorio con mis apuntes de matemáticas. Mi archivo de configuración de Emacs está disponible en mroman42/emacs.d.


Last edited 2020-04-25 12:12:13 by Mario Román (code).