Matemáticas en Docbook usando DBTexMath

Sebastián Gurin (Cancerbero)

Historial de revisiones
Revisión 0.22004-4-20Revisado por: jidl
Pequeñas revisiones de formateo y sintaxis
Revisión 0.42004-4-21Revisado por: jidl
Más sugerencias
Revisión 0.52004-5-3Revisado por: sg
Redición de las secciones "Obtención e Instalación de DBTeXMath" y "No todo es color de rosas..." y otras revisiones.

 

Pequeño explicativo de cómo representar expresiones matemáticas en documentos Docbook usando DBTexMath.

Introducción

Se supone que el usuario que esté leyendo este documento ya está convencido de que la herramienta definitiva para la edición estructurada de textos es Docbook. Si no es así o el lector no conoce aún lo que es DocBook le recomendamos que empiece a aprender qué es y cómo usarlo, si es que se dedica a realizar documentos electrónicos. Las aplicaciones como Microsoft Word y similares ya tuvieron su lugar en la historia y deben aceptar su lugar real en el mundo: un primer contacto de gente principiante con el mundo de la informática, pero nada más. Si piensa realizar ediciones serias en su computadora, deberá estar al tanto de las nuevas tecnologías como DocBook.

La conveniencia de la edición de documentación en un formato estructurado como DocBook es indiscutible. Esta herramienta junto con emacs y su modo mayor PSGML[1]nos permiten hacer documentos rápidamente y de una forma totalmente distinta a la de las herramientas de tipo WYSIWYG[2], sin tener que preocuparnos por el diseño y la estética del documento y sólo por su contenido y estructura.

DocBook no es la única herramienta para UNIX de su tipo: hay otras más antiguas y hasta más maduras como TeX[3], LaTeX[4] o troff. Sin embargo, ya sea por la posibilidad de realizar salidas de documentos en una gran variedad de formatos, ya sea orientados a la impresión como PDF, PostScript, DVI o RTF, como orientados para la Internet como HTML, ya sea por el alto grado de aceptación que está teniendo DocBook tanto en el mundo del software libre, como en universidades, empresas privadas, etcétera es, hoy en día la mejor herramienta para la edición de documentación.

¿Por qué DBTexMath?

Aunque DBTexMath no es la única alternativa para la representación de expresiones matemáticas en documentos Docbook, en esta sección se explicará el porqué de su elección.

Para los que aún no han intentado escribir documentos DocBook que involucren expresiones matemáticas complejas tal vez les sorprenda el hecho de que DocBook no provee herramientas estándar para tal actividad.

En realidad, la alternativa propuesta (aunque no formalmente) por OASIS consortium[5] es MathML [6]. Sin embargo, según mi parecer, todavía no se habla de una herramienta estándar que venga dentro de la DTD para la representación de expresiones matemáticas. En efecto, hay varias formas de hacer esto como es descrito en http://www.sagehill.net/docbookxsl/Math.html. El uso de MathML tiene dos grandes inconvenientes:

Para Allin Cottrell, estos dos problemas fueron lo suficiente importantes como para buscar o crear otra alternativa. El resultado fue su proyecto DBTexMath.

Hasta aquí todo muy bien pero, hasta ahora no hemos contestado la pregunta a la que hace referencia el título de esta sección. ¿Por qué usar DBTexMath en lugar de, por ejemplo, MathML?

Primero que nada, MathML y DBTeXMath parecen ser las dos únicas herramientas para auxiliar a DocBook en la edición matemática. Si algún usuario encuentra otra le agradezco que me lo comunique. Segundo, hemos visto las deficiencias de la edición directa de código MathML dentro de nuestros documentos DocBook. Y tercero, podemos decir que la edición de expresiones matemáticas en el lenguaje TeX es casi perfecta. Con unas pocas líneas se pueden crear expresiones que, en otra clase de lenguajes para los mismos propósitos serían muy complejas. Una prueba de ello es que proyectos orientados a las ciencias (como por ejemplo GSL, la librería para propósitos científicos de GNU) utilizan en su documentación de sólo texto (páginas manual o info) el lenguaje TeX para representar expresiones matemáticas complejas. Esto da una idea de lo práctico que es TeX y del gran uso que se le da. Un ejemplo de la facilidad de la conveniencia de su uso para representar expresiones matemáticas es el siguiente. La cadena

	x_j = \sum_{k=0}^{N-1} z_k e^{ -2\pi i j k / N }
      
representa la expresión para la transformada discreta de Fourier:

Con este pequeño ejemplo, se puede apreciar la facilidad y lo intuitivo del uso de TeX para escribir matemáticas.

Breve explicativo sobre el funcionamiento y terminología de DocBook.

Esta sección está dedicada sólo para aquellas personas nuevas en la composición tipográfica de documentos utilizando DocBook. Dado que el funcionamiento de la herramienta DBTexMath está muy relacionado con los procesos de composición y publicación de los documentos DocBook, nos parece que el lector merece el contenido de esta sección. Así, llegado el punto, no estará obligado a manejarse sólo con terminología vacía, sino que podrá entender, o al menos hacerse una idea de, de qué se habla. Así es como aquel lector que no esté interesado en estos aspectos bien puede saltear el contenido de esta sección.

A continuación se muestran dos breves esquemas de los procesos por los que pasan los archivos fuentes DocBook SGML y XML, respectivamente, para llegar a formatos de salida como PDF, HTML, PostScript, etc.

Figura 1. Formateo de un archivo SGML-DocBook

Figura 2. Formateo de un archivo XML-DocBook

Un pequeño comentario respecto a los esquemas anteriores: Es posible procesar un archivo DocBook XML a través de las hojas de estilo DSSSL con openJade. Esto se debe, en un principio a que XML es un subconjunto de SGML.

