sábado, 21 de marzo de 2009

HAL y las marcas (LaTeX - III)

Como sucede con HTML, también LaTeX requiere de cierto protocolo para definir aspectos básicos del documento marcado según sus convenciones y para que el experto o expertos que procesen estas marcas sepan cómo hacerlo exactamente. Por fortuna, este formulismo inicial es bastante más fácil de entender y de explicar que el de HTML. Nos limitaremos, no obstante, a comentar los aspectos más importantes de él y a confiar en que lector sabrá encontrar información más detallada en los enlaces propuestos en los primeros párrafos de este otro artículo.

La estructura de un documento LaTeX listo para su procesamiento es básicamente la siguiente:

PREÁMBULO

\begin{document}
[Nuestro texto con las marcas LaTeX]
\end{docuemnt}

Así pues, si retomamos la metáfora aplicada en la exposición de HTML, vemos que también el gabinete de LaTeX precisa que nuestro texto marcado se envíe en un sobre document y que a ese sobre le peguemos una etiqueta que contenga descripciones precisas de lo que va en él (el PREÁMBULO). Un preámbulo típico para documentos en castellano consta de los siguientes enunciados:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

Veamos qué significa cada uno de ellos:

\documentclass{article}
Define el tipo de documento que creamos. En nuestro caso un artículo.

\usepackage[spanish]{babel}
Define la lengua en la que está escrito nuestro documento.

\usepackage[T1]{fontenc}
Define el tipo de codificación de la fuente empleada por defecto. Es recomendable para lenguas que contienen, como la nuestra, caracteres acentuados.

\usepackage[utf8]{inputenc}
Define el tipo de codificación empleada al escribir el texto. En cualquier máquina moderna será UTF-8.


Más allá de los tecnicismos ---por los que hemos pasado rozando---, lo que salta a la vista en las tres últimas líneas del preámbulo es la marca \usepackage{...}. Se trata de un tipo de orden que le indica a los expertos que procesarán nuestro documento que use un determinado tipo de paquetes LaTeX y que active, en caso necesario, tales o cuales opciones de ese paquete, donde las opciones solicitadas se indican entre corchetes de acuerdo con la sintaxis \usepackage[opciones]{paquete}.

¿Pero qué es un paquete de LaTeX? Un paquete no es sino una extensión para determinados propósitos de las posibilidades básicas de LaTeX. Algunas de estas extensiones actúan sobre los engranajes de las máquinas que procesarán LaTeX y sólo deberemos ser conscientes de ellos a la hora de incluirlos en el preámbulo. Otras pueden poner a disposición del usuario nuevas marcas especializadas a las que éste puede recurrir si lo desea. Así, por citar sólo un caso particular, el paquete babel permite escribir documentos en varias lenguas (las que se indican como opciones suyas) y seleccionar una u otra lengua cuando convenga mediante, por ejemplo, la orden o marca \selectlanguage{lengua}. En el caso de nuestro ejemplo sólo utilizamos una lengua, spanish, y podemos prescindir de estas sofisticaciones. Por lo demás, el recurso a paquetes es especialmente recomendable cuando nuestro texto va a contener elementos característicos propios que requerirán de un tratamiento específico. Veremos un caso de ello en un artículo posterior.

Bien. Nos queda sólo incluir el preámbulo comentado y el envoltorio document en nuestro texto marcado con LaTeX para obtener un documento LaTeX completo listo para su procesamiento. Si seguimos la misma estrategia empleada en la generación del documento HTML a partir de nuestro texto con marcas informales, bastaría con modificar ligeramente el guión generar_html de este modo:

## --* generar_latex - 21/03/09 - átopos *--
## Genera documento LaTeX canónico a partir de un documento de texto
## marcado con mis marcas informales
SED_F=txt2latex.sed # Fichero sed: convierte mis marcas
# informales en marcas LaTeX
ORIG_F=$1 # Fichero de entrada
DEST_F=$(basename $ORIG_F .txt).tex # Fichero LaTeX de salida

