Escribiendo Documentos Técnicos con Emacs

Domingo Cortés

1. Introducción

El editor de texto /emacs/ puede ser inusual para quienes sólo han usado programas en una interfaz gráfica. Hay que invertirle tiempo en aprenderlo. ¿Por qué alguien tendría que invertir tiempo en aprender a usar un programa que sólo edita texto? Porque para muchos usuarios la edición (y revisión) de textos es la principal tarea que realiza en la máquina. Escribir un correo, cambiar el nombre a un archivo, escribir un programa, implica escribir texto.

Emacs en definitiva no es para la mayoría de los usuarios. Es sólo para aquellos que:

  • Necesiten escribir mucho
  • Tengan facilidad para el uso de las computadoras
  • Sepan un poco de programación
  • Sean pacientes en el aprendizaje

Cuales son las ventajas de aprender Emacs:

  • Es gratuito
  • Funciona en todos los sistemas operativos
  • Se puede configurar casi hasta el infinito
  • Puede incrementar enormemente la eficiencia de quien lo usa

Emacs tiene modos de operación. Estos modos de operación hacer que el editor se comporte de forma distinta dependiendo de que tipo de archivo se esté editando. Hay por ejemplo, modos para editar programas en los más diversos lenguajes de programación.

Hay un modo en particular que a mi me gusta mucho: org-mode. Mas que un modo de edición es una herramienta en si misma. Casi sólo por usar esta herramienta vale la pena aprender Emacs.

Estas notas pretenden ayudar a alguien que inicia en el aprendizaje de emacs a que lo haga más rápido. Está dirigida principalmente a usuarios de Linux, en particular (k)ubuntu, pero quizá pueda ayudar a usuarios de otros sistemas operativos. En (k)ubuntu, emacs se instala con

sudo apt install emacs 

Cuando se ejecuta emacs sin un archivo de configuración, no parece ser muy interesante. Esta es la pantalla típica

2. Comandos esenciales

Hay algunas acciones que se pueden hacer con el mouse, sin embargo, no tiene mucho sentido usar emacs con el mouse. La principal razón para usar emacs es la eficiencia y usar el mouse no es muy eficiente. A continuación la combinación de teclas básicas en Emacs.

En lo que sigue C- significa la tecla de "control", M- significa la tecla "alt".

2.1. Abrir, guardar y salir

C-x C-f Abrir un archivo. Emacs pide el nombre del archivo en la parte de abajo C-x C-s Guardar un archivo C-x C-c Salir de Emacs

C-g Abortar comando (salir de problemas)

2.2. Mover cursor

En los siguientes comandos las flechas también funcionan:

C-f Mover cursor hacia adelante (forward) C-b Mover cursor hacia atrás (backwards) C-n Mover cursor a la siguiente línea C-p Mover cursor a la línea anterior

C-a Mover cursor al inicio de la línea C-e Mover cursor al final de la línea

C-v Mover cursor una pantalla abajo M-v Mover cursor una pantalla arriba

M-f Mover cursor una palabra adelante M-b Mover cursor una palabra atrás M-> Mover cursor al final del archivo M-< Moved cursor al inicio del archivo

C-u 7 C-n Mover cursor 7 líneas adelante C-u 10 C-p Mover cursor 10 líneas atrás

C-l Redibujar el texto dejando el cursor en el centro de la pantalla

2.3. Cortar y pegar

C-k Cortar texto, desde la posición del cursor hasta el final de la línea C-spc Inicia el marcado de bloque de texto, el bloque se agranda con las teclas de movimiento C-W Corta el bloque M-W Copia el bloque C-y Pegar el texto

2.4. Buscar y reemplazar

C-s Búsqueda incremental del cursor hacia adelante, el cursor se mueve conforme se teclea, dar enter para aceptar

C-s enter enter para buscar de nuevo el mismo patrón

C-r Búsqueda incremental del cursor hacia atrás, el cursor se mueve conforme se teclea, dar enter para aceptar

Inicie Emacs, abra archivos, edítelos y guárdelos. Es decir utilice Emacs para editar algunos archivos de texto.

Con los comandos anteriores se puede usar emacs como otro editor cualquiera. Pero hay mas, mucho mas en Emacs.

3. El archivo de configuración de emacs: ~/.emacs.d/init.el

Una de las características notables de Emacs es que tiene muchísimas opciones de configuración. Cuando Emacs inicia busca un archivo de configuración y ejecuta los comandos que hay en ese archivo. En Linux el archivo de configuración que Emacs busca es