Puede decirse que el formato DocBook fue creado gracias a los meta-lenguajes de etiquetas SGML y XML[8]. ¿Qué es un meta lenguaje? Son básicamente lenguajes para la creación de otros lenguajes. Tanto en el caso de SGML o XML, estos se basan en el uso de la etiqueta. Una etiqueta es todo aquel conjunto de caracteres encerrado entre los símbolos < y >. En el caso de SGML, este lenguaje sólo define reglas básicas sobre el uso y anidación de etiquetas. Por ejemplo, se encuentra explícito en el lenguaje que cada etiqueta debe tener una etiqueta de final correspondiente y que la anidación de etiquetas debe ser perfecta, lo que significa que las etiquetas internas deben ser cerradas antes de las etiquetas externas. Por supuesto, las definiciones SGML son mucho más complejas que esto, pero básicamente esas son las reglas principales.

Dadas estas reglas básicas, todo lo demás se deja a discreción de quien programa en el meta lenguaje. Este tendrá que crear los nombres para las etiquetas, sus parámetros y las reglas específicas de anidación de estas etiquetas (i.e qué etiqueta puede estar dentro de qué otra).

DTD Document Type Definition . Ahora ya podemos definir lo que es una DTD. Si cualquiera puede realizar su propio lenguaje de etiquetas con SGML, tiene que haber un modo de poner en vigor las reglas que hemos inventado. Esto es implementado por lo que se denomina como DTD o Definición de Tipo de Documentos. Un DTD define los nombres de las etiquetas, el orden legal de las ocurrencias y las reglas de anidación para una implementación SGML particular. A la vez, los DTDs se escriben en SGML y se representan como un simple archivo en el sistema. En especial, DocBook es un DTD que se usa para definir libros y artículos.

DTD son las siglas de "(Document Type Definition", o en español "Definición del Tipo de Documento".

Como hasta ahora hemos venido haciendo, nos sentimos obligados a explicar qué es una hoja de estilo DSSSL (o en inglés DSSSL stylesheet) de las cuales se hablará a lo largo de este documento.

Hojas de estilo (stylesheets). Para componer y validar el documento utilizamos el lenguaje SGML que define, por medio de la DTD DocBook (como ya se explicó), las reglas que se deben respetar para que el documento sea válido, pero nada más. Sin embargo, esta es sólo la mitad del trabajo ya que también podríamos querer publicar nuestro documento. Con publicar nos referimos a obtener salidas en formatos orientados a la impresión (como PDF o PostScript) u orientados a Internet (como el formato HTML) u otros formatos como RTF.

En ningún momento la DTD define qué fuentes, qué espaciado entre párrafos, alineación, etc se usará. Es decir, no hay ninguna información sobre el estilo que se usará para publicar el documento DocBook en una DTD. Tan sólo existen definiciones de etiquetas, y reglas de anidación.

Es aquí dónde entran en juego las hojas de estilo. Éstas, son simples archivos que definen el estilo de la publicación del documento. Es decir, entre otras cosas definen, para cada formato de salida, la fuente y su tamaño utilizada para cada parte del documento, la alineación del mismo en la hoja, el espaciado entre párrafos, la distribución de secciones como el índice, la bibliografía, los apéndices, los pies de nota, etc.

Durante años se ha intentado producir un lenguaje estándar para realizar hojas de estilo. Entre otros se pueden destacar FOSIs[9], DSSSL[10] (lenguaje soportado por Jade, openJade y otras), CSS [11] y XSL[12]. Cabe destacar que el lenguaje DSSSL es parecido a los lenguajes de programación tipo lisp o Scheme, y el lenguaje para hojas de estilo XSL es el mismo lenguaje XML.

En nuestro caso, supondremos que el usuario usa un sistema DocBook basado en SGML y no en XML y que el lenguaje utilizado para sus hojas de estilo es DSSSL. En este caso, el último paso de la publicación de documentos es utilizar una herramienta como Jade o openJade, que interpreta el lenguaje DSSSL de la hoja de estilo y toma como entrada un documento SGML. Si le indicamos el tipo de salida deseado, esta herramienta nos lo proporcionará.

Para usuarios con experiencia en programar con lenguajes como C, el proceso de composición y publicación tipográfica puede parecer análogo al de programar. Nuestro documento *.sgml sería nuestro código fuente C, la DTD sería lo análogo al lenguaje C (las reglas de sintaxis que se deben respetar para que el documento-programa sea válido y que describen cada etiqueta-estructura) y las hojas de estilo junto con las herramientas de publicación como Jade, openJade, JadeTeX podrían verse como el compilador C. Cualquiera de las salidas ya sean PDF, HTML, RTF, etc podrían ser vistas como el archivo ejecutable compilado.

A continuación expondremos otro esquema más, visto desde el punto de vista de los lenguajes y no de los procesos que intervienen en la composición y publicación de un documento DocBook.

Uso de DBTexMath

En esta sección se explicará cómo insertar expresiones matemáticas TeX dentro de nuestros documentos DocBook. En Apéndice A se discutirá la sintaxis TeX para crear este tipo de cosas.

Para que DBTexMath pueda formatear nuestras fórmulas matemáticas, debemos incluirlas dentro de alguna de las etiquetas <equation>, <informalequation> o <inlineequation>. La etiqueta <equation> hace que nuestra expresión matemática se represente en una nueva línea de texto, y con un título propio. <informalequation> es igual que <equation> pero sin título. <inlineequation> sin embargo, hace que la expresión matemática aparezca en la misma línea de texto. Por ejemplo, a pesar de que podemos escribir letras griegas y otros símbolos matemáticos usando entidades o codificaciones ("encoding") distintas en Docbook, el uso de <inlineequation> es muy práctico para tal propósito dentro de un párrafo. La sintaxis básica es:

<equation>                                                 (1)
  <alt> "Expresión matemática TeX" </alt>                  (2)
  <graphic fileref="nombre-de-archivo.png">                (3)
</equation>
      
