Curso no convencional de LaTeX: a vueltas con el idioma

Hoy os voy a hablar de algo en lo que suele haber bastante lío en LaTeX: la configuración de idioma. Creo que he conseguido más o menos entender cómo va, así que voy a intentar explicar qué paquetes tenemos que usar y por qué. Es una entrada que entra bastante en detalle, porque me gusta saber el motivo de hacer las cosas, si no os apetece leer toda la chapa (es mucha chapa) podéis ir directamente al resumen final.

Ya sé que me estoy saltando el índice del curso a la torera, ved esto como un interludio, al fin y al cabo el idioma hay que configurarlo tarde o temprano. Yo prefiero temprano.


La cuestión es que si no escribimos en inglés, tenemos que configurar LaTeX para que se adapte a nuestro idioma. Para ello, necesitamos elegir un paquete de idioma y una codificación.

El paquete de idioma

El paquete de idioma realiza dos funciones principales:

  • Gestiona que las palabras claves como Capítulo o la fecha se escriban en el idioma que hemos elegido.

  • Aplica la silabación (por donde nos parte una palabra cuando no cabe en la línea) correcta para el idioma concreto, así como otras reglas tipográficas.

Dependiendo de qué compilador estemos usando tendremos que usar un paquete de idioma u otro:

  • Si usamos pdflatex, necesitamos cargar el paquete babel con el idioma elegido como opción, por ejemplo:
\usepackage[spanish]{babel}
  • Si usamos compiladores más modernos como xelatex o lualatex, podemos usar el paquete polyglossia1. Este paquete es más simple y ligero aprovechando que estos compiladores ya gestionan la codificación y las fuentes de por sí. En este caso no cargamos el idioma como opción, sino que lo elegimos con el comando \setmainlanguage:
\usepackage{polyglossia}
\setmainlanguage{spanish}

Redefinir palabras claves

Nos puede pasar que no nos guste la palabra que el paquete de idioma utiliza para referirse a cierta parte del documento, por ejemplo, utilizando la opción de español LaTeX llamará Cuadro a las tablas. Si es así, podemos redefinir el nombre del elemento. Es sencillo, tenemos que usar \renewcommand con la siguiente estructura:

\renewcommand{Comando a redefinir}{Nueva definición}

Aquí, por supuesto, hay diferencias si usamos babel o polyglossia.

El caso babel

Si usamos babel, el comando que redefiniremos tendrá un nombre formado por el nombre del idioma y el nombre de la palabra clave. Por ejemplo, para cambiar Cuadro por Tabla en español haríamos:

\renewcommand{\spanishtablename}{Tabla}

Del mismo modo, si queremos modificar cómo llama LaTeX a las figuras en francés, redefiniríamos el comando \frenchfigurename y así con todos2.

En el manual del estilo spanish del paquete babel tenemos esta tabla que nos dice cómo llama a cada uno de los elementos:

En el caso concreto de las tablas y para pdflatex podemos cargar el paquete babel con la opción es-tabla y nos evitamos problemas, pero para el resto de elementos tenemos que hacer lo que os cuento.

El caso polyglossia

Si usamos polyglossia, en su manual dicen que tenemos que cambiar el nombre de la palabra clave con \gappto (o \addto para que sea compatible con babel). Por ejemplo:

\gappto\captionsspanish{\renewcommand{\tablename}{Tabla}}

Texto en diferentes idiomas

La última cosa que os voy a contar sobre los paquetes de idioma es cómo cambiamos de idioma en un mismo documento.

El caso babel

En este caso simplemente cargamos como opciones del paquete babel todos los idiomas que vamos a usar en el documento:

\usepackage[idioma1, idioma2]{babel}

Los vamos activando en el texto con \selectlanguage:

\usepackage[spanish, english]{babel}
\selectlanguage{spanish}

\begin{document}

  \section{Sección en español}

  \selectlanguage{english}
  \section{Section in english}

\end{document}  

El caso polyglossia

Si estamos usando polyglossia, cargamos el paquete y establecemos los idiomas en el preámbulo de la siguiente manera:

\usepackage{polyglossia}
\setmainlanguage[Opciones]{Idioma} % Idioma principal
\setotherlanguage[Opcions]{Idioma} % Otro idioma

Si queremos cambiar el idioma de un trocito pequeño de texto usaremos el comando \textIDIOMA. Por ejemplo, para poner la fecha en español haríamos:

\textspanish{\today}

Si vamos a escribir un pedazo de texto largo en otro idioma, es preferible que usemos el entorno correspondiente al idioma;

\begin{spanish}
  Texto en español
\end{spanish}

La codificación

La otra parte importante a la hora de configurar el idioma en LaTeX es la codificación. Hay dos tipos de codificación: la codificación de entrada y la codificación de fuente.

Configurar la codificación de entrada correctamente para nuestro idioma nos permite escribir directamente los caracteres especiales desde el teclado, por ejemplo, poder poner á en lugar de \'a.

Una codificación de fuente correcta, por su parte, sirve para que LaTeX pueda partir las palabras por donde debe y para que podamos buscar en el pdf resultante palabras con caracteres especiales. Si usamos una codificación de fuente inadecuada ocurren cosas curiosas como que no podamos copiar de un pdf palabras que contengan fi. Esto se debe a que LaTeX trata fi como un único carácter, ya que es una ligadura tipográfica.