~/.emacs.d/init.el

Muchos usuarios de Emacs ponen en este archivo, todos los comandos de configuración. En lugar de ello nosotros usaremos un modo de Emacs conocido como org-mode o simplemente Org para crear de forma indirecta un archivo de configuración.

Para ello crearemos el archivo init.el en el folder ~/.emacs.d y pondremos las dos únicas líneas:

(when (file-readable-p "~/.emacs.d/config.org")
  (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))

Las líneas anteriores le indican a emacs que localice el archivo ~/.emacs.d/config.org y que genere a partir de este archivo el archivo de configuración.

A partir de ahora pondremos en ~/.emacs.d/config.org las instrucciones para configurar emacs. Para iniciar el aprendizaje de configuración de emacs cree el archivo config.org en el folder ~/.emacs.d y ponga lo siguiente:

#+BEGIN_SRC emacs-lisp
  (tool-bar-mode -1)    ; no tool-bar
  (menu-bar-mode -1)    ; no menu
#+END_SRC

Inicie Emacs. Si todo va bien verá que ahora la barra de herramientas y el menú han desaparecido. Lo que pasó fue lo siguiente:

  • Al iniciar Emacs busca el archivo init.el en el folder ~/.emacs.d
  • En el archivo init.el Emacs encuentra las instrucciones que le indican que busque el archivo config.org (en el mismo folder) y a que a partir de este archivo genere un archivo de configuración.
  • Emacs escanea el archivo config.org y busca las líneas que están entre entre

      #+BEGIN_SRC emacs-lisp
    
      #+END_SRC
    
  • Emacs extrae estás líneas y las pone en el archivo config.el
  • Emacs ejecuta las instrucciones que están en config.el

Puede comprobar esto examinando el folder ~/.emacs.d, podrá observar que ahora hay un nuevo archivo config.el que contiene las líneas

  (tool-bar-mode -1)    ; no tool-bar
  (menu-bar-mode -1)    ; no menu

Estas dos líneas fueron puestas ahí por Emacs, a partir del archivo config.org. Pudimos haber puesto estas líneas directamente en el archivo init.el y así Emacs las hubiera interpretado directamente ahorrandose el tener que examinar el archivo config.org y generar el archivo config.el. Sin embargo, como en el archivo config.org podemos poner texto además de código se tienen las siguientes ventajas:

  • Se puede documentar el código mucho más detalladamente.
  • Se puede generar un pdf o html para publicarlo.
  • Aunque el documento sea largo, con las funciones de org-mode se puede editar fácilmente.

Se tienen también algunas desventajas:

  • el inicio de Emacs es más lento.
  • Puede ser más difícil encontrar errores en el código de configuración

Es importante volver a señalar que en config.org las instrucciones de configuración de Emacs, esto es el código que Emacs ejecutará al iniciar se deben poner entre las líneas:

#+BEGIN_SRC emacs-lisp

#+END_SRC

En el resto del documento, sólo se mencionará el código de configuración, sin mencionar las líneas anteriores. El lector debe estar atento de poner el código de configuración entre dichas líneas, de lo contrario Emacs no lo tendrá en cuenta a la hora de crear el archivo config.el

4. Opciones comunes de configuración

En la sección anterior se vio como eliminar la barra de herramientas y el menú de Emacs. Esto es algo que la mayoría de los usuarios de Emacs hace después de un tiempo de usar el programa, pues la mayoría de los usuarios aprende Emacs para ganar eficiencia, esto generalmente implica evitar el uso del mouse. El menú y la barra de herramientas requieren el uso del mouse y no son necesarios para usar Emacs, por lo que una vez que los usuarios aprenden lo básico de Emacs, generalmente terminan deshabilitandolos.