(1)
De igual modo se pueden usar las etiquetas <informalequation> o <inlineequation>
(2)
Dentro de las etiquetas <alt> deberá ir la expresión TeX en algún modo matemático. La sintaxis para expresiones matemáticas y los modos matemáticos de TeX se explican detalladamente en Apéndice A
(3)
La etiqueta <graphic> es necesaria para la publicación del documento en formato HTML. La expresión matemática TeX dentro de la etiqueta <alt> es exportada a una imagen PNG la cual se mostrará en el archivo *.html de salida. El nombre de la imagen PNG es igual al valor del parámetro fileref y estará en el mismo directorio de la salida HTML (posiblemente html_out/).

A la etiqueta <graphic> también se le pueden agregar otros parámetros. Por ejemplo, align="center" hará que la fórmula quede centrada en la hoja.

A continuación brindamos un ejemplo de las aplicaciones más comunes de esta sintaxis.

Ejemplo 1. Uso de DBTexMath

 <para> La ecuación
  
    <informalequation>
      <alt>$ r=a+b\theta $</alt>
      <graphic fileref="ecuacion_espiral.png">
    </informalequation>
  
  representa una espiral, donde 
    
    <inlineequation>
      <alt>$ a, b, \in \Re $</alt>
      <graphic fileref="espira_condicion_1.png">
    </inlineequation>

  y 
    
    <inlineequation>
      <alt>$ r, \theta $</alt>
      <graphic fileref="theta.png">
    </inlineequation>
      
  se refieren a las coordenadas polares. 

</para>

¿Cómo funciona DBTexMath?

Ahora que conocemos algo del proceso de composición y publicación de documentos DocBook, pasaremos a explicar cómo encaja DBTexMath en todo esto.

DBTexMath podría describirse como un conjunto de archivos que permiten al usuario embeber sus expresiones matemáticas en formato TeX dentro del mismo documento sgml-DocBook. Básicamente estos archivos forman una hoja de estilo DSSSL que complementa la hoja de estilo DSSSL de nuestro paquete DocBook local. Funcionan de la siguiente manera: El usuario escribe sus expresiones matemáticas en formato puro TeX dentro de una etiqueta <alt> dentro de cualquiera de las etiquetas <equation>, <informalequation>, <inlineequation>, tal como ya se ha explicado en la sección de nombre Uso de DBTexMath, dentro del documento SGML.

El proceso de publicación por parte de DBTexMath será distinto según el formato sea orientado a la impresión (PDF, PostScript), o a Internet (HTML):

En realidad el proceso no es tan simple como esto, pero según nuestra opinión, no hace falta saber los detalles exactos para poder insertar nuestras fórmulas en DocBook.

Obtención e instalación de DBTexMath

Antes que nada, se deberá tener instalado y funcionando un sistema DocBook (con todas las dependencias que implica: Jade, JadeTeX, las hojas de estilo DSSSL, etc). La instalación de un sistema sgml-DocBook está fuera del alcance de este tutorial. En Apéndice C se puede encontrar información sobre este punto.

Hay dos formas de tener funcionando el software dbtexmath. La primera es instalar el paquete original de DBTeXMath de Allin Cottrell. La segunda forma, la cual recomendamos por su simplicidad, es usar DBTeXMath junto con la hoja de estilo DSSSL ldp.dsl[13] para integrarla con DBTeXMath.

Recomendamos el uso de la segunda alternativa por las siguientes razones:

Instalación del paquete original DBTeXMath

Lo primero será bajar el paquete dbtexmath-0.3.tar.gz . Como alternativa se podrá bajar el paquete dbtexmath-es.tgz el cual es la versión de dicho software pero con los comentarios de los archivos en español y un breve explicativo de cómo instalarlo.

Dado que el paquete DBTexMath, como ya se dijo, consiste principalmente en una hoja de estilo DSSSL auxiliar a la de sgml-DocBook, lo único que deberemos hacer es modificar las rutas a algunos archivos locales (las hojas de estilo DSSSL DocBook de nuestro sistema) que aparecen en un par de ficheros de dicho paquete.

Se explicará todo con un ejemplo. Supongamos que creamos el archivo DocBook probe.sgml en el directorio en donde se desempaquetó DBTexMath, por ejemplo DBTexMath-0.3.

Importante: Es muy importante que nuestro documento SGML se encuentre dentro del directorio donde se desempaquetó DBTexMath. Entre otras cosas, el archivo Makefile contiene órdenes para generar los archivos de salida y cuenta con que nuestro documento se encuentra en su mismo directorio. En realidad, para los que están acostumbrados a programar, la tarea de formatear pasa a ser similar a compilar el programa fuente. Si el usuario conoce la herramienta make, teniendo en cuenta el esquema Figura 1 le será trivial comprender el funcionamiento de DBTexMath observando el archivo Makefile.

  1. Queremos que este nuevo documento sea un artículo. Supondremos que nuestra versión de la DTD DocBook es 4.2[14]. La declaración SGML de tipo de documento será la que estamos acostumbrados a usar, o sea:

    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
    	    

    Importante: Si su versión de la DTD DocBook es otra, debería modificar las líneas anteriores cambiando el "4.2" por alguna otra cosa.

  2. Nota: El formateo de nuestro archivo probe.sgml no será tan sencillo como al que estamos acostumbrados hasta ahora. Es decir, para, por ejemplo, obtener una salida PDF no bastará con sólo una simple orden 'db2pdf probe.sgml o docbook2pdf probe.sgml. En realidad, tanto db2pdf y docbook2pdf son scripts shell que hacen automáticamente los procesos que se describen en Figura 1. Para obtener una salida en otro formato, de deberán ejecutar varias órdenes. Pero no nos asustemos: de todo eso se encargará la herramienta make y el archivo Makefile que debe haber venido con el paquete DBTexMath. Si se lo examina, se puede ver en él el orden de los eventos y dependencias para obtener tanto las salidas PDF como HTML.

  3. El siguiente paso a seguir es modificar la variable DOC del archivo Makefile por el nombre de nuestro documento sin la extensión ".sgml". En nuestro caso DOC = probe. Aunque no en la mayoría de los casos, puede ocurrir que debamos cambiar algunas de las demás variables del Makefile según la configuración de nuestro sistema.

  4. Una vez hecho esto, se debe proceder a verificar que las rutas locales que aparecen en el archivo sample-both.dsl sean las correctas para nuestro sistema. Este es el paso más delicado: la hoja de estilo DSSSL sample-both.dsl debe tener acceso a las hojas de estilo dsssl de DocBook para que puedan, de alguna manera, trabajar juntas y junto con jade sobre nuestro archivo.

    Sugerencia: En la mayoría de las distribuciones GNU/Linux, las hojas de estilo DSSSL se encuentran en /usr/share/sgml/DocBook/dsssl*, aunque esto no tendría porqué ser así en todos los sistemas. En mi cajita Linux, la hoja de estilo que uso es /usr/share/sgml/docbook/dsssl-stylesheets-cygnus/stylesheets/cygnus-both.dsl.. Probablemente, si hacemos cat `which db2html` | grep DB_STYLESHEET o cat `which docbook2html` | grep DB_STYLESHEET aparezcan rutas a las hojas de estilo que utilizan nuestro paquete DocBook-tools, las cuales, si tenemos bien configurado nuestro sistema, deberían ser las correctas.

  5. Si hemos hemos hecho todo correctamente, ya deberíamos ser capaces de usar DBTeXMath. Esto se discute en la sección de nombre Obtención de salidas en formatos HTML y PDF.

