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.

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:

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

\usepackage[spanish]{babel}
\usepackage{polyglossia}
\setmainlanguage{spanish}

Redefinir palabras clave

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 todos.

Tabla que nos dice cómo llama a cada uno de los elementos. Del manual del estilo spanish del paquete babel

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)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. . 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:

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.

Referencias

Manual del paquete babel (pdf)

Estilo spanish para el sistema babel (pdf)

Manual del paquete polyglossia (pdf)

LaTeX font encodings

Anterior: LaTeX y las ecuaciones, Siguiente: Tamaños, formas y colores [Contenido]