Babel - Diferencia entre idiomas

Babel - Diferencia entre idiomas

Este archivo simple que muestra un error en inglés y se compila perfectamente en portugués:

\documentclass{report}

\usepackage[english]{babel}
%\usepackage[portuges]{babel}

\begin{document}
\ro
\end{document}

¿Por qué \rose definiría en un idioma y no en el otro? ¿Cómo saber qué se \rodefine en portugués? ¿Qué otros comandos se definen de esta manera? No se menciona \roen el manual de Babel.

Respuesta1

¿Cómo saber qué se \rodefine en portugués?

Para saber cómo se define un comando, utilice \show. Al ejecutar \show\roy buscar en el archivo de registro, se encuentra:

> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro

Esto dice que (a) \roes una macro, no una primitiva TeX; (b) su definición se reduce a \def\ro{$^{\rm o}$}; y (c) se supone que debe usarse en modo texto, no en modo matemático.

No soy un experto en portugués, pero creo que "primero, segundo, tercero" se escribe en forma larga como "primeiro, segundo, terceiro" y, usando la notación de entrada LaTeX/babel, como 1\ro, 2\ro, 3\roen taquigrafía. Dada la definición de \romostrada arriba, te dejaré adivinar cómo 1\ro, 2\ro, 3\rose ve el resultado.

Claramente, entonces, \roestá destinado a "convertir" (¡en un sentido tipográfico!) un número cardinal en un número ordinal. Observe que, si bien \rono requiere un argumento explícito, no debe usarse por sí solo, sino más bien junto con un número.

Por cierto, el portugués conoce los ordinales tanto en forma masculina como femenina; para generar "primeira, segunda, terceira, quarta" en forma abreviada, se ingresarían como 1\ra, 2\ra, 3\ra, 4\ra. Por ejemplo, "a quarta vez" ("la cuarta vez") podría abreviarse como a 4\ra~vez.

¿Por qué \rose definiría en un idioma y no [en] el otro?

Ummm, ¿porque las necesidades tipográficas difieren según el idioma?

Sin duda, en la composición tipográfica en inglés no hay necesidad aparente ni de la macro \roni de la \ramacro. "Primero, segundo, tercero" sondefinitivamente noescrito en forma abreviada como 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}en un documento en idioma inglés. Además, el inglés no presenta una distinción entre ordinales masculinos y femeninos (¡y mucho menos neutrales!).

Existen varios paquetes de LaTeX que simplifican y estandarizan la composición tipográfica de números ordinales. Uno de esos paquetes esNicola Talbot fmtcount, que proporciona la macro \ordinalnumy que presenta una gran cantidad de adaptaciones específicas del idioma. (Aparte: el fmtcountpaquete proporciona muchas otras funciones además de la macro ordinalnum...) Efectivamente,

\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}

dos veces produce el número "1" seguido de una letra "o" de tamaño de escritura a nivel de superíndice, así como dos instancias del número "2" seguido de una letra "a" de tamaño de escritura a nivel de superíndice. (Te dejaré adivinar qué \ordinalnum{2}produce si babelse carga con la opción english).

Es útil recordar que el babelpaquete existe desde hace mucho tiempo y, por lo tanto, muchas de babellas funciones de composición tipográfica específicas del idioma se crearon mucho antes de la llegada de paquetes como fmtcount. Sin duda, la heterogeneidad lingüística específica que encontramos actualmente babeles mucho mayor que si el paquete se escribiera hoy desde cero y de manera vertical. (Aparte: si el portugesmódulo de babelse escribiera hoy, probablemente también se reemplazaría \def\ro{$^{\rm o}$}and \def\ra{$^{\rm a}$}con \def\ro{\textsuperscript{o}}y \def\ra{\textsuperscript{a}}, respectivamente, pero ese es un tema diferente).

Respuesta2

Varios archivos de definición de idioma babelestán mal documentados.

Si lo hacestexdoc babel-portuges(en una terminal o haciendo clic en el enlace), verá, al final,

ingrese la descripción de la imagen aquí

a pesar de que se afirma que el expediente LDF ha sido revisado muy recientemente. Supongo que estas definiciones se agregaron hace mucho tiempo, al comienzo de babella historia. Varios LDF tienen similaresad hocdefiniciones para varios idiomas y es realmente una molestia, porque podrían entrar en conflicto con los comandos del usuario o del paquete.

Supongamos que define en su documento en inglés un comando llamado \ordo \ro(el primero podría usarse para un operador matemático, por ejemplo): el comando funcionará bien. Sin embargo, al agregar \usepackage[portuges]{babel}, la compilación se detendría: un documento como

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}

\DeclareMathOperator{\ord}{ord}

%[...]

pararía con

! LaTeX Error: Command \ord already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.6 \DeclareMathOperator{\ord}{ord}

¿Existen soluciones alternativas? Tenga en cuenta que eliminar estas definiciones portuges.ldfrompería los documentos existentes en portugués que utilizan \ord, \ordao .\ro\ra

Pero parasudocumento, puede buscar en el documento específico qué significa el comando infractor y decidir si lo necesita o no. Por ejemplo, con \ord, podría agregar una solución alternativa como

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}

% fix an incompatibility
\let\babelord\ord
\DeclareRobustCommand{\ord}{%
  \ifmmode\expandafter\ordop\else\expandafter\babelord\fi
}
\DeclareMathOperator{\ordop}{ord}

%[...]

porque el original \ordsolo pertenece al modo texto.

Respuesta3

En general, recomendaría no utilizar comandos heredados de babelarchivos de definición.

Elcomandos estándar para estoson \textordmasculiney \textordfeminine. Estos funcionan en cualquier idioma y no requieren babel.

También puedes escribir los caracteres ª y º en tu editor de la misma manera que lo harías normalmente. Funcionarán en cualquier versión reciente de LaTeX.

Todos estos comandos son para modo texto. Si por alguna razón desea usarlos en modo matemático, deberá ajustar la palabra en un comando como \textnormal{1º}. Esto vuelve al modo de texto.

En las versiones modernas de PDFTeX, todos estos comandos deberían funcionar de forma predeterminada. En instalaciones más antiguas, es posible que necesites agregar las siguientes líneas al preámbulo:

\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}

En LuaLaTeX o XeLaTeX, en su lugar desea habilitar fuentes modernas con

\usepackage{fontspec}

Seguido por \setmainfont. Sin embargo, muchos paquetes de fuentes configurarán las codificaciones correctamente.

Algunas fuentes tienen una barra debajo de estos símbolos y otras no, así que elige una que se ajuste a tus preferencias. Si desea una versión sin subrayado, junto con una fuente que lo proporcione, puede redefinir

\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}

información relacionada