Instalación de DBTeXMath junto con ldp.dsl

El paquete que contiene el software DBTeXMath junto con la hoja de estilo ldp.dsl se puede obtener de http://www.geocities.com/cancerbero_sgx/dbtexmath_ldp.dsl.tar.gz .

A diferencia del paquete original, si usamos este paquete, no será necesario insertar las rutas a las hojas de estilo locales de Docbook. El método de puesta en funcionamiento del software DBTeXMath será el mismo que el anterior, pero omitiendo el paso 4. Esto hace que el uso del software DBTeXMath sea casi inmediato. El único requisito necesario para que funcione será modificar en el Makefile la variable DOC como ya se indicó.

A diferencia del paquete original, si usamos una estrategia en cuanto a las hojas de estilo como la ofrecida en tldp.org/authors/ldp.dsl, no será necesario insertar las rutas a las hojas de estilo locales de Docbook. El método de puesta en funcionamiento del software DBTeXMath será el mismo que el anterior, pero omitiendo el paso 4. Esto hace que el uso del software DBTeXMath sea casi inmediato. el único requisito necesario para que funcione será modificar en el Makefile la variable DOC como ya se indicó.

Obtención de salidas en formatos HTML y PDF

Si hemos hecho todo bien en la sección anterior, y si nuestro archivo probe.sgml no tiene errores (tanto de síntaxis sgml-DocBook como en las expresiones matemáticas en TeX), podremos formatear nuestro archivo probe.sgml a HTML simplemente escribiendo make html (salida que quedará en el subdirectorio, html_out) o make htmls (salida que quedará en el subdirectorio, htmls_out y que tendrá diversos archivos html) . De manera análoga, podremos obtener una salida de este documento en formato PDF, escribiendo make pdf. Si queremos publicar el documento en ambos formatos, podremos hacerlo simplemente escribiendo make.

Nota: No se nos ocurre una manera limpia de obtener salidas en formato RTF (formato de texto enriquecido). Cabe decir que, dado el poco interés por este formato, tanto por parte de nosotros como por parte del autor de DBTeXMath, no nos hemos ocupado mucho en resolver esta carencia. Se nos ocurren dos alternativas. La primera sería obtener un archivo único HTML (make html) y aplicarle el filtro html2db[15]. Luego de tener el documento en formato Docbook, podremos utilizar las herramientas db2rtf o docbook2rtf para obtener una salida en formato RTF. La segunda alternativa sería, luego de obtener un archivo único HTML, abrirlo con el software Writer de OpenOffice.org (software libre), y guardar como RTF.

A modo de prueba, ofrezco un archivo probe.sgml, sin errores:


<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN">

<article>

  <articleinfo>
    <title>Prueba de DBTexMath en DocBook</title>
    <author>
      <firstname>Sebastián</firstname>
      <surname>Gurin</surname>
      <email>cancerbero_sgx@users.sourceforge.net</email>
    </author>
  </articleinfo>

  <section>
    <title>Matrices</title>

    <para>A continuación va un ejemplo de la representación de
    expresiones matemáticas que involucran matrices.</para>

    <informalequation>
      <alt>
\renewcommand{\arraystretch}{1.3}
\setlength{\arraycolsep}{.05in}
\[
\left[
\begin{array}{c}
\dot{L} \\
\dot{C}
\end{array}
\right]
= \frac{1}{-\alpha}
\left[
\begin{array}{cc}
af & bfh \\
1 & b(fh-k)
\end{array}
\right]
\left[
\begin{array}{c}
L \\
C 
\end{array}
\right]
-\frac{1}{\alpha}
\left[
\begin{array}{cc}
afh & 0 \\
h & \alpha 
\end{array}
\right]
\left[
\begin{array}{c}
\dot{m} \\
r_w
\end{array}
\right]
\]


      </alt>
      <graphic fileref="matriz_mult.png" align="center">
    </informalequation>

  </section>
</article>

Consejos

Considero que lyx puede resultar de ayuda para muchos usuarios. Si por falta de tiempo no se puede aprender estrictamente la sintaxis TeX, se puede usar lyx y su panel para la edición de fórmulas matemáticas para escribir la expresión deseada. Todo esto es de un modo WYSIWYG, por lo que no debe resultar difícil a cualquier usuario. Luego, se podrá exportar el documento a formato LaTeX, abrirlo en un editor de textos y pegar nuestra expresión dentro de nuestro documento DocBook. Este procedimiento también se puede usar cuando no nos acordamos de memoria ciertos comandos, letras griegas, o para construcciones complejas como matrices, etc.

