Pensamientos y Libros

25 noviembre 2007

Utilizar Latex en documentos Docbook

Filed under: Computación,Edición,Linux,Matemáticas — Toni Cebrián @ 19:40

 

 

Instrucciones

El formato XML ha sido una gran idea. Un formato sencillo y fácilmente extensible utilizado para describir datos con multitud de aplicaciones. Yo por ejemplo lo utilizo para redactar estos artículos utilizando el esquema publicado de Docbook, luego los convierto a HTML utilizando unas hojas de estilo en formato XSL y finalmente las subo a esta web. Es una solución muy flexible y que me evita tener que andar pensando en formatos y tipos de letras, simplemente hay que escribir contenido. Sin embargo viene con un peaje a pagar, el tener que lidiar con una sintaxis farragosa cuando hay que escribir el XML “a pelo” situación que aparece a menudo cuando queremos escribir ecuaciones y fórmulas matemáticas para la web utilizando el formato MathML. En este artículo voy a explicar cómo podemos ahorrarnos parte de la farragosa tarea de escribir matemáticas en un documento Docbook utilizando el truco de escribir las matemáticas en Latex dentro del documento y utilizar un filtro que nos convierta ese Latex a MathML antes de hacer cualquier conversión.

 

 

Instalación

 

  • Lo primero es bajarse el software que nos hará la conversión de Latex a MathML desde la página de itexToMML. Existen versiones para Mac y para Linux. En lo que sigue del artículo me referiré a la instalación en Linux. Descomprimimos el tar.gz que contiene los binarios y los fuentes del programa.
  • El programa utiliza el flujo de entrada al programa y traduce todos los entornos matemáticos Latex a su equivalente MathML. Para ilustrarlo creamos el fichero Docbook de ejemplo que se muestra en el siguiente listado.
    <?xml version="1.0" encoding="UTF-8"?><section version="5.0" xmlns="http://docbook.org/ns/docbook"         xmlns:xlink="http://www.w3.org/1999/xlink"xmlns:xi="http://www.w3.org/2001/XInclude"
    
    xmlns:svg="http://www.w3.org/2000/svg"
    
    xmlns:mml="http://www.w3.org/1998/Math/MathML"
    
    xmlns:html="http://www.w3.org/1999/xhtml"
    
    xmlns:db="http://docbook.org/ns/docbook">
    
    <title>La función más famosa</title>
    
    <para>La función que aquí mostramos, $E=mc^2$, se ha convertido en un
    
    icono cultural aunque muy pocos comprendan su verdadero significado.</para>
    
    </section>
  • A continuación lo que hay que hacer es filtrar este flujo de texto con nuestro programa itex2MML para que convierta las funciones latex en su equivalente MathML. En línea de comandos hacemos:cat Ejemplo.xml | itex2MML > Exemplo-procesado.xmly el archivo original queda convertido en el que puede verse en el siguiente listado.
    <?xml version="1.0" encoding="UTF-8"?><section version="5.0" xmlns="http://docbook.org/ns/docbook"xmlns:xlink="http://www.w3.org/1999/xlink"
    
    xmlns:xi="http://www.w3.org/2001/XInclude"
    
    xmlns:svg="http://www.w3.org/2000/svg"
    
    xmlns:mml="http://www.w3.org/1998/Math/MathML"
    
    xmlns:html="http://www.w3.org/1999/xhtml"
    
    xmlns:db="http://docbook.org/ns/docbook">
    
    <title>La función más famosa</title>  <para>La función que aquí mostramos, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>E</mi><mo>=</mo><msup><mi>mc</mi> <mn>2 </mn></msup></math>, se ha convertido en un
    
    icono cultural aunque muy pocos comprendan su verdadero significado.</para>
    
    </section>
  • Una vez tenemos la fórmula convertida a MathML lo que tenemos es un documento Docbook bien formado y lo único que nos queda es aplicarle las hojas de estilo y las transformaciones necesarias para obtener nuestros PDFs o páginas html. El resultado puede verse en el siguiente párrafo.La función que aquí mostramos,
    E = mc 2 , se ha convertido en un icono cultural aunque muy pocos comprendan su verdadero significado.

 

Caution

Es importante que en las transformaciones a XHTML el fichero destino no tenga extensión .html pues en dicho caso las fórmulas no se muestran correctamente. Utilizar la extensión xhtml o xml para visualizar el contenido correctamente.

Sobre WordPress

WordPress elimina el contenido específico de MathML al guardar el post así que estoy tratando de pensar cómo rodear y solucionar este problema.

5 noviembre 2007

Configurar Firefox para que pueda renderizar MathML en Linux