Otras opciones de configuración que muchos usuarios usan se muestran a continuación.

  ;; Opciones sencillas pero que mejoran mucho la experiencia de uso
  (setq inhibit-startup-message t)    ; no mensaje de inicio
  (tool-bar-mode -1)                  ; no tool-bar
  (menu-bar-mode -1)                  ; no menu
  (scroll-bar-mode -1)                ; no scroll-bar-mode
  (setq initial-scratch-message nil)  ; no mensaje en el buffer scratch
  (setq ring-bell-function 'ignore) ; Evita que suene en los errores
  (defalias 'yes-or-no-p 'y-or-n-p) ; contestar 'y' ('n') en lugar de 'yes'('no')

  (setq tab-stop-list '(3 6 9 12 15 18 21)) ; Determina donde paran los tabs
  (setq require-final-newline t)    ; Inserta un \n al final de un archivo
  (setq-default indent-tabs-mode nil) ; Sustituye tabs por espacios
  (mouse-wheel-mode 1)              ; habilita el uso de la rueda
  (setq mouse-wheel-follow-mouse t) ; la rueda del mouse mueve el buffer donde está el mouse

  ;; guarda los backups de en el directorio '~/.emacs.backups'
  (setq backup-directory-alist
        '(("." . "~/.emacs.backups")))

  ;; Atajos para cambiar el tamaño de font
  (define-key global-map (kbd "C-+") 'text-scale-increase)
  (define-key global-map (kbd "C-=") 'text-scale-increase)
  (define-key global-map (kbd "C--") 'text-scale-decrease)
  (define-key global-map (kbd "<C-kp-add>") 'text-scale-increase)
  (define-key global-map (kbd "<C-kp-subtract>") 'text-scale-decrease)

  ;; autofill mode

  (add-hook 'text-mode-hook 'turn-on-auto-fill) 

La última línea hace que al estar editando texto se corten las líneas largas de forma automática. Esto es común porque las líneas cortas se leen mejor que líneas largas.

En la actualidad es usar el formato 'utf8' para todos los archivos de texto. Esto permite usar caracteres de distintos idiomas en un archivo. Para que Emacs use este formato en todo lugar, se agregan las siguientes líneas:

  (setq locale-coding-system 'utf-8)
  (setq-default buffer-file-coding-system 'utf-8)
  (set-buffer-file-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8)
  (set-keyboard-coding-system 'utf-8)
  (set-selection-coding-system 'utf-8)
  (prefer-coding-system 'utf-8)
  (setenv "LC_COLLATE" "C")
  (setenv "LANG" "C")

5. Emacs es un interprete de elisp

Una de los aspectos de Emacs que es conveniente conocer para usarlo eficientemente es que esencialmente es un interprete de un lenguaje de programación conocido como emacs-lisp, usualmente abreviado elisp. ¿Cómo? ¿Emacs no es un editor de texto? Ummh… Sí y no. Emacs es un interprete de elisp que cuando se carga, ya tiene incorporadas muchas funciones convenientes para introducir texto. Esta particularidad del interprete es lo que hace a Emacs un editor de texto. Pero es mucho más que eso. O mejor dicho, Emacs es un interprete que se puede usar para editar texto pero también para varias otras cosas:

  • Navegador de archivos (dired)
  • Gestión de proyectos (org)
  • Cliente de correo electrónico (gnus)
  • Jugar tetris

Para ejecutar una función se usa 'M-x' /nombre-de-la-funcion/. Por ejemplo para jugar tetris teclee M-x tetris. Note que al teclear M-x Emacs cambia el cursor a la parte inferior de la pantalla, esta parte se llama minibufer ahí se intruducen la función a ejecutar y cualquier otro dato necesario. Arriba del minibufer está la línea de modo (mode line). En esta línea se despliega información del archivo que se está editando.

En Emacs, todo lo que se hace implica correr una función. Al teclear una letra se ejecuta una función, al abrir un archivo se corre una función, etc. Por ejemplo teclee M-x insert-char y después 65 verá que se insertó una letra en el archivo. La función inser-char se corre cada vez que se agregra un carácter al archivo.

A propósito, cuando se ejecuta M-x insert-char se muestra entre paréntesis (C-x 8 RET); eso indica que la función se puede correr con este atajo. Haga la prueba.

Emacs incorpora muchas funciones. La gran mayoría de los usuarios sólo usa un subconjunto de las mismas. Cada usuario puede asignar el atajo (shortcut) que prefiera a las funciones que más usa. Además un mismo atajo puede hacer cosas diferentes dependiendo del archivo que se esté editando.

Como Emacs es un interprete de elisp, se puede extender elisp y cada extensión que se haga pasa a ser automáticamente parte de Emacs. Así, a través del tiempo se ha ampliado y se sigue ampliando Emacs. En la actualidad Emacs es un programa bastante amplio y flexible. Sin embargo, no es necesario ni conveniente aprender todo a la vez. Se pueden aprender rápidamente las cuestiones básicas y después ir aprendiendo una por una las partes de Emacs que nos interesa.

6. Terminología de Emacs :noexport

  • Buffers
  • Windows
  • Frames
  • Linea de estado
  • Linea de comandos

7. Extendiendo Emacs :noexport

hablar de los paquetes y de los que tienen que ser descargados

7.1. VIM

8. Org

Org es uno de los aspectos más interesantes de Emacs. Muchos usuarios usan Emacs sólo por usar esta herramienta. Es tan flexible y amplia que sólo explicar sus posibilidades tomaría un libro.

Emas tiene modos de operación o simplemente modos (modes). Esto el permite adaptarse al tipo de archivo que se está editando. Se puede indicar a Emas que modo se quiere usar, aunque frecuentemente se detecta que modo es conveniente a partir de la extensión (o contenido) del archivo. Así, cuando se abre un archivo con terminación '.tex' se habilita el modo latex; cuando se abre uno con '.c' se habilita el modo de edición en lenguaje C, etc. Esto hace que Emacs pueda adaptarse para editar distintos tipos de archivos.

Hay modos que realizan cambios mayores al funcionamiento de Emacs (major mode) y modos que realizan cambios menores (minor modes). Generalmente pueden estar habilitados muchos modos menores pero sólo un modo mayor.

Cuando se abre un archivo con terminación '.org' Emacs habilita el Org. Con Org se puede

  • Gestionar proyectos
  • Hacer programación literal
  • Escribir libros
  • Escribir artículos científicos
  • Hacer presentaciones
  • Etc.

A continuación se explora como hacer alguna de estás cosas en Org

8.1. Estructura de un documento en Org

Un documento de Org es un archivo de texto simple con terminación '.org'. Un archivo '.org' tiene marcas que son interpretadas por Org para que el archivo se vea bonito en pantalla. Al editar un archivo con Org estas marcas son muy fáciles de introducir. En cierto sentido se podría decir que Org es un lenguaje de marcas como el html y otros que hay por ahí, pero es mucho más que eso.

8.2. Marcado básico y edición estructurada

Los encabezados empiezan con '*'

* Esto encabeza una sección: los encabezados empiezan con '*'
** Encabezado de subsección: empiezan con '**'
***  Encabezado de sub-subsección: empiezan con '***' 

Se pueden introducir texto en ∗negritas∗, /italicas/, _Subrayado_, +rayado+,

Se una línea empieza con guión '-' o suma '+' entonces se reconoce como una lista. La lista termina cuando se encuentra un guión con diferente sangría.

- Item 1 primario
  - item 1 secundario 
    1. item a
    2. item b
  - item 2 secundario 
    1. item a
    2. item b
- Item 2 primario
  - item 3 secundario 
    1. item a
    2. item b
  - item 4 secundario 
    1. item a
    2. item b

Produce:

  • Item 1 primario
    • item 1 secundario
      1. item a
      2. item b
    • item 2 secundario
      1. item a
      2. item b
  • Item 2 primario
    • item 3 secundario
      1. item a
      2. item b
    • item 4 secundario
      1. item a
      2. item b

Un documento en org tiene la estructura de un arbol con los encabezados como nodos. Org puede ocultar/mostrar un nodo y sus hijos con el uso de una sola tecla: "Tab". De esta manera se controla la visibilidad de distintas partes del documento; así Org simplifica la edición de documentos complejos.

Se pueden cambiar la estructura de un documento de manera rápida y sencilla:

  • 'M-←' Incrementa al nivel de un encabezado
  • 'M- →' Decrementa el nivel de un encabezado
  • 'M-↓' Mueve un encabezado y su contenido hacia abajo
  • 'M-↑' Mueve un encabezado y su contenido hacia arriba

Estos comandos no sólo funcionan con encabezados, también funcionan con otros bloques de texto como párrafos, listas etc.

8.3. Exportar Org a otros formatos

Org puede exportar a otros formatos. Si se ejecuta (M-x) org-export-dispatch se abre un menú con las opciones. Se abre un menú con varias opciones entre las cuales se encuentra:

  • Ascii
  • Odt: El formato de libre office
  • Html
  • Latex
  • Pdf (via Latex)

El pdf es generado via Latex por lo que Latex debe estar instalado.

Normalmente la función org-export-dispatch está asociada a la secuencia 'C-c C-e'

8.4. El preámbulo

Se puede especificar como será exportado el documento. Por ejemplo en el caso de Latex, se puede especificar el tipo de documento (la clase), el tamaño y tipo de fuente, el idioma etc. Haciendo la analogía con Latex, yo le llamo el preámbulo, sin embargo, en Org, estas opciones pueden estar en cualquier lugar del documento.

Yo pongo al inicio las siguientes líneas

#+TITLE: Titulo del documento
#+SUBTITLE: Un subtítulo

#+AUTHOR: Juan Pérez
#+EMAIL: correo.electronico@gmail.com

#+DATE: \today

que se explican por si mismas.

Al final en una sección etiquetada como :noexport: pongo las opciones de exportación separadas en tres subsecciones. Los encabezados de secciones pueden llevar etiquetas. Una etiqueta no es más que una cadena con ':' al inicio y al final. Las etiquetas tienen varios usos en Org. La etiqueta :noexport: en un encabezado le dice a Org que esa sección y sus hijos no se exportarán.

Para iniciar la sección de opciones de exportación escribo literalmente:

* Opciones de exportación                      :noexport:

Dento de esta sección hay tres subsecciones:

  • Las opciones generales. Estas opciones están explicadas en el manual de Org.
** Opciones generales

#+OPTIONS: ':nil *:t -:t ::t <:t H:4 \n:nil ^:t arch:headline
#+OPTIONS: author:nil broken-links:nil c:nil creator:nil
#+OPTIONS: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t
#+OPTIONS: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+OPTIONS: timestamp:t title:t toc:nil todo:t |:t
#+LANGUAGE: sp
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
  • Las opciones de LaTeX. Org pasa estas opciones al compilador LaTeX. Org genera un pdf via LaTeX. Es decir primero genera el LaTeX y luego con PdfLatex genera el pdf.
** Opciones de LaTeX  
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [letterpaper, 11pt]

#+LATEX_HEADER: \usepackage{amssymb}
#+LATEX_HEADER: \usepackage{siunitx}
#+LATEX_HEADER: \usepackage[margin=1in]{geometry}
#+LATEX_HEADER: \usepackage[spanish,mexico]{babel}
#+LATEX_HEADER: \usepackage{lmodern}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \usepackage{xcolor}
#+LATEX_HEADER: \hypersetup{colorlinks, linkcolor={red!50!black}, citecolor={blue!50!black}, urlcolor={blue!80!black}}

,# +LATEX: \tableofcontents
,# +LATEX: \listoftables
,# +LATEX: \listoffigures

#+LATEX_HEADER: \newcommand{\N}{\mathbb{N}}
#+LATEX_HEADER: \newcommand{\Z}{\mathbb{Z}}
#+LATEX_HEADER: \newcommand{\Q}{\mathbb{Q}}
#+LATEX_HEADER: \newcommand{\R}{\mathbb{R}}

#+LATEX_COMPILER: pdflatex
  • Las opciones de html. Org puede exportar a html, para este efecto se pueden adecuar varias opciones. Entre ellas la hoja de estilo (css). En la red hay varias hojas de estilo para Org. Por ejemplo: Solarized. En las opciones se usa como hoja de estilo el archivo org.css que debe encontrarse en el mismo folder que el html generado.
**  Opciones de html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="org.css"/>
#+OPTIONS: html-link-use-abs-url:nil html-postamble:auto
#+OPTIONS: html-preamble:t html-scripts:t html-style:t
#+OPTIONS: html5-fancy:nil tex:t
#+HTML_DOCTYPE: xhtml-strict
#+HTML_CONTAINER: div
#+DESCRIPTION:
#+KEYWORDS:
#+HTML_LINK_HOME:
#+HTML_LINK_UP:
#+HTML_MATHJAX:
#+HTML_HEAD:
#+HTML_HEAD_EXTRA:
#+SUBTITLE:
#+INFOJS_OPT:
#+LATEX_HEADER:

9. Escribiendo documentos técnicos con Org

Se pueden escribir documentos técnicos en Org; a continuación se explica como

9.1. Enlaces a sitios externos

Es muy sencillo poner un enlace (link) a un sitio externo en un documento de Org. La sintaxis es [[direccion.de.la.url][Descripción]]. El código [[https://orgmode.org/][Sitio de Org]] produce el link Sitio de Org.

Esta sintaxis se usa también para referirse a elementos del propio documento como figuras, tablas, secciones, etc. En estos casos no se usa la parte de la descripción.

Cuando se introduce [[un-link]] Org no muestra los corchetes, por lo que puede ser confuso cambiarlo después. Para editar un link ponga el cursor en el link y teclee C-c C-l.

9.2. Figuras

El siguiente bloque ejemplifica un caso típico para introducir una figura.

  • La línea que inicia con #+caption se explica por si sola.
  • La línea #+NAME: establece un nombre para la figura. Ese nombre se utiliza para referirse a la figura.
  • Las lineas #+ATTR_HTML: y #+ATTR_LATEX: se refieren a los atributos que la figura tendrá si se exporta a Html o Latex; en este caso se establece un ancho de 500 pixeles en Html y de 4 pulgadas en Latex. Note que no se podría establecer la medida en pulgadas si se exporta a Html.
  • La línea [[./fig/ejemplo.png]] indica que ahí va la figura llamada 'ejemplo.png' que está en el subfolder 'fig'. En Org varios elementos se refieren con la sintaxis [[link-al-elemento]]. Aquí esta sintaxis se usa para incluir la figura en el documento.
#+CAPTION: Figura de ejemplo 
#+NAME: fig:ejemplo
#+ATTR_HTML: :width 500px
#+ATTR_LATEX: :width 4.0in
[[./fig/ejemplo.png]]

El bloque anterior da como resultado:

ejemplo.png

Figure 1: Figura de ejemplo

Para referirse a la figura se usa la misma sintaxis de [[link-al-elemento]], pero ahora con el nombre de la figura; es decir el texto 'vease [[fig:ejemplo]]' da como resultado 'vease 1'.

9.3. Tablas

Org puede editar tablas simples de manera sencilla. Consulte Tablas para información detallada. El funcionamiento básico es como sigue:

  • Cualquier línea que después de 0 o más espacios en blanco, seguido de | se considera el inicio de una tabla.
  • El carácter | también se usa para separar las columnas.
  • Cualquier línea que empieza con |- se considera como una línea horizontal.
  • Los renglones antes de la primer línea horizontal se consideran encabezados.
  • El número de espacios en blanco antes del | determinan el identado de la tabla.
  • Cada vez que se teclea Tab, Enter o C-c C-c dentro de la tabla, ésta actualiza el ancho de las columnas para que los datos se vean bien.
  • Tab además mueve el cursor al siguiente campo y Enter introduce una nueva fila.
  • Si se teclea C-c seguido de Enter se introduce una linea y una nueva fila. manera automática para .

En Org una tabla se despliega así.

  | mes | día |  año |
  |-----+-----+------|
  |  12 |  23 | 2017 |
  |-----+-----+------|

Pero al exportarse se ve así

mes día año
12 23 2017

Para poder referirse a una tabla hay ponerle un nombre con #+NAME: nombre y titulo con #+CAPTION: Titulo de la tabla. El nombre permite referirnos a la tabla. El bloque

#+CAPTION:  Tabla de ejemplo
#+NAME: tab:ejemplo
  | Apellido paterno | Apellido materno | Nombre |
  |------------------+------------------+--------|
  | Pérez            | Hernández        | Juan   |
  |------------------+------------------+--------|

da como resultado

Table 1: Tabla de Ejemplo
Apellido paterno Apellido materno Nombre
Pérez Hernández Juan

Ahora nos podemos referir a la tabla anterior usando [[tab:ejemplo]] que resulta en una referencia a la tabla 1.

9.4. Expresiones matemáticas

Se pueden introducir fórmulas en un documento de Org de manera casi igual a Latex. Org es bastante flexible en este aspecto, aunque aún hay cosas que se pueden en LaTeX pero no en Org.

9.4.1. Expresiones como parte una linea de texto (inline equations)

Para introducir expresiones en la misma linea de texto como en latex se usa \( \) o $ $. El uso de $ $ hace los documentos más legibles, sin embargo a veces hay situaciones donde org se puede confudir porque el signo $ también podría ser parte del texto. Como ejemplo, se tiene que \(a^{2}+b^{2}=c^{2}\) produce \(a^{2}+b^{2}=c^{2}\); de la misma manera $a_{1}^{2}$ resulta en \(a_{1}^{2}\).

9.4.2. Expresiones en su propia linea (Displayed equations)

Las expresiones matemáticas que ocupan una o más líneas (displayed equations) también se escriben como en Latex. En Org se puede usar \label{nombre} y después citar las expresiones con \eqref{nombre}.

  \begin{align}
    \dot z_1 &= \frac{-z_2}{L} + \frac{v_{in}}{L}d \label{eq:a} \\
    \dot z_2 &= \frac{z_1}{C} - \frac{z_2}{RC}, \qquad d \in [0,1] \label{eq:b}
  \end{align}

Produce

\begin{align} \dot z_1 &= \frac{-z_2}{L} + \frac{v_{in}}{L}d \label{eq:a} \\ \dot z_2 &= \frac{z_1}{C} - \frac{z_2}{RC}, \qquad d \in [0,1] \label{eq:b} \end{align}

Estas ecuaciones se pueden referir como la esxpresión \eqref{eq:a} y \eqref{eq:b} para producir \eqref{eq:a} y \eqref{eq:b}.

9.4.3. Referencia a ecuaciones

También se pueponer #+NAME: nombre antes de la expresión para nombrarla y referirnos después a ella como si fuera un link. Por ejemplo si se escribe

#+NAME: eq:pitagoras
\begin{equation}
c^{2} = a^{2} + b^{2}
\end{equation}

se obtiene

\begin{equation} \label{org6de629e} c^{2} = a^{2} + b^{2} \end{equation}

y podemos referirnos a la expresión como ([[eq:pitagoras]]) que da como resultado (\eqref{org6de629e})

9.5. Referencias a encabezados (secciones)

Los encabezados de Org se exportan como secciones. Para referirse a ellas dentro del documento se puede agregar inmediatamente después del encabezado una etiqueta de la forma <<secxx>> y despues referirse a la sección como [[secxx]]. Así se creo la referencia a la sección 1.

También es posible referirse a la sección usando el propio texto de la sección. Por ejemplo si una sección se llama * Introducción se puede referirse a la misma con [[* Introducción]]. Así se creó la siguiente referencia a la sección 1

9.6. Bloques de código

Para introducir un bloque de código se utiliza la sintaxis

#+NAME: <<nombre>>
#+BEGIN_SRC <<lengjuaje>> 
<<linea 1 del código>>
...
<<linea n del código>>
#+END_SRC

donde <<nombre>> es un nombre con que podemos referirnos al bloque y <<lenguaje>> es el lenguaje en el que está el bloque. El siguiente ejemplo está en lenguaje C

#+NAME: cod:hw 
#+BEGIN_SRC C
    #include <stdio.h>
    int main(int argc, char *argv[]) {
         printf("hello world\n");
         return 0;}
#+END_SRC

y produce

#include <stdio.h>
int main(int argc, char *argv[]) {
  printf("hello world\n");
  return 0;}

Nos podemos referir al código con [[cod:hw]] que resulta en el listado 1.

A mi me gusta escribir los documentos de tal manera que se evite referirse al codigo después. En este caso +NAME: y #+CAPTION: no son necesarios.

Observe que Org produce código con colores. Org reconoce y colorea la sintaxis de muchos lenguajes, pero hay que especificar qué lenguajes se usarán cuando Emacs inicia.

Org puede hacer mucho más con los bloques de código que lo expuesto aquí. Explorar estas capacidades está fuera del alcance de este documento.

9.7. Notas al pie

Para crear una nota al pie se usa la sintaxis [fn:<etiqueta>: Texto de la nota], donde <etiqueta> es un nombre que puede usarse para referirse nuevamente a la nota. Para referirse de nuevo a la nota dentro del texto se usa [fn:<etiqueta> Texto donde se cita a la nota].

Note que cuando se crea la nota, se ponen dos puntos : antes y después de la etiqueta, mientras que cuando se cita nuevamente los dos puntos solo van antes de etiqueta.

Se pueden definir notas al pie sin asignarle una etiqueta con la siguiente sintaxis [fn:: Texto de la nota]. En este caso no nos podremos referir a esa nota después. El resto de esta subsección explica el uso de las notas al pie. El texto se creó utilizando la sintaxis explicada.

Cuando en un texto se explica una idea se deben evitar1 elementos innecesarios. Una nota que sólos se citará una vez no necesita nombre2. La nota con nombre se puede citar de nuevo1.

9.8. Bibliografía

Insertar citas a referencias bibliográficas es un poco más complicado que con las figuras y tablas. Entre otras cosas porque además del documento Org se requiere un documento adicional donde estén las referencias. Generalmente éste es un documento bibtex (.bib).

A continuación se describen algunas opciones para hacer documentos con referencias en Org, pero antes es necesario explicar como se puede ejecutar bibtex desde Org para que las referencias puedan ser incluidas.

9.8.1. Ejecutando bibtex como parte del proceso para generar el PDF

Para generar un pdf a partir de un documento Latex por lo general hay que compilar tres veces el documento para que se calculen todas las referencias cruzadas (numeros de secciones, tablas, figuras, etc.). Cuando el documento tiene referencias, además hay que correr bibtex. Org sabe que procesos tiene que ejecutar para generar el pdf mediante la variable org-latex-pdf-proccess. Esta variable se puede modificar para incluir bibtex. Una manera de hacerlo es mediante las siguientes líneas:

(setq org-latex-pdf-process
      '("pdflatex --shell-escape -interaction nonstopmode -output-directory %o %f"
        "bibtex %b"
        "pdflatex --shell-escape -interaction nonstopmode -output-directory %o %f"
        "pdflatex --shell-escape -interaction nonstopmode -output-directory %o %f"))

9.8.2. Cómo referenciar si sólo se quiere exportar a PDF

Como Org reconoce comandos de latex se pueden usar las siguientes líneas en un archivo org:

\bibliographystyle{plain}
\bibliography{ref}

Estas líneas indican que el estilo que se usará para citar es plain y que el archivo donde está la bibliografía es ref.bib.

Despues de agregar estas líneas las citas se introducen con \cite{<bibtag>}, donde <bibtag> es la etiqueta de la referencia que queremos citar.

Note que con esta forma no se puede exportar a HTML

9.8.3. Cómo referenciar si también se quiere exportar a HTML

Para exportar a HTML se requieren varios programas

El programa ox-bibtex no es parte central de Org sino una contribución contrib. Estos son programas que expanden las capacidades de org sin ser parte propiamente de Org. ox-bibtex habilita que un archivo org con bibliografía se pueda exportar a PDF y HTML. No esta en elpa/melpa ni es parte de Org, por ello tiene que ser descargado y puesto en un folder donde emacs pueda cargarlo al inicio. Para cargarlo se agrega a .emacs.d la línea

(require 'ox-bibtex)

Cuando se usa ox-bibtex, en lugar de usar las líneas

\bibliographystyle{plain}
\bibliography{ref}

para especificar estilo y archivo bibtex, se usa la linea

#+BIBLIOGRAPHY: ref plain limit:t

que especifica lo mismo. La opción limit:t indica a ox-bibtex que al exportar a html se limite a exportar sólo las referencias citadas en el documento. Sin esta opción se incluirían todas la referencias incluidas en el archivo bibtex.

Para exportar a html, ox-bibtex se apoya en bib2html. Éste es un programa independiente que convierte un archivo bibtex a html. bib2html está hecho en ocaml, se puede bajar el código fuente de bib2html-src. Para usarlo es necesario compilarlo, esto incluye instalar ocaml en el sistema. Las instrucciones de compilación e instalación están en el mismo sitio.

Una vez instalado bib2html, ox-bibtex ya puede exportar archivos de Org a html con bibliografías.

9.8.4. Buscando etiquetas de referencias automaticamente.

Cuando se quiere insertar una referencia, puede ser tedioso localizar la etiqueta correpondiente en el archivo .bib. El programa Reftex puede ayudar en esta tarea. Este progrma es parte de Auctex, por lo que no se tiene que descargar. Se puede invocar ejecutando la instrucción (M-x) org-reftex-citation, usualmente tiene asignada la secuencia C-c C-x [. El comando org-reftex-citation busca la línea que inicie con #+BIBLIOGRAPHY: dentro del archivo Org y a partir de esta linea sabe cual el el archivo bib donde debe buscar; llama a reftex y reftex tiene varias formas de buscar la referencia que se desea. Consulte el manual de Reftex para mayor información.

Otro programa que puede ser útil para localizar la etiqueta de la referencia que se quiere insertar es ivy-bibtex. Hasta ahora no lo he usado.

9.8.5. El programa Org-ref

El programa Org-ref va mucho más allá de la ayuda para insertar referecias; además automatiza muchas cosas necesarias para la escritura de artículos y manejo de referencias. Al parecer es muy completo, pero no lo he utilizado hasta ahora.

Footnotes:

1

Una nota al pie se usa cuando se quiere aclarar algo o extender la información que se presenta en el texto, pero la información adicional no es necesaria para entender la idea que se quiere trasmitir.

2

Ej. Nota sin nombre, no se puede citar de nuevo

Date: Julio de 2024

Author: Domingo Cortés

Validate