Un buen tutorial de Lyx y SGML se encuentra en www.karakas-online.de/mySGML

Tener en cuenta que para exportar el documento lyx a LaTeX, dentro de lyx se deberá ir al menú Archivo->Exportar->Latex

Depende de cada uno hasta qué punto utilizar este tipo de herramientas para editar estructuradamente, algo que sólo se debería hacer en un editor de textos como emacs. Personalmente pienso que si esto agiliza nuestra tarea (no nos distrae y no nos hace pensar en el diseño más que en el contenido), entonces está bien usarlo.

Verificando el código TeX dentro de nuestros documentos. . Haciendo un make pdf, verificar dónde están los errores de nuestro código TeX será muy difícil ya que Jade no realiza verificaciones al pasar de DocBook a TeX sino que le pasa directamente nuestras fórmulas matemáticas a JadeTex. Sin embargo, con el comando make html Jade sí verifica directamente el código TeX, y se detendrá ni bien encuentre uno.

Conclusión. Si tenemos dudas de que la sintaxis de nuestras expresiones matemáticas es correcta, hacer primero un make html.

Modificaciones en la configuración

Esta sección está dedicada a los usuarios experimentados que quieran personalizar algunos aspectos de su sistema de composición tipográfica de expresiones matemáticas.

Uso de paquetes alternativos LaTeX. Supóngase que queremos utilizar el paquete X de símbolos matemáticos TeX alternativo en el código TeX de nuestro documento Docbook. ¿Cómo decirle a DBTeXMath que queremos utilizar tal paquete?. En el archivo HTMLMath.dsl, dentro de las opciones configurables por el usuario ("User-configurable options"), se puede modificar la variable $usepackage$ para que en nuestro proceso de salida en formato HTML se tenga en cuenta un paquete (o algunos paquetes) en especial. A continuación traducimos los comentarios que aparecen dentro de la definición de dicha variable.

¿Paquetes LaTeX a cargar? Dejar una cadena vacía "" para no especificar ningún paquete. Por ejemplo, si se quiere usar las fuentes MathTime, dejar "mathtime". Si se quieren especificar más de un paquete, separarlos por comas en la cadena, por ejemplo, "amsmath,mathtime".

Así, en nuestro caso, para usar el paquete X, deberíamos escribir
(define $usepackage$
  "X")
	  

Si quisiéramos hacer lo mismo pero para las salidas PDF, debemos modificar el archivo jadetex.cfg, incluyendo la línea

\usepackage{X}
	

Tamaño de las fórmulas matemáticas en las salidas HTML. Si queremos tener un control global del tamaño de las fórmulas matemáticas en nuestras salidas en formato HTML, podremos modificar la variable configurable por el usuario $density$ del archivo HTMLMath.dsl. Los valores que esta toma son de la forma "anchoxlargo".

Atributos configurables de las salidas PDF.

No todo es color de rosas...

Primero que nada, cabe decir que el paquete DBTexMath fue realizado voluntariamente y para uso personal del autor. Así, no fue diseñado ni planeado para cumplir con todas los requisitos que puedan surgir entre los usuarios.

A continuación enumero características que en lo personal faltarían, como también malos funcionamientos del programa. Agradecería las sugerencias de aquellos usuarios que han logrado solucionar los problemas-carencias que aquí se plantean.

A. Introducción a la representación de expresiones matemáticas en TeX

Primero que nada hay que decir que TeX no representa estructuras matemáticas ni nada parecido, sino que es un simple lenguaje de símbolos. Por ejemplo, no existe una estructura que represente la operación integración de una función, o sea algo como integral(lim_superior, lim_inferior, f(x)), sino que el se debe representar todo símbolo por símbolo. Así, \int ^0 _1 f(x) representa la expresión matemática . Puede verse que en este caso no hay nada que represente una estructura matemática en TeX, sino que simplemente escribimos 4 símbolos seguidos.

Ambientes

En TeX, existen distintos ambientes para el confeccionamiento de párrafos. Por ejemplo, si queremos introducir un cita en TeX, contamos con los ambientes quotation o quote. Si el párrafo es en realidad una imagen con una descripción sobre la misma contamos con el ambiente picture. El que nos interesa a nosotros es el ambiente para expresiones matemáticas, o simplemente modo matemático.

Cada ambiente empieza y termina de la misma manera, a saber:

	  
	  \begin{nombre-del-ambiente}
	  .
	  .
	  .
	  \end{nombre-del-ambiente}
	  
	

Existen tres "ambientes" que nos permiten entrar en modo matemático en TeX:

  • math. Para las fórmulas que aparecen incrustadas en el mismo texto. Adecuado para expresiones matemáticas sencillas, o para incrustar caracteres matemáticos simples como letras griegas, notación lógica, etc.

  • displaymath. Para aquellas fórmulas que aparecen en su propia línea, separadas del texto. Adecuado para expresiones matemáticas relativamente complejas que involucren, por ejemplo fracciones, límites, sumatorias, integrales, matrices, etc.

  • equation. Lo mismo que displaymath, excepto que se agrega un número de ecuación a la derecha del margen.

Los ambientes math y displaymath son tan usados en TeX que existen formas más cortas de escribirlos, a saber

  • \(...\) en lugar de \begin{math}...\end{math}

  • \[...\] en lugar de \begin{displaymath}...\end{displaymath}

De hecho, el ambiente math es tan común que aún tiene una forma más corta de representarse:

  • $ ... $ en lugar de \(...\)

La cualidad del ambiente equation es hacer referencia a fórmulas matemáticas en cualquier parte del documento TeX. Dado que DocBook tiene sus propios métodos para hacer esto, para nosotros este ambiente no será importante.

