# Manual de LaTeX/Otros/Exportar a otros formatos
## Exportación a otros formatos

Un fichero LaTeX es un documento de texto plano redactado un formato definido que permite su compilación en un documento formateado en páginas que se puede ver e imprimir. Los formatos a los que LaTeX puede compilar de forma nativa son [DVI] y [PDF].
Sin embargo, por diversos motivos, puede ser necesario generar un documento en otros formatos. Esta conversión, se realiza, normalmente, normalmente utilizando diversas herramientas orientadas a obtener la mejor versión posible del documento en función del destino que se pretenda del mismo.

### Unas consideraciones generales

Conviene tener en cuenta diversos aspectos antes de considerar herramientas específicas de conversión entre formatos.
* LaTeX y TeX fueron concebidos como herramientas para generar documentos en papel con la máxima calidad posible. No están concebidos para la generación de páginas HTML en las que el paradigma cambia. Por poner algunos ejemplos:
** En la web no existe el concepto de paginación, cabeceras y pies de página, los formatos no son cerrados sino adaptables al dispositivo, existen de manera nativa los hiperenlaces, etc.
** Por el contrario, en un documento papel existen convenciones, como las tablas de contenido, el posicionamiento de los números de página, los capítulos, los saltos de página, etc.
* Los diferentes estándares de formato tienen diferente potencia semántica. Esto es importante ya que limita mucho el tipo de conversión que se puede realizar. Por ejemplo, en LaTeX se puede apreciar que la estructura del documento se expresa mediante el uso de elementos como[\part, \chapter, \section, \subsection. En HTML o en RTF, por ejemplo, no existe una sintaxis estándar para expresar estos elementos como tal.
* Normalmente, cuando se trabaja con un documento de texto, sea el formato que sea, la edición del documento debe realizarse sobre el documento original (en su formato original). La conversión a otros formatos solamente debe realizarse para el visionado del documento en otros medios diferentes del habitual para el formato original. Por ejemplo, HTML, EPUB y PDF son formatos de visionado destinados a la web, a los lectores electrónicos y a la web y al papel, respectivamente. Sin embargo, 'docx' o LaTeX, son formatos de edición. No se debe esperar editar de forma más o menos simultánea, tanto en formato 'docx' como en formato LaTeX, sin tener que realizar mucho trabajo por duplicado.
Por todo lo anterior:
* No es esperable una conversión perfecta desde LaTeX a cualquier otro formato.
* Cuantos más paquetes específicos de LaTeX se utilicen, más probable es que se pierda parte del formato de que se dispone.
* Aunque una conversión aproximada pueda tener lugar, algunas de las herramientas de conversión existentes favorecen la extensibilidad, permitiendo definir cómo se desea determinada conversión. Esto, sin embargo, suele requerir tiempo, conocimiento y buenas dosis de paciencia.

## pandoc

[Pandoc] es la navaja suiza de conversión entre formatos de documentos de texto. Funciona mediante la conversión desde el formato origen a un versión de [Markdown] para, posteriormente, convertir desde este último al formato destino.
Este diseño modular permite mucha flexibilidad, pero supone que cualquier conversión desde un formato más expresivo que Markdown, pierda parte de la información de formato. Este es el caso de LaTeX.
Para utilizar Pandoc para convertir a LaTeX se puede utilizar el siguiente comando:
El parámetro -s es necesario para que el fichero destino sea completo (standalone) conservando la información de codificación.
Aunque realiza una buena conversión, en cuanto se utilizan estilos propios, es fácil perder mucha información de formato.
Para convertir a html se utiliza lo siguiente:
Es importante destacar que pandoc conserva de forma nativa la información de codificación de caracteres por lo que no es esperable caracteres extraños en lugar de los acentos o eñes, como sucede en otros casos. Un documento LaTeX almacenado en un fichero en utf8 conservará los acentos tanto en formato docx, como en formato html.
Pandoc es muy potente y flexible. Dispone de muchísimas opciones de configuración en función de los diferentes formatos para añadir elementos que se perderían de otro modo. Por ejemplo:
* Para algunos formatos destino, incluidos HTML y docx, se puede incluir una tabla de contenido en cada documento destino (Markdown no dispone de sintaxis para ella) simplemente incluyendo el parámetro --toc.
* Para la generación de cabeceras y pies, entre otras cosas, pandoc utiliza plantillas para cada formato destino. Dispone de unas plantillas por defecto, pero se pueden sustituir por las que se deseen. Para ello es necesario incluir --template fichero_plantilla entre los parámetros, siendo fichero_plantilla un fichero que contiene el formato que deseamos utilizar.
* El formato docx, no dispone de plantillas, sin embargo, se puede utilizar el parámetro --reference-docx fichero_de_referencia.docx que permite utilizar otro documento como referencia para generar los formatos (utilizando sus cabeceras y pies, por ejemplo).
Para ver las plantillas por defecto que usa pandoc se puede utilizar el siguiente comando pandoc -D *formato*, sustituyendo formato por el deseado. Por ejemplo:
Un último ejemplo, la conversión de LaTeX a epub:
Genera un fichero epub con tabla de contenidos. Además existen opciones para:
* Incluir metadatos del libro (autor, título, etc) con el parámetro --epub-metadata fichero.yaml.
* Incluir una imagen de portada con el parámetro --epub-cover-image.
* Incluir un formato propio con el parámetro --epub-stylesheet, que admite un fichero CSS.
En general, pandoc es una herramienta a valorar, siempre que exista la necesidad de convertir a diferentes formatos destino ya que es lo suficientemente modular para generar resultados de cierta calidad.

## LaTeX2HTML

Se trata de un conversor de LaTeX a HTML desarrollado utilizando el lenguaje de programación [Perl].
Permite generar un conjunto de páginas HTML a partir de un único documento LaTeX generando la navegación entre las páginas existentes (siguiente, anterior, arriba, raíz) y una tabla de contenidos.
Se ejecuta de la siguiente forma:
Lo que genera un directorio del mismo nombre del fichero sin la extensión, en el que aparecen tantos ficheros html como apartados tenga el documento, junto con un fichero index.html. Este fichero tiene el índice de apartados y permite navegar a cada uno de ellos, ir adelante, atrás y subir en la estructura del menú.
El principal problema, para el idioma español, que supone esta conversión, es que, por defecto, no interpreta adecuadamente el juego de caracteres del fichero fuente, que espera en codificación ascii. Por ello, no veremos bien ni acentos, ni eñes, ni otros caracteres extendidos. Para corregir esta situación necesitaremos ejecutar el comando con las siguientes opciones:
Si se desea generar un único documento HTML o limitar la profundidad de la estructura de páginas HTML, se debe utilizar la opción split.
Que permite generar un único fichero HTML en el que se encuentra el documento LaTeX completo.

## latex2rtf

Este convertidor permite la generación de ficheros RTF que se pueden abrir tanto por el editor de texto Word de Microsoft, como por otros editores como LibreOffice.
La ejecución más simple de este convertidor es:
Que traduce el fichero LaTeX a RTF conservando, normalmente, la codificación de caracteres si el documento contiene la opción \usepackage[utf8]{inputenc}. Si por algún motivo, no fuera así, sería necesario utilizar la opción '-C' especificando la codificación del fichero fuente. Esto es lo que dice la teoría, sin embargo, no este parámetro no está preparado para admitir la opción utf8 por lo que no suele ser de utilidad para resolver este problema.
En Linux existe una sencilla solución, utilizar el comando iconv para convertir el fichero original a otra codificación conocida para latex2rtf:
El comando anterior permite convertir el fichero fuente fichero.tex de codificación utf8 a cp1252, posteriormente se encamina al convertidor latex2rtf para generar el documento fichero_salida.rtf.

## TeX4ht

TeX4ht es un sistema para convertir documentos LaTeX a HTML y otros formatos. Es configurable, lo que le aporta flexibilidad, pero implica que realizar una conversión no sea inmediato.
La ejecución más simple es la siguiente:
Por defecto, htlatex se detiene cada vez que encuentra un error o un comando de algún paquete que desconoce. EL sistema modular de htlatex, en teoría, permite configurarlo para explicarle cómo debe actuar para cada elemento nuevo. Sin embargo, para una conversión rápida, bastaría con ir pulsando Enter hasta finalizar.
TeX4ht funciona a partir del fichero dvi generado por LaTeX por lo que no es posible utilizarlo completamente a partir de otros generadores como XeLaTeX.
Los pasos que realiza este sistema son los siguientes:
* Insertar en el documento LaTeX original un estilo propio tex4ht.sty y una serie de ficheros de conversión *.ht (estos últimos son los que definen qué hacer cuando aparecen los diferentes comandos).
* Compilar el documento con el comando latex para generar el fichero dvi.
* A partir de él, generar los ficheros html y otros ficheros intermedios.
* Por último, generar los ficheros con las posibles imágenes y los ficheros de estilo css.
La explicación de este proceso de conversión se puede ver en el diagrama que se encuentra siguiendo este [enlace].
Toda esta complejidad, la oculta el comando htlatex, realizando los pasos de forma automática.
En cualquier caso, este convertidor es el más complejo de aprender y utilizar de todos los presentes en este artículo. A cambio, permite un alto grado de configuración.

## LaTeXML

Este convertidor también es extensible e intenta presentar tanto la semántica del documento LaTeX original, como la presentación. Para ello, utiliza un modelo extensible que traduce de LaTeX a XML para, posteriormente, pasar a HTML (en sus diferentes sabores).
La ejecución más sencilla es la siguiente:
El primer paso convierte de LaTeX a XML. Es el paso crítico, ya que extrae la semántica, formato y contenido al formato XML intermedio. Los errores de conversión se registran en el propio XML como etiquetas ERROR. En general, estos errores provienen del desconocimiento tenga LaTeXML de los paquetes que se utilicen en el documento fuente.
El segundo paso convierte de XML a HTML. Si el fichero XML está bien generado. Este paso da lugar a un documento HTML completo con buen detalle de presentación tanto en las tablas como en las fórmulas matemáticas.
Permite también la conversión a otros formatos de HTML especificando la opción --format=(html|html5|html4|xhtml|xml)

### Bindings

LaTeXML utiliza unos ficheros denominados bindings con extensión .ltxml que son análogos a las clases o estilos de LaTeX (ficheros .cls y .sty).
Estos bindings son los que implementan la conversión de LaTeX a etiquetas XML.
Es posible escribir nuevos bindings para especificar el comportamiento que debe tener LaTeXML ante la carga de un determinado paquete o clase desconocido.
Estos bindings se deben cargar especificando la opción --preload==nombre_fichero_binding.ltxml.
Por ejemplo:
El fichero de bindings hay que generarlo siguiendo una sintaxis basada en Perl y requiere la capacidad de entender la sintaxis de LaTeX.
Idealmente el documento LaTeX que estemos generando dispondrá de macros propias personalizadas por el desarrollador del documento. Estas mismas macros deberían definirse en el fichero de bindings para definir su conversión a XML. Esto permite una aproximación sistemática a la conversión de un documento LaTeX a HTML. El inconveniente de esta aproximación es la complejidad de aprendizaje frente al absoluto control del resultado. El manual de LaTeXML se explica cómo se puede desarrollar un fichero de bindings en su capítulo [4].
En muchos casos, esta aproximación puede obviarse por una más simple. Generar un fichero CSS personalizado que se incluirá en el paso latexmlpost mediante la opción --css=fichero.css para adecuar la versión HTML a lo que se desee. Esta opción añade simplicidad a costa de pérdida semántica y pérdida de control en el formato del documento intermedio XML.

## pdf2htmlEX

pdf2htmlEX se trata de una herramienta de uso general que parte de un fichero pdf y genera un fichero HTML que conserva la estructura del original pdf. El resultado es muy aparente y permite mostrar la información formateada exactamente como si se estuviera mostrando el documento en una vista preliminar de un navegador moderno.
La ejecución del comando anterior genera un fichero fichero.html que mantiene la apariencia del fichero PDF original.
pdf2htmlEX logra esto separando del fichero PDF original, el texto y su posición original por un lado, y las páginas de fondo con imágenes, por otro. Al convertirlo a HTML genera un conjunto de imágenes que corresponden a las páginas y posiciona sobre ellas el texto, utilizando HTML, CSS y Javascript, manteniendo su ubicación original.

## Referencias

[Is LaTeX dead?], un análisis sobre las posibilidades de LaTeX para otros usos diferentes de los que fue concebido.
[Pandoc], página del proyecto.
[LaTeX2HTML], página del proyecto.
[latex2rtf], página del proyecto.
[TeX4ht], página del proyecto.
[LaTeXML], página del proyecto.
[pdf2htmlEX], página del proyecto.