Permíteme que antes defina qué es LaTeX y cuales son sus objetivos
principales. LaTeX es un enorme añadido para el sistema de formateado
tipográfico TeX desarrollado por el prof. Donald E. Knuth. Si no
somos demasiado "tiquismiquis", cuando decimos "Sistema LaTeX" o "LaTeX" queremos decir
"TeX con todas las macros de LaTeX". LaTeX fue escrito por Leslie Lamport, que
veía TeX como una herramienta muy potente pero demasiado difícil para el uso
diario. Por ello contruyó LaTeX inspirandose en el sistema Scribe. Scribe ponía
su énfasis en la estructura lógica de un documento en vez de en el formato
físico. (Aquellos lectores acostumbrados a HTML lo entenderán comparnado la
marca <em> que es un tag lógico frente a
<i> que es el equivalente en marcado físico.
LaTeX -- como TeX -- permite a un usuario normal de ordenador formatear documentos con una calidad de producción. Se intentó que un autor de LaTeX escriba artículos e incluso libros en su propio ordenador, después vaya a la imprenta con un diskette y obtenga el documento impreso en una impresora fotomecánica de alta resolución, y finalmente tener un libro (... enviar el libro a todas las librerías del cuadrante Alfa, obtener millones de la venta y 2 años después ganar el premio Pulitzer Intergaláctico. -- De acuerdo, esto es un poquito exagerado).
En las próximas secciones haré una breve introcción a LaTeX, pero me gustaría recomendar la "No Tan Corta Introducción a LaTeX" (Not So Short Introduction to LaTeX en el original) a todo aquel que quiera aprender LaTeX. El documento está disponible para descargar en la red. Busca en "Otras Lecturas" para más detalles.
LaTeX está instalado en la mayoría de las distribución Linux actuales. Puedes comprobar si está disponible en tu máquina tecleando
latex --version
en la línea de comandos. Mi sistema responde con
TeX (Web2C 7.3.1) 3.14159
kpathsea version 3.3.1
Copyright (C) 1999 D.E. Knuth.
Kpathsea is copyright (C) 1999 Free Software Foundation, Inc.
There is NO warranty. Redistribution of this software is
covered by the terms of both the TeX copyright and
the GNU General Public License.
For more information about these matters, see the files
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
Kpathsea written by Karl Berry and others.
A continuación muestro un ejemplo muy corto pero completo de un documento LaTeX:
\documentclass{article}
% preámbulo
\pagestyle{empty}
\begin{document}
% cuerpo
Aquí viene el texto
\end{document}
Cada documento LaTeX consiste en un preámbulo y en un cuerpo. El preámbulo va
desde la definición del tipo de documento,
\documentclass[options]{class},
hasta (sin incluirlo) \begin{document}. El cuerpo es todo lo que va
desde \begin{document} hasta \end{document}.
El preámbulo del ejemplo tan sólo incluye un comando,
\pagestyle{empty}, que le ordena a LaTeX que ignore toda las
decoraciones de la página como cabeceras o número de páginas. Los signos de
porcentaje sirven para introducir comentarios, hasta el final de la línea.
Si aplicamos estas sencillas reglas en las 3 diferencias versiones de los 2 párrafos de abajo, veremos que se formatearán de la misma forma. He añadido algunos números de línea al principio de cada uno para señalar las líneas vacias que separan los párrafos. Los números no forman parte del texto.
1 Soy una frase corta en el primer párrafo.
2
3 Soy la única frase del segundo párrafo.
1 Soy una frase corta
2 en el primer párrafo.
3
4 Soy la
5 única frase
6 del segundo
7 párrafo.
1 Soy una frase corta en el primer párrafo.
2
3
4 Soy la única
5 frase del
6 segundo párrafo.
He recogido los carácteres especiales más importantes además de como insertarlos en un texto.
\dots" o
"\/".
Advertir que "\\" no inserta una barra invertida en el texto
como muchos programadores de C pensarían. la secuencia "\\"
inserta un salto de línea, para introeducir una barra invertida tendremos que
teclear "$\backslash$". Para complicar más las cosas,
"\ " -- una barra invertida seguida de espacio -- ¡también
es un comando! Lo que hace este último comando es insertar un espacio de
control, un espacio (más precisamente: exactamente 1 espacio) que nunca será
eliminado como los espacios normales, como se explica en la sección "Párrafos".
Si necesitas represntar las llaves, tan sólo tienes que hacerlo predecer con
la barra invertida como en "\{"" and "\}".
Los comentarios llegan hasta el final de línea, incluyendo el carácter de salto de línea. De esta forma los comentarios en LaTeX se distinguen de otros comentarios de una sóla línea en los lenguajes de programación, ya que los lenguajes de programación no incluyen el salto de línea en el comentario. Para el usuario esto significa que puede crear una nueva línea terminando com un comentario.
Hessenberg-%
Triangular % <- Observad el espacio justo después del signo %
Reduction
equivale a
Hessenberg-Triangular Reduction
Si queremos representar el signo de porcentaje usaremos
"\%".
La secuencia math inserta el formateo en modo matemático. Si
quieres obtener un signo dolar, escápalo usando "\$".
La siguiente tabla resume todos los carácteres ASCII que son tratados de una
forma especial por LaTeX. La columna de la derecha muestra una o más de las
equivalencias para conseguir insertar el carácter ASCII en el texto. Como puede
adivinarse al ver las entradas para el acento circunflejo (^) y el virgulilla
(~) \charnumero_de_código inserta el carácter ASCII con el
número numero_de_código en el documento.
Carácteres ASCII con un significado especial para LaTeX. La columna de la derecha contienen las caderans (en LaTeX) que producen los carácteres ASCII de la columna de enmedio.
| Nombre | ASCII | LaTeX |
|---|---|---|
| almohadilla | # |
\# |
| dólar | $ |
\$ |
| porcentaje | % |
\% |
| ampersand | & |
\& |
| asterisco | * |
* or $*$ |
| signo menos, guión medio | - |
$-$ |
| menor que | < |
$<$ |
| mayor que | > |
$>$ |
| barra invertida | \ |
$\backslash$ |
| acento circunflejo, gorrito | ^ |
\char94 |
| subrayado, guión bajo | _ |
\_ |
| llaves | {, } |
\{, \} |
| barra vertical | | |
$|$ |
| virgulilla | ~ |
\char126 |
\" y o llegan hasta el siguiente carácter que no
sea una letra (tipo 1) o consisten en un sólo carácter no alfanúmerico
(tipo 2). Así que "\raggedleft" y "\makebox" son
comandos del tipo 1 mientras que "\\" y "\"" son
comandos del tipo 2. Los parámetros se pasan a los comandos entre
llaves "{", "}". Si los parámetros están vacios pueden omitirse.
Ejemplos:
\raggedleft{} % Sin argumentos
\raggedleft % Igual que arriba
\makebox{Text inside of a box.} % Un sólo argumento
\parbox{160pt}{This text is
typeset inside of a box.} % Dos argumentos
El número de parámetros que se le pasa a un comando está predefinido para
cada comando. Sin embargo, algunso comando aceptan parámetros opcionales. Estos
se colocan entre corchetes ("[", "]") y por lo general
preceden a los parámetros de la misma forma que las opciones preceden a los
argumentos en la mayoría de los programas UN*X.
Ejemplo:
\parbox[t]{10cm}{Soy un párrafo
alineado a la parte superior.} % Una opción, dos parámetros.
En este caso t es el parámetro opcional..
Los espacios que siguen a un comando del tipo 1 sin argumentos (como en
el segundo ejemplo de "\raggedleft" de arriba) son "eliminados"; no
se generan en la salida.
\begin{entorno}
Texto dentro del entorno.
\end{entorno}
Un entorno cambia la apariencia del texto dentro de él. Los entornos
controlan el alineamiento, la anchura de los márgenes y otras muchas cosas.
Algunos entornos predefinidos son: center,
description, enumerate, flushleft,
flushright, itemize, list,
minipage, quotation, quote,
tabbing, table, tabular,
verbatim, y verse.
Los entornos pueden anidarse. Por ejemplo, para conseguir un formateado
de una cita fluyendo en el margen derecho, usa los entornos
flushright y quotation.
\begin{flushright}
\begin{quotation}
Las letras son cosas, \\
no fotos de cosas. \\
-- Eric Gill
\end{quotation}
\end{flushright}
Un entorno afecta tan sólo al texto dentro de él; encapsula todos los cambios, como por ejemplo una indentación distinta que ocurra sólo durante el entorno. (Bueno, a menos que modifiques una variable global, pero no te voy a decir como hacer eso, así que estás seguro.)
LaTeX conoce tres o cuatro niveles de cabecera dependiendo del tipo de
documento (documentclass). La clase artículo (article)
tiene 3 niveles de sección, mientras que la clase libro (book) e
informe (report ) incluyen una sección capítulo (chapter)
como cuarto nivel.
\chapter{heading} % tan sólo para las
clases book y report
\section{heading}
\subsection{heading}
\subsubsection{heading}
Observad que como en POD, del que hablamos en la Parte I, los comandos de secciones actúan como separadores. No agrupan texto entre una marca de comienzo y otra de final, pero su sola presencia agrupa el texto. Esto será distinto en DocBook, como describiré en el artículo del próximo mes.
LaTeX incluye tres tipos de entornos para generar listas:
Se corresponden a las listas no numeradas, listas numeradas y listas de
definición en HTML, o =item *, =item 1,
=item termiino en POD.
Los elementos se introducen con "\item". Un elemento puede
consistir de uno o más párrafos.
Para las listas de descripción, se utiliza un parámetro opcional en
"\item", así
"\item[término]" especificaría
el término y el texto a continuación sería la definición de term.
Ejemplos:
Qué puede hacer emacas por ti
\begin{itemize}
\item Cortar y pegar bloques de texto
\item Alinear y justificar párrafos
\item Comprobar la ortografía de los documentos
\end{itemize}
Para iniciar emacs por primera vez
\begin{enumerate}
\item Ejecuta emacs desde la línea de comando:
\texttt{\$ emacs}
emacs mostrará su pantalla de inicio y pronto cambiará a un buffer
llamado \texttt{*scratch*}.
\item Pulsa la tecla Control~y pulsa~H. Verás un indicador en la parte de abajo de la pantalla (o ventana emacas).
\texttt{C-h (Type ? for further options)-}
\item Pulsa~T para iniciar el tutorial.
\end{enumerate}
Algunos comandos de emacs:
\begin{description}
\item[C-x C-c] Salir de emcas.
\item[C-x f] Abrir un fichero.
\item[C-x r k]
Matar un rectángulo definido por las marcas, o sea, la región
activa.
\end{description}
Todas las referencias necesitan 2 partes: un puntero (el enlace) y algo a lo
que a apuntar (podriamos traducirlo como anclaje). Los anclajes en LaTeX se
insertan con \label{nombre}. Todos los puntos
de anclaje están situados en una sección y página en concreto. Estas dos
informaciones son recogidas por \ref{nombre}
y \pageref{nombre} en cualquier parte del
documento.
Ejemplo del uso de \ref:
\section{Resumen}\label{section:instalacion}
...
\section{Resumen}\label{section:resumen}
Como se señaló en la sección~\ref{section:instalacion} "Instalación", ...
Ejemplo del uso de \pageref:
\section{instalacion}\label{section:instalacion}
El acero utilizado en el capítulo de ejemplo está construido a partir de una
aleación de Ti (0.5\%), Cr (0.1\%), y Mn (0.1\%).\label{definition:chamber-alloy}
\section{experimentos}\label{section:experimentos}
Nuestro ejemplo está hecho de acero inoxidable (ver
page~\pageref{definition:chamber-alloy} para la composición metalúrgica
exacta.
Una de las mayores ventajas del formateado con sistemas LaTeX es que permite al usuario definir sus propios comandos y entornos. Imaginemos que quieres marcar todos los parámatreos que pueden ser sustituidos en una utilidad de UN*X, como en
cd directorio
para que se represente
cd directorio
En este ejemplo, cd es el nombre de la utilidad y
directorio es el parámetro que puede ser reemplazado.
A menudo, los nombres de las utilidades son formateados en negrita y los parámetros reemplazables en cursiva. Teniendo esto en cuenta, una buena solución sería poder hacer
\utilidad{cd} \parametro{directorio}
donde \utilidad y \parametro cambiase la fuente a
negrita y cursiva respectivamente. Con el uso de \utilidad y
\parametro podemos marcar todas nuestras líneas de comandos:
\utilidad{pushd} \parametro{directory}
\utilidad{ls} \parametro{filename}
Para definir un nuevo comando LaTeX, utilizamos
\newcommand{nombre-comando}[número-de-parámetros
]{secuencia-de-comandos}
Donde nombre-comando es el nombre del nuevo comando que estamos definiendo, número-de-parámetros es el número de parámetros que el nuevo comando aceptará (si se omite se asigna un valor por defecto de 0), y secuencia-de-comandos son los comandos LaTeX que se ejecutarán cuando se utilizen el nuevo comando nombre-comando.
En nuestro ejemplo, definimos \utilidad y
\parametro como:
\newcommand{\utilidad}[1]{\textbf{#1}}
\newcommand{\iparametro}[1]{\textit{#1}}
Los comandos predefinidos \textbf y \textit cambían
el tipo de letra a texto en negrita y a texto en cursiva. Los parámetros se
pueden acceder utilizando #cifra, y cifra tiene
un valor entre 1 y 9.
Para que puedas hacerte una idea de la utilidad de definir comandos nuevos,
imagina que quisieras crear una entrada en el índice por cada utilidad que se
menciona en el texto. El comando
\index{término} inserta término en
el índice. Tan sólo necesitamos modificar la definición de
\utilidad a
\newcommand{\utilidad}[1]{\textbf{#1}\index{#1}}
y lo habremos hecho. (Para los curiosos: los niveles de índices están
separados con barras verticales, con lo que posiblemente prereriemos utilizar
\index{utilidad|#1} de forma que agrupe todas las utilidades
juntas. Échale un vistazo a la documentación de makeindex para
más detalles.)
Los nuevos entornos definidos con
\newenvironment{nombre-entorno}[número-de-parámetros
]{secuencia-inicio}{secuencia-fin
}
La única diferencia es que \newenvironment necesita dos
secuencias de comandos: una para iniciar el entorno, secuencia-inicio,
y otra secuencia para terminarlo, secuencia-fin. Para continuar con
nuestro ejemplo definiremos nuestro propio entorno para citas.
\newenvironment{micita}% Nota: "%" enmascara los salto de lineas
{\begin{flushright}\begin{quotation}}%
{\end{quotation}\end{flushright}}
que se usaría de la forma:
\begin{micita}
Las letras son cosas, \\
no fotos de cosas. \\
-- Eric Gill
\end{micita}
Ni los comandos ni los entornos pueden ser definidos varias veces con
\newcommand o \newenvironment. Estos comandos sólo se
definen en función de la primera definición. Si quisieramos volver a definir un
comando utilizariamos \renewcommand y
\renewenvironment, que utilizan los mismos parámetros que las
funciones para definir.
LaTeX ofrece un conjunto extremadamente rico de reglas de marcado. Me ceñiré a explicar tan sólo los 3 formatos que he explicado en la documentación de Perl (POD): los tipos de letra con énfasis, cursiva, negrita y código.
\textit{parámetro} -- Formatea
parámetro como texto en cursiva.
\emph{parámetro} -- Da énfasis a
parámetro. La configuración por defecto cambia a cursiva
dependiendo de la configuración de los tipos de letros. Si el texto es normal
\emph utiliza cursivas; pero si el texto está en cursivas utilizará
una fuente normal. De esta forma el texto con énfasis siempre resaltará sobre
los demás.
¿Por qué tener \textit y al mismo tiempo \emph?
Los comandos expresan peticiones distintas. \textit hace que el
parámetro se muestre en cursiva. Ya está. \emph por el otro lado,
hará que el parámetro tenga énfasis, independientemente de como vaya a ser ese
enfásis. Por defecto utiliza cursiva para dar énfasis, pero \emph
puede ser redefinido para usar negrita, subrayado o cualquier otra cosa que el
escritor quiera imaginar para dar énfasis. El nombre del comando
emph significa un concepto de énfasis, escondiendo el como se
haga.
\textbf{pàrámetro} -- Formatea
parámetro en un tipo de letra negrita.
Utilizando \textbf, podemos definir comandos lógicos, como por
ejemplo
\newcommand{\importante}[1]{\textbf{#1}}
\texttt{parámetro} -- Formatea
parámetro en una fuente de máquina de escribir.
Como con \textbf, \texttt puede ser utilizado en un
comando definido por el usuario:
\newcommand{\codigofuente}[1]{\texttt{#1}}
LaTeX files usually carry the extension tex. LaTeX translates these tex-files into so called device independent (dvi) files. dvi files are a binary representation of the source. They can be previewed to dvisvga on the console (given the terminal supports high-resolution graphics), or, for example, xdvi under the X11 windowing system. Often dvi files are converted to Postscript with the dvips tool. If Portable Document Format is desired, pdflatex transforms tex files into pdf files in a single step.
Los ficheros de LaTeX utilizan normalmente la extensión tex. LaTeX traduce estos ficheros tex en lo que se conoce como ficheros independientes del dispositivo (dvi). Los ficheros dvi son una representación binaria del fichero que escribirmos. Pueden ser previsualizados utilizando dvisvga en la consola (suponiendo que la terminal soporte gráficos de alta resolución, o xdvi en el sistema de ventanas X11. A menudo los ficheros dvi son convertidos en Postscript con la utilidad dvips. Si se prefiere utilizar el formato PDF, pdflatex transforma un fichero tex en un fichero pdf en un sólo paso.
Hasta aquí muy bien. LaTeX crea maravillosamente documentos Postscript, y hace lomismo con ficheros pdf Pero ¿no queriamos también ficheros HTML? Claro que sí. Pero LaTeX no nos puede ayudar aquí; para eso utilizaremos otra utilidad: latex2html. Esta utilidad convierte un fichero de LaTeX en un conjunto de ficheros html que están enlazados entre ellos siguiendo la estructura de nuestro fichero de origen.
latex2html tiene una página web en http://www.latex2html.org desde donde puede descargarse. También puede obtenerse desde http://www.ctan.org o cualquiera de sus mirrors. Si quieres saber si está instalado en tu sistema Linux, prueba con
latex2html --version
y deberías obtener una respuesta como
This is LaTeX2HTML Version 2K.1beta (1.57)
by Nikos Drakos, Computer Based Learning Unit, University of Leeds.
¿Qué tengo que hacer para que mis documentos en LaTeX puedan ser convertidos
con latex2html? -- Afortunadamente ¡casi nada! Tan sólo asegurate de que los
paquetes html y makeindex están referenciados al
principio del documentos, o sea al menos añade
\usepackage{html,makeidx}
al preámbulo. Ahora el fichero mi_documento.tex puede ser convertido a HTML utilizando
latex2html mi_documento.tex
latex2html se ocupa de casi todo lo que puede surgir cuando un documento LaTeX es convertido a un conjunto de ficheros html.De todas formas, las referencias a otras partes del documento o a otros documentos son conceptualmente distintas en la documentación escrita y en HTML. Veamos el siguiente trozo de LaTeX
En las siguientes líneas, haremos un resumen
del uso de un sistema de coordenadas cilíndrico.
Mire la página~\pageref{definition:sistema-coordenadas}
para consultar la definición de un sistema de coordenadas.
donde LaTeX reemplazará
\pageref{definition:sistema-coordenadas} con el número de página
donde hemos definido label{definition:sistema-coordenadas}. ¿Dónde
está el problema? Primero, que en un conjunto de páginas html no existe un
concepto claro de "número de página". Segundo, latex2html convierte
\pageref{definition:sistema-coordenadas} con un hiperenlace al
punto donde se haya representado
label{definition:sistema-coordenadas}. El enlace es un pequeño
cuadrado negro para los navegadores gráficos, o la marca "[*]" en
los navegadores de modo texto. Pero lo que hemos escrito queda un poco raro,
realmente confuso y no por la culpa de latex2html:
En las siguientes líneas, haremos un resumen del uso de un sistema de coordenadas cilíndrico. Mire la página [*] para consultar la definición de un sistema de coordenadas.
latex2html necesita un poco de nuestra ayuda. El párrafo que contiene la referencia debería ser reescrito pensando en la versión html, por ejemplo con:
En las siguientes líneas, haremos un resumen del uso de un <a>sistema de coordenadas cilíndrico</a>.
y de esta forma indico el hiperenlace con marcas HTML de enlaces. Para
permitir la existencia de las 2 diferentes versiones en función del formato de
salida latex2html define el comando hyperref.
\hyperref[tipo-referencia]{texto para
la versión html}{texto anteror a la referencia
para la versión LaTeX}{texto posterior a la
referencia para la versión LaTeX}
El parámetro opcional tipo-referencia selecciona el contador al que la referencia se refiere:
ref''\ref. El
texto de referencia es el número de sección ("4", "1.5.2", "3.4.2.1", etc).page''
or ``pageref''\pageref. Esta
referencia es un número de página ("24", "xxiii", etc).Así que si reescribieramos nuestro ejemplo utilizando \hyperref
quedaría como sigue
En las siguientes líneas, haremos un resumen
del uso de un \hyperref[pageref]%
{sistema de coordenadas cilíndrico}% para HTML
{sistema de coordenadas cilíndrico. Mirar en la página~}% para LaTeX
{para la definición de un sistema de coordenadas}% texto que termina en LaTeX
{definition:sistema-coordenadas}.% nombre de la referencia
LaTeX lo representará como
En las siguientes líneas, haremos un resumen del uso de unsistema de coordenadas cilíndrico. Mirar en la página 97 para la definición de un sistema de coordenadas.
y latex2html generará
En las siguientes líneas, haremos un resumen del uso de un sistema de coordenadas cilíndrico.
a partir del mismo texto.
Un problema relacionado con el que nos acabamos de encontrar con las rerencias surge cuando los hiperenlaces entran en juego. En la versión HTML del documento los hiperenlaces son esenciales; en la versión impresa tienen muy poca utilidad: Compara "Haz click aquí" con "Aprieta tu lápiz en esta letra". Sin embargo, a veces, el autor realmente quiere incluir la dirección del hiperenlace, un localizador de recursos universal (URL) en la versión impresa. latex2html define dos comandos que consiguen eso exactamente.
\htmladdnormallink{texto de enlace
}{URL}
\htmladdnormallinkfoot{texto de enlace
}{URL}
Los dos comandos generan el hiperenlace <a href = "URL">texto de enlace</a> en la versión HTML. El primer comando tan sólo genera texto de enlace en la versión de LaTeX, eliminando la URL completamente. El segundo comando añade una nota a pie de página conteniendo URL. El uso típico de estos comandos es
El texto de este artículo puede ser descargado de nuestro \htmladdnormallink{sitio web}{http://www.gacetadelinux.com}.
y
El texto de este artículo puede ser descargado de nuestro \htmladdnormallinkfoot{sitio web}{http://www.gacetadelinux.com}.
y el resultado LaTeX del primer bloque se verá así
El texto de este artículo puede ser descargado de nuestro sitio web.
y en el segundo caso sitio web tiene una marca de nota a pie de
página y un pie de página con la URL. La salida en HTML se verá en los 2 casos
como
El texto de este artículo puede ser descargado de nuestro sitio web.
Como último recurso, existen varios comandos y entornos que permiten al autor cambiar el texto entre las versiones LaTeX y HTML del documento:
\latex{un poco de texto sólo para LaTeX}\html{un poco de texto sólo para HTML}\latexhtml{un poco de texto sólo para LaTeX
}{un poco de texto sólo para HTML}\begin{latexonly} texto sólo para LaTeX
\end{latexonly}\begin{htmlonly} texto sólo para HTML
\end{htmlonly}Recomiendo utilizar estos comandos sólo si no pueden utilizarse otros comandos o entornos para producir el formateado que queramos, porque partir el texto siempre requerirá un esfuerzo adicional para mantener las dos partes iguales.
lshort en tu sistema Linux, o buscar en www.ctan.org para encontrar un sitio de
réplica cercano a ti.Para un principiante, estas páginas de hipertexto no pueden sustituir a la Corta Introducción, ni al libro de Lamport. Pero para el usuario intermedio de LaTeX son una gran ayuda en caso de no tener acceso a la documentación impresa.
El mes que viene: DocBook
Christoph Spiel