También es conveniente aclarar las diferencias sustanciales entre los ambientes math y displaymath. Algunas de estas diferencias se ven en el siguiente ejemplo.

Tabla A-1. Diferencias entre los ambientes math y displaymath.

AmbienteCódigo TeXSalida
math

\begin{math}
\lim_{n \to \infty}
\sum_{k=1}^n \frac{1}{k^2}
= \frac{\pi^2}{6}
\end{math}
		  

displaymath

\begin{displaymath}
\lim_{n \to \infty}
\sum_{k=1}^n \frac{1}{k^2}
= \frac{\pi^2}{6}
\end{displaymath}
		  

Nótese la diferencia entre ambas expresiones matemáticas. Sin dudas la última está mejor espaciada y es más profesional, aunque el fragmento TeX sea el mismo.

Conclusión. Si se van a escribir fórmulas matemáticas que consten de de más de un símbolo, úsese el modo displaymath, o su forma abreviada \[ ... \].

Subíndices y superíndices

Dentro del modo matemático podremos hacer que una expresión 'exp1' aparezca como subíndice de una expresión 'exp2' escribiendo exp2_{exp1}. Análogamente, podemos hacer que 'exp1' aparezca como superíndice de 'exp2' escribiendo exp2^{exp1}.

Si la expresión que debe ser representada como subíndice consta únicamente de un caracter se pueden omitir las llaves delimitadoras. Por ejemplo, para escribir x1 puede usarse tanto x_1 como x_{1}. Lo mismo se cumple para los superíndices.

No hay nada de extraño en cómo maneja TeX este tipo de cosas y todo esto debería ser muy intuitivo al usuario. Por ejemplo, se pueden usar subíndices dentro de superíndices sin ningún tipo de problemas. Así es como e^{x _1 ^2} representa la expresión matemática .

Letras griegas

Existe un comando para cada letra mayúscula y minúscula del alfabeto griego. Generalmente el nombre del comando está definido como el nombre de la letra griega en inglés.

Tabla A-2. Ejemplo

TipoCódigo TeXSalida
Mayúscula

$ \Delta $
		    

Minúscula

$ \delta $
		    

En Apéndice D se pueden ver todas las letras griegas listadas.

Espaciado en las fórmulas matemáticas

Cuando escribamos nuestras fórmulas en el modo matemático de TeX, en la salida de nuestros documentos se ignorará el espaciado entre caracteres. Simplemente TeX es lo bastante "inteligente" como para decidir cuál es el mejor espaciado. En realidad, TeX usará un estilo para nuestras fórmulas matemáticas similar al que se usa en los libros de matemáticas.

Esta es una característica de la edición estructurada de textos: no debemos preocuparnos de cómo lucen nuestras fórmulas, ecuaciones, funciones, matrices, etc. El sistema de formateo hará este trabajo pesado. Sin embargo, podemos tener cierto control sobre el espaciado cambiando este "comportamiento" predeterminado. Se aceptan los siguientes cuatro comandos en las expresiones TeX, siempre dentro del modo matemático:

  1. '\;' representa un espacio relativamente basto.

  2. '\:' representa un espacio relativamente mediano.

  3. '\,' representa un espacio relativamente pequeño.

  4. '\!' representa un espacio negativo relativamente pequeño.

A continuación se ofrece un ejemplo en donde el uso de estos comandos mejora la salida de nuestras expresiones matemáticas.

Tabla A-3. Ejemplo

\[ \textrm{es mejor usar} \]
\[ \int\!\!\!\int_{D} g(x,y) \, dx dy \]
\[ \textrm{en lugar de} \]
\[ \int\int_{D} g(x,y) dx dy \]
		

Tipos, estilos y tamaños de letra

Texto normal. Todas los caracteres que escribimos en el modo matemático se consideran como nombres de variables y como tales, se simbolizan con un tipo de fuente apropiado, en letras cursivas. Es por esto que, en el caso de que querramos escribir texto dentro del modo matemático existe un comando apropiado para esto. Se trata de \textrm{...} y todo lo que escribamos dentro de las llaves, será tomado como texto normal y no como notación matemática respetándose también el espaciado entre caracteres.

Por otro lado, si por alguna razón queremos resaltar el nombre de alguna variable matemática en negritas, podremos hacerlo con el comando \boldsymbol{...}[16]. Una vez más, todo lo que se encuentre entre las llaves quedará en negritas y en modo cursivo. Si por alguna razón queremos que cierto símbolo quede en negritas pero no cursivo, podremos usar análogamente a lo anterior, el comando \mathbf{}.

Tabla A-4. Ejemplo

\[ 
\textrm{Sea }f: \Re \rightarrow \Re 
\] 

\[ 
\textrm{Se dice que } f \textrm{ es continua en } 
\mathbf{x_0} \textrm{ si y sólo si } 
\] 

\[
\forall \epsilon>0\textrm{, } \exists \delta>0 
\textrm{ tal que si } x \in [x_0-\delta, x_0+\delta] 
\] 

\[ 
\Longrightarrow f(x) \in [f(x_0-\delta), f(x_0+\delta)] 
\]

		  

En el modo matemático, TeX elige el tamaño de la fuente de acuerdo al contexto. Por ejemplo, los superíndices son compuestos con una fuente más pequeña a la de su base. Si deseamos componer parte de una ecuación en fuente romana (no cursiva-itálica), no se debe usar el comando \textrm visto anteriormente, dado que el mecanismo de elección de tamaño apropiado para la fuente no funcionará[17]. Esto se da así ya que en realidad, el comando \textrm lo que hace es escapar temporalmente del modo math al modo text. Para mantener en funcionamiento el comportamiento "inteligente" de TeX en la elección del tamaño de las fuentes, úsese en lugar de \textrm el comando \mathrm. Pero cuidado! ambos comandos no son iguales. \mathrm sólo funcionará correctamente con expresiones cortas, el espaciado no estará activo y los caracteres con acentos tampoco funcionarán.

