20.10.10

Acentos, Latin1, Utf-8, LaTeX…

Otra entrada en español, sobre un asunto que lleva tiempo dándome guerra. En algún momento, linux fue cambiando de la codificación de caracteres (encoding) latin1 al estándar actual, utf-8.

Como resultado, los documentos en texto, sobre todo las famosas “fuentes LaTeX, que nunca hay que cambiar porque son texto” pueden cambiar después de todo (a efectos prácticos). En algunos sitios, como mindspill, he visto por fin cómo determinar y cambiar la codificación.

Primeramente, un viejo conocido, el comando file, puede proporcionarnos la codificación de un archivo (si es que está definida):

$ file -i *.tex
prueba1.tex: text/plain charset=utf-8
prueba2.tex: text/plain charset=utf-8
prueba3.tex: text/plain charset=iso-8859-1
prueba4.tex: text/plain charset=utf-8

Lo he aplicado a una serie de archivos que contienen acentos, todos utf-8 menos uno (iso-8859-1 es la manera correcta de decir latin1). Para convertir de uno a otro está el comando iconv (que viene con el paquete glibc en mi distribución linux):

iconv -f utf-8 -t latin1 prueba2.tex > prueba3.tex

“-f” es “from”, “-t”, “to”, y hay que redireccionar (“pipetear”) la salida del comando hacia otro fichero. iconv -l devuelve una larga lista de codificaciones posibles.

Hay algunos aspectos que todavía no comprendo bien. Por ejemplo, cómo distintos editores, como emacs y vi, distinguen la codificación automáticamente y por qué a veces no se ponen de acuerdo. Puede que se deba incluso a que vi se corre en modo de texto, desde una terminal y emacs, por lo general, es gráfico. Esto está relacionado con una vieja solución a este problema (“export TERM=C”) que, por lo visto, ya no es necesaria.

Notas:

El comando LaTeX para utf8 es:

\usepackage[utf8]{inputenc} % (utf8x si hay problemas) 

y el comando para latin1:

\usepackage[latin1]{inputenc} \inputencoding{latin1} 

en todo caso, siempre está bien, para guionado y otros asuntos:

\usepackage[spanish]{babel}

Además, se puede probar con estos exports desde línea de comandos, antes de lanzar vi o emacs (“emacs -nw” para modo texto):

export LANG=latin1 export LANG=utf-8 export LANG=C

No hay comentarios:

Publicar un comentario