Babel - Diferencia entre idiomas
Este simple archivo que muestra un error en inglés y se compila muy bien en portugués:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
¿Por qué se \rodefiniría en un idioma y no en el otro? ¿Cómo se sabe lo que se \rodefine en portugués? ¿Qué otros comandos se definen de esta manera? No se menciona \roen el manual de Babel.
Respuestas
¿Cómo se sabe lo que se
\rodefine en portugués?
Para saber cómo se define un comando, use \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 ; y (c) se supone que debe usarse en modo texto, no en modo matemático.\def\ro{$^{\rm o}$}
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 que se \romuestra arriba, te dejaré adivinar cómo se 1\ro, 2\ro, 3\rove la salida de .
Claramente, entonces, \roestá destinado a ser utilizado para "convertir" (¡en un sentido tipográfico!) Un número cardinal en un número ordinal. Observe que si bien \rono toma un argumento explícito, no está destinado a ser utilizado por sí mismo, sino más bien junto con un número.
Por cierto, el portugués conoce tanto los ordinales de forma masculina como los de forma 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é se
\rodefiniría en un idioma y no [en] el otro?
Ummm, ¿porque las necesidades tipográficas difieren entre idiomas?
Por supuesto, en la composición tipográfica en inglés no hay una necesidad aparente de \rola \ramacro o la macro. "Primero, segundo, tercero" definitivamente no están escritos en forma abreviada como 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}en un documento en inglés. Además, el inglés no presenta una distinción entre ordinales masculinos y femeninos (¡y mucho menos neutrales!).
Hay varios paquetes de LaTeX que simplifican y estandarizan la composición tipográfica de números ordinales. Uno de estos paquetes es fmtcount de Nicola Talbot , que proporciona la macro y que presenta una gran cantidad de adaptaciones específicas del idioma. (Aparte: el paquete proporciona muchas otras facilidades además de la macro ...) Efectivamente,\ordinalnumfmtcountordinalnum
\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 script de nivel de superíndice, así como dos instancias del número "2" seguido de una letra de tamaño de script de nivel de superíndice "a". (Te dejaré adivinar qué \ordinalnum{2}produce si babelestá cargado con la opción english).
Es útil recordar que el babelpaquete ha existido durante mucho tiempo y, por lo tanto, muchas de babellas funciones de composición tipográfica específicas del lenguaje se crearon mucho antes de la llegada de paquetes como fmtcount. Sin duda, la heterogeneidad específica del lenguaje que uno encuentra en la babelactualidad es mucho mayor que si el paquete se escribiera desde cero hoy en día de manera descendente. (Aparte: si el portugesmódulo de babelse escribiera hoy, probablemente también se reemplazaría y con y , respectivamente, pero ese es un problema diferente).\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}
Varios archivos de definición de idiomas para babelestán mal documentados.
Si lo hace texdoc babel-portuges(en una terminal o haciendo clic en el enlace), verá, al final,
a pesar de que se afirma que el archivo LDF ha sido revisado muy recientemente. Supongo que estas definiciones se agregaron hace mucho tiempo, al comienzo de la babelhistoria. Varios LDF tienen definiciones ad hoc similares para varios lenguajes y es realmente una molestia, porque podrían entrar en conflicto con los comandos del usuario o del paquete.
Digamos 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. \usepackage[portuges]{babel}Sin embargo, al agregar , la compilación se detendría: un documento como
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
se detendrí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 la eliminación de estas definiciones de portuges.ldfrompería los documentos existentes en portugués usando \ord, \orda, \roo \ra.
Pero para su documento, puede buscar en el documento específico qué significa el comando ofensivo y decidir si lo necesita o no. Por ejemplo, con \ord, puede 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.
En general, recomendaría no usar comandos heredados de babelarchivos de definición.
Los comandos estándar para esto son \textordmasculiney \textordfeminine. Estos funcionan en cualquier idioma y no es necesario babel.
También puede escribir los caracteres ª y º en su editor de la misma forma que lo haría normalmente. Funcionarán en cualquier versión reciente de LaTeX.
Todos estos comandos son para el modo de 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 deba agregar las siguientes líneas a su 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 elija una que se ajuste a sus preferencias. Si desea una versión sin subrayado, junto con una fuente que les dé uno, puede redefinir
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}