Unas palabras en cuanto al tamaño de fuente. Supóngase que queremos representar expresiones matemáticas que involucren delimitadores como paréntesis curvos, rectos, llaves o flechas. De acuerdo con su profundidad el delimitador debería tener un tamaño particular. TeX tiene una manera de elegir "inteligentemente" este tamaño.

Si por ejemplo insertamos el comando \left justo antes de un delimitador de apertura o el comando \right justo antes de un delimitador de cierre, TeX podrá determinar correctamente el tamaño de dichos delimitadores. Nótese que se deberá cerrar cada \left con su correspondiente \right y que el tamaño se determinará correctamente si ambos delimitadores de apertura y de cierre están en la misma línea. Existe un caso especial y es cuando no queremos que aparezca nada como delimitador de cierre. En ese caso se podrá usar el delimitador de cierre "invisible" con el comando "\right.".

Tabla A-5. Ejemplo

\begin{displaymath}
1 + \left( \frac{1}{ 1-x^{2} }
\right) ^3
\end{displaymath}
		  

En algunos casos será necesario especificar manualmente el tamaño correcto de algún delimitador matemático. TeX también nos dejará hacer esto por medio de los comandos \big, \Big, \bigg y \Bigg. Se deberá insertarlos como prefijos del delimitador en cuestión.

Tabla A-6. Ejemplo

$\Big( (x+1) (x-1) \Big) ^{2}$
$\big(\Big(\bigg(\Bigg($
$\big\}\Big\}\bigg\}\Bigg\}$
$\big\|\Big\|\bigg\|\Bigg\|$
		

Algunos comandos para el uso matemático

  • \cdots. Produce tres "puntos suspensivos" como estos

  • \ddots. Produce una especie de tres "puntos suspensivos" en diagonal como estos

  • \vdots. Produce una especie de tres "puntos suspensivos" verticales como estos

  • \frac{num}{den}. Produce la fracción con numerador 'num' y denominador 'den'.

  • \ldots. Produce tres puntos suspensivos como los siguientes

  • \overbrace{texto}. Hace que la cadena de texto 'texto' quede con una llave encima, como por ejemplo

  • \underbrace{texto}. Hace que la cadena de texto 'texto' quede con una llave por debajo, como por ejemplo

  • \overline{texto}. Hace que la cadena de texto 'texto' quede con una línea por encima, como por ejemplo

  • \underline{texto}. Hace que la cadena de texto 'texto' quede con un subrallado, como por ejemplo

  • \sqrt[r]{arg}. representa la raíz r-ésima del argumento. Por ejemplo, se escribe \sqrt[3]{x} dentro del modo matemático

B. Descripción de los archivos del software DBTexMath

C. Material sobre el tema

D. Tablas de símbolos matemáticos[18]

Tabla D-1. Acentos

\hat{a}

\check{a}

\tilde{a}

\acute{a}

\grave{a}

\dot{a}

\ddot{a}

\breve{a}

\bar{a}

\vec{a}

\widehat{A}

\widetilde{A}

Tabla D-2. Letras griegas minúsculas

\alpha

\theta

o

\upsilon

\beta

\vartheta

\pi

\phi

\gamma

\iota

\varpi

\varphi

\delta

\kappa

\rho

\chi

\epsilon

\lambda

\varrho

\psi

\varepsilon

\mu

\sigma

\omega

\zeta

\nu

\varsigma

 

\eta

\xi

\tau

 

Tabla D-3. Letras griegas mayúsculas

\Gamma

\Lambda

\Sigma

\Psi

\Delta

\Xi

\Upsilon

\Omega

\Theta

\Pi

\Phi

 

Tabla D-4. Relaciones Binarias[19][20]

<

>

=

\equiv

\geq or \ge

\leq or \le

\ll

\gg

\doteq

\prec

\succ

\sim

\preceq

\succeq

\simeq

\subset

\supset

\approx

\subseteq

\supseteq

\cong

\sqsubseteq

\sqsupseteq

\bowtie

\in

\ni , \owns

\propto

\vdash

\dashv

\models

\mid

\parallel

\perp

\smile

\frown

\asymp

:

\notin

\neq or \ne

Tabla D-5. Flechas[21]

\leftarrow or \gets

\longleftarrow

\uparrow

\rightarrow or \to

\longrightarrow

\downarrow

\leftrightarrow

\longleftrightarrow

\updownarrow

\Leftarrow

\Longleftarrow

\Uparrow

\Rightarrow

\Longrightarrow

\Leftrightarrow

\Leftrightarrow

\Longleftrightarrow

\Updownarrow

\mapsto

\longmapsto

\nearrow

\hookleftarrow

\hookrightarrow

\searrow

\leftharpoonup

\rightharpoonup

\swarrow

\leftharpoondown

\rightharpoondown

\nwarrow

\rightleftharpoons

\iff (bigger spaces)

 

Tabla D-6. Operadores Binarios

+

-

 

\pm

\mp

\triangleleft

\cdot

\div

\triangleright

\times

\setminus

\star

\cup

\cap

\ast

\sqcup

\sqcap

\circ

\vee , \lor

\wedge , \land

\bullet

\oplus

\ominus

\diamond

\odot

\oslash

\uplus

\otimes

\bigcirc

\amalg

\bigtriangleup

\bigtriangledown

\dagger

\ddagger

\wr

 

Tabla D-7. Operadores "Grandes"

\sum

\bigcup

\bigvee

\bigoplus

\prod

\bigcap

\bigwedge

\bigotimes

\coprod

\bigsqcup

\bigodot

 

\int

\oint

\biguplus

 

Tabla D-8. Delimitadores

(

)

\uparrow

\Uparrow

[ or \lbrack

] or \rbrack

\downarrow

\Downarrow

\{ or \lbrace

\} or \rbrace

\updownarrow