Aquí nos ocurre exactamente lo mismo que antes, dependiendo del compilador tenemos que usar o no diferentes paquetes.

El caso de pdflatex

El pobre pdflatex es viejecito y necesita ayuda para gestionar la codificación. Nos hacen falta los siguientes paquetes:

  • inputenc: gestiona la codificación de entrada. Como opción le daremos la codificación, para ahorrarnos problemas usaremos UTF 8
  • fontenc: gestiona la codificación de fuente. Para escribir en castellano, usaremos la codificación T1 que contiene los caracteres necesarios de los idiomas que usan alfabeto latino con acentos. Si queréis escribir en cirílico no os vale esta codificación, tendréis que usar la T2A.

  • lmodern o cm-super: la fuente que LaTeX usa por defecto, Computer Modern, no es compatible con la codificación T1 así que necesitaremos usar su variante Latin Modern (paquete lmodern) o la Computer Modern Super (paquete cm-super). Parece ser que la Latin Modern es mejor para los acentos y la CM Super para el cirílico.

Si queremos escribir en español, la parte del idioma en el preámbulo para pdflatex nos queda por lo tanto así:

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

Para cualquier otro idioma con acentos o caracteres especiales necesitamos los mismos paquetes y solo tendríamos que cambiar la opción de idioma en el paquete babel.

Xelatex y otros compiladores modernos

Los compiladores modernos gestionan ellos solitos la codificación de entrada y la de fuente así que no es necesario que añadamos ningún paquete extra. Qué bien ¿eh?

En resumen, ¿qué hago?

Después de todo el rollo que os he soltado, vamos a recapitular y ver qué necesitamos en cada caso.

Para compilar con pdflatex añadimos esto al preámbulo:

\usepackage[spanish,es-tabla]{babel} % Cargamos es-tabla para Tabla en lugar de Cuadro
\usepackage[utf8]{inputenc} % Codificación de entrada
\usepackage[T1]{fontenc} % Codificación de fuente
\usepackage{lmodern} % Fuente compatible

Para compilar con xelatex añadimos esto al preámbulo:

\usepackage{polyglossia}
\setmainlanguage{spanish}
% Para Tabla en lugar de Cuadro
\gappto\captionsspanish{\renewcommand{\tablename}{Tabla}} 

Podemos venirnos arriba, utilizar el paquete ifxetex (que mira si estamos compilando con xelatex), añadir este trocito al preámbulo y asegurar que funciona con los dos compiladores:

% Idioma
\ifxetex
  \usepackage{polyglossia}
  \setmainlanguage{spanish}

  % Tabla en lugar de cuadro
  \gappto\captionsspanish{\renewcommand{\tablename}{Tabla}  
          \renewcommand{\listtablename}{Índice de tablas}}

\else
  \usepackage[spanish,es-tabla]{babel}
  % Para los acentos (xelatex no lo necesita)
  \usepackage[utf8]{inputenc} 
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\fi

Os he añadido la parte de cambiar Cuadro por Tabla pero, por supuesto, no es necesario.


Termino ya con la que probablemente sea la entrada más larga y técnica que he escrito (y voy a escribir) sobre LaTeX. Si no habéis entendido absolutamente nada no os preocupéis, copiad las líneas del último apartado en vuestro preámbulo y en futuro ya lo entenderéis mejor. Y, por supuesto, podéis preguntar todo lo que no esté claro.

Referencias

Manual del paquete babel (pdf)

Estilo spanish para el sistema babel (pdf)

Manual del paquete polyglossia (pdf)

LaTeX font encodings


  1. Digo podemos porque, menos en algún caso especial, babel también funciona. 
  2. A pesar de que leí (y escribí) que esos nombres se cambiaban con el comando \addto en el manual de español de babel dicen que es mejor usar directamente renewcommand y spanishtablename o el nombre que corresponda. 
Anuncios

8 pensamientos en “Curso no convencional de LaTeX: a vueltas con el idioma

    1. Ondiz Autor de la entrada

      LaTeX no es para mucha gente, es denso y agobiante, si no tienes que escribir una tesis o así te puedes librar de él sin problema.

      (Bueno, escribiendo una tesis casi que también, que yo la mía la escribí en Markdown 😀 )

      Responder
  1. Pingback: Lo que he aprendido: variables locales en Emacs | Onda Hostil

  2. Javi

    ¡Fantástico! Mejor explicado, imposible.
    Incides mucho en que pdflatex es antiguo y que xelatex y lualatex funcionan mejor (por lo de la codificación y tal), pero son muy lentos y pesados, ¿no? Yo he notado un cambio enorme entre pdflatex y los otros. ¿Te ha pasado o hago algo mal?

    Responder
    1. Ondiz Autor de la entrada

      Me alegro de que te guste 😀

      Yo suelo compilar con xelatex y sí es cierto que me ha pasado que vaya lento, especialmente en los documentos grandes y el ordenador viejo. Voy a mirar si hay por ahí algo escrito al respecto, tiene que haber alguna razón.

      En cualquier caso, a mí solo por el hecho de que la codificación funcione directamente y poder cambiar de fuente con facilidad me compensa.

      Responder
  3. Pingback: En qué ando: segunda quincena de febrero | Onda Hostil

  4. Pingback: Curso no convencional de LaTeX: formas, tamaños y colores | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s