tr -d '\n'< $ORIG_F \
| sed -f $SED_F
\
| awk 'BEGIN {
print "\\documentclass{article}";
print "\\usepackage[spanish]{babel}";
print "\\usepackage[T1]{fontenc}";
print "\\usepackage[utf8]{inputenc}\n";
print "\\begin{document}";

}
{ print $0; }
END {
print "\\end{document}";
}' \
> $DEST_F

Las modificaciones, aparte de las que afectan a los comentarios, son las lógicas: cambia el fichero de órdenes para sed, que ahora será el txt2latex.sed que creamos el día pasado; se añade la orden tr, y se modifica el subsiguiente sed como corresponde (también lo comentamos ayer); se modifican mutatis mutandis las líneas que imprimirá awk al principio y al final (nótese que en awk, como en sed, el literal '\' debe escaparse).

El nuevo guión, que llamaremos generar_latex recibe como argumento el fichero con nuestras etiquetas informales y produce el fichero texto_etiquetado.tex. Tras cambiarlo de modo, podemos ejecutarlo:

./generar_latex texto_etiquetado.txt

El resultado, texto_etiquetado.tex, es el esperado:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\begin{document}
\section{Navegación gráfica}
Si hubiésemos estado visitando la página con un buen navegador gráfico que disponga de la opción de guardar las páginas web como texto, tendríamos que realizar al menos dos acciones, ambas independientes:

\begin{enumerate}
\item Ir al menú <<Archivo>> del navegador y guardar como texto la página web. (Lo que además implica seleccionar un nombre de fichero y un directorio).
\item Crear en Vim una nueva ventana para editar en ella el documento que acabamos de guardar, mediante la orden :new ruta\_fichero.
\end{enumerate}

\section{Navegación desde consola}
Si navegamos con w3m, y gracias a la interacción entre las aplicaciones de consola, bastaría ejecutar una única acción desde el propio Vim, que, además, podríamos abreviar para reproducirla en situaciones semejantes. Veamos cómo.

Con w3m el proceso de convertir una página web en texto es absolutamente elemental: añadir la opción -dump. Por ejemplo:

w3m -dump http://www.w3.org/TR/html401/struct/lists.html

nos devuelve la página dada como argumento, tal cual se presenta en el navegador, pero como puro texto.

\end{document}

Si queremos ver coloreada la sintaxis de LaTeX nada mejor que echar mano del propio Vim. Se puede llamar a Vim para ver ficheros, sin intención de editarlos, con la orden view, que es un atajo de vim -R:

view texto_etiquetado.tex

La imagen siguiente muestra el resultado:




Resumen:

  • Un documento LaTeX consta de un preámbulo y un entorno document. El preámbulo incluye, como mínimo, la definición de la clase de documento (artículo, libro, carta, etc.) y, normalmente, también la solicitud de uso de paquetes. El entorno document engloba todo el texto marcado con marcas LaTeX.

  • Un paquete de LaTeX es una extensión de las posibilidades básicas de LaTeX. La inclusión de paquetes se solicita en el preámbulo del documento con la etiqueta u orden \usepackage[opciones]{paquete}, donde cada opción activa un conjunto determinado de las extensiones que el paquete proporciona. Por ejemplo, \usepackage[spanish]{babel} permite usar el paquete para el uso de múltiples lenguas babel y beneficiarse de sus extensiones para el castellano.

2 comentarios:

  1. Si alguien puede acesorarme en como convertir documentos latex en html

    Por favoe le quedaré agradecido

    Saludos

    Efrain

    ResponderEliminar
  2. Existen varias opciones. Mi recomendación es que te pases por los archivos de la lista de usuarios hispanohablantes de Tex:

    http://listserv.rediris.es/cgi-bin/wa?A0=ES-TEX

    Esta pregunta se ha formulado muchas veces. Allí encontrarás información más que suficiente para elegir la opción que más te interese.

    ResponderEliminar