\Updownarrow

\langle

\rangle

| or \vert

\| or \Vert

\lfloor

\rfloor

\lceil

\rceil

/

\backslash

  

Tabla D-9. Delimitadores "Grandes"

\lgroup

\rgroup

\lmoustache

\rmoustache

\arrowvert

\Arrowvert

\bracevert

 

Tabla D-10. Otros símbolos[22]

\dots

\cdots

\vdots

\ddots

\hbar

\imath

\jmath

\ell

\Re

\Im

\aleph

\wp

\forall

\exists

\partial

 

'

\prime

\emptyset

\infty

\nabla

\triangle

  

\bot

\top

\angle

\surd

\diamondsuit

\heartsuit

\clubsuit

\spadesuit

\neg or \lnot

\flat

\natural

\sharp


Bibliografía

Allin Cottrell, Documentación del software DBTexMath .

DocBook: The Definitive Guide, Norman Walsh y Leonard Muellner, 1999, 2000, 2001, 2002 O'Reilly & Associates, Inc. , http://docbook.org/ .

La página de información de latex de mi sistema unix. : 'info latex'.

The Not So Short Introduction to LATEX 2, LATEX 2 in 87 minutes, Distribuido electrónicamente bajo la licencia de GNU en inglés y en alemán , Tobias Oetiker, Hubert Partl, Irene Hyna y Elisabeth Schlegl.

http://en.wikipedia.org/wiki/TeX.

Notas

[1]

Existe una buena descripción del uso conjunto de estas tres herramientas y sus ventajas en http://es.tldp.org/Tutoriales/DOCBOOK

[2]

Siglas de What you see is what you get, y que se refieren a la edición electrónica de textos en software como Microsoft Word, WordPerfect, OpenOffice Writer, etc.

[3]

TeX es un programa de computadoras creado por Donald E. Knuth. La palabra TeX viene del griego tex que quiere decir arte o tecnología. Su propósito fue la composición de textos y fórmulas matemáticas, aunque actualmente va un poco más allá de esto. TeX se originó a finales de 1970 debido a que Knuth se decepcionó de como fue impreso por la Sociedad Americana de Matemáticos (AMS) el segundo volumen de su famoso libro "The Art of Computing" (ver http://www.tug.org/whatis.html). Hoy en día, TeX es un proyecto muy maduro a tal punto que el propio Knuth proclama que es virtualmente libre de errores, y es por esto que su versión actual es el número , o sea 3.1415... Es más, se dice que el propio Knuth ofrece una recompensa que sube un centavo de dólar americano por día a quién pueda descubrir un fallo (bug) en su programa. La recompensa actual es de $327.68.

[4]

LaTeX es un paquete de macros creado por Leslie Lamport cuyo objetivo es permitir que la composición e impresión de documentos sea hecha de un modo predefinido y profesional. Usa el formateador TeX como su motor de composición tipográfica.

[5]

Organization for the Advancement of Structured Information Standards: la entidad responsable del mantenimiento y desarrollo de DocBook

[6]

Ver www.docbook.org/xml/mathml

[7]

Sin embargo en las hojas XSL el soporte a MathML existe y es descrito en http://www.sagehill.net/docbookxsl/MathML.html

[8]

Aunque el término meta-lenguaje no es incorrecto, hace más fácil al usuario entender el cómo se define sintácticamente DocBook. Sin embargo, formalmente se dice que tanto "SGML como XML son estándares internacionales que describen cómo definir lenguajes de etiquetas" (mark-up languages)

[9]

"Markup Requirements and Generic Style Specification for Electronic Printed Output and Exchange of Text" (Especificación de los requerimientos de marcado y estilo genérico para la publicación electrónica e intercambio de textos). Fue el primer lenguaje para producir hojas de estilo y fue creado por el Departamento de Defensa de Estados Unidos para estandarizar su documentación militar.

[10]

El segundo lenguaje para hacer hojas de estilo. Fue creado por ISO (International Organization for Standarization) y su nombre proviene de "Document Style Semantics and Specification Language" (algo así como "Lenguaje de Especificación y Estilo Semántico de Documentos").

[11]

Es un tipo de lenguaje de estilo adjunto, en un principio pensado para HTML, pero actualmente también pensado para XML. Fue creado por W3C CSS Working Group.

[12]

Extensible Style Language (Lenguaje de Estilo Extensible. Fue creado por el proyecto XML.

[13]

Esta es la hoja de estilo del Proyecto de documentación de Linux (The Linux Documentation Project, TLDP), modificada por Jaime Davila.

[14]

La última versión estable de la DTD Docbook al momento de escribirse este documento.

[15]

html2db es software libre y se puede obtener de http://www.cise.ufl.edu/~Eppadala

[16]

Que se incluye en el paquete amsbsy del software amsmath.

[17]

Esto no es verdad si tenemos instalado el paquete AMS-LATEX dado que en él se corrige este problema.

[18]

Existen otros muchos símbolos en paquetes como latexsym o amslatex. Sin embargo, no conozco una manera de que Jade los pueda convertir sin problemas a formato HTML. No hay problemas con salidas PDF. Si algún usuario más experimentado sabe como hacer esto, me encantaría que me enviara su sugerencia para enriquecer este documento.

[19]

Usar el paquete latexsym para usar estos símbolos. Nota: para hacer esto, en un documento latex insertar el comando \usepackage{latexsym}.

[20]

Para todos estos símbolos, se puede producir la negación correspondiente agregando un comando \not como prefijo al comando del símbolo respectivo.

Por ejemplo, \in simboliza . Luego, tenemos que \notin simboliza

[21]

Usar el paquete latexsym para usar estos símbolos. Nota: para hacer esto, en un documento latex insertar el comando \usepackage{latexsym}.

[22]

Usar el paquete latexsym para usar estos símbolos. Nota: para hacer esto, en un documento latex insertar el comando \usepackage{latexsym}.