Filed under: Computación,Edición,Linux,Matemáticas — Toni Cebrián @ 23:35

 

 

Instrucciones

Para poder visualizar MathML al utilizar el navegador Firefox en Linux es necesario previamente haber instalado las fuentes que permitan hacer el renderizado necesario. Para ello, seguimos los siguientes pasos:

  • En Ubuntu Gutsy el navegador está compilado con soporte para Xft (se comprueba poniendo about:buildconfig en la dirección y comprobando que tiene el –enable-xft como opción de compilación) así que descargamos las fuentes que se encuentran http://www.mozilla.org/projects/mathml/fonts/bakoma/texcm-ttf.zip y en http://support.wolfram.com/mathematica/systems/windows/general/files/MathFonts_TrueType_41.exe.
  • Las fuentes hay que descomprimirlas y guardarlas en ~/.fonts (crear el directorio si no existe). Las fuentes Mathematica pese a ser un fichero .exe se pueden descomprimir normalmente con el comando unzip MathFonts_TrueType_41.exe
  • Aún nos faltará una última fuente que no está disponible fácilmente. Si tienes algún sistema Windows a mano copia la fuente Symbol.ttf que se encuentra en el directorio c:\windows\Fonts en nuestro directorio de fuentes ~/.fonts
  • Ya por último para comprobar que todo funciona reinicia el navegador y ya tienes todas las fuentes instaladas. Para comprobarlo utiliza la página de prueba de http://www.w3.org/Math/XSL/pmathml2.xml

Todos estos pasos parece que no habrá que hacerlos en el futuro pues se están preparando unas fuentes que serán de libre distribución y vendrán incorporadas en nuestras distribuciones linux. Más información en http://www.mozilla.org/projects/mathml/fonts/

29 noviembre 2006

Como eliminar los márgenes blancos al imprimir documentos PDF

Filed under: Computación,Edición — Toni Cebrián @ 8:43

Muchas veces me he encontrado con el problema de tener que imprimir un documento bastante extenso pero que sabía a ciencia cierta que su uso iba a ser efímero. Otras veces he querido imprimir un libro en el menor número de páginas posibles para hacerlo lo menos pesado posible. En todos estos casos la solución siempre pasa por imprimir más de una hoja por cara y utilizar impresión a doble cara. El problema aparece cuando estamos tratando de imprimir un PDF con unos márgenes bastante grandes que hacen que al imprimir varías páginas por cara la porción del papel que se dedica a texto sea tan pequeña que las fuentes utilizadas hacen prácticamente imposible una lectura cómoda.

Por tanto el objetivo de este post es enseñar cómo desde Linux se pueden transformar esos documentos de forma que se eliminen los márgenes y la impresión sea más amigable.

  1. Lo primero será convertir los PDF a PostScript. Este paso no tendría porqué ser así pero he observado que muchas veces esto hace que todo funciones como debiera. Si tu documento ya es PostScript, obviamente puedes saltarte este paso.
    Instálate el Ghostscript para la manipulación de PostScript. Incluye la aplicación pdf2ps que es la que utilizaremos para la conversión. En mi Mandriva y desde el usuario root:
    urpmi ghostscript-common
    Una vez instalado simplemente hacer la convesión
    pdf2ps mi_fichero.pdf
    Esto nos generará el fichero mi_fichero.ps que utilizaremos para la conversión.
  2. A continuación instalamos la aplicación psbind que tiene como curiosa descripción del paquete psbind – Transforma archivos PostScript para salvar árboles y reducir la culpa. Al igual que antes:
    urpmi psbind
    Si no disponemos del paquete podemos ir a la página del programa y descargarnos el paquete correspondiente a nuestra distribución.
  3. Ya sólo queda utilizar el comando con nuestro PS generado:
    psbind --tumble -2 --paper=a4 -P mi_impresora mi_fichero.ps
    Donde –tumble indica que las páginas queremos que las encuaderne por el margen corto, -2 indica que queremos dós páginas por cara (subir el número para imprimir manuales de referencia), -paper el tamaño del papel y por último la impresora a donde queremos enviar el archivo a imprimir.

Con eso, espero que seas capaz de imprimir eliminando los márgenes en el 90% de las veces. El otro 10% problemático viene motivado porque el psbind lo único que hace es analizar los PS utilizando como muestra las 10 primeras páginas (se le pueden especificar otras) y trata de deducir las dimensiones mínimas de una caja que sea el contorno del texto para todo el documento. Ocurre a veces que la conversión de PDF a PS no facilita que el programa sea capaz de delimitar dicha caja y que los márgenes queden como están, así que en el futuro espero modificar esta entrada con más trucos y reducir ese 10% de casos fallidos.

Blog de WordPress.com.