Babel – Diferença entre idiomas

Babel – Diferença entre idiomas

Este arquivo simples que mostra um erro em inglês e compila perfeitamente em português:

\documentclass{report}

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

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

Por que seria \rodefinido em um idioma e não no outro? Como descobrir o que se \rodefine em português? Que outros comandos são definidos desta forma? Não há menção \rono manual do Babel.

Responder1

Como descobrir o que se \rodefine em português?

Para descobrir como um comando é definido, use \show. Executando \show\roe olhando no arquivo de log, encontra-se:

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

Isto diz que (a) \roé uma macro, não uma primitiva TeX; (b) sua definição se resume a \def\ro{$^{\rm o}$}; e (c) deve ser usado em modo texto, não em modo matemático.

Não sou especialista em português, mas acredito que "primeiro, segundo, terceiro" seja escrito em formato longo como "primeiro, segundo, terceiro" e, usando a notação de entrada LaTeX/babel, como 1\ro, 2\ro, 3\roabreviado. Dada a definição \romostrada acima, deixarei você adivinhar como 1\ro, 2\ro, 3\roé a saída de.

Claramente, então, \rodestina-se a ser usado para “converter” (no sentido tipográfico!) um número cardinal em um número ordinal. Observe que embora \ronão aceite um argumento explícito, não deve ser usado sozinho, mas sim em conjunto com um numeral.

Aliás, o português conhece ordinais de forma masculina e feminina; para gerar "primeira, segunda, terceira, quarta" de forma abreviada, deve-se inseri-los como 1\ra, 2\ra, 3\ra, 4\ra. Por exemplo, "a quarta vez" ("a quarta vez") pode ser abreviado como a 4\ra~vez.

Por que seria \rodefinido em um idioma e não no outro?

Hum, porque as necessidades tipográficas diferem entre os idiomas?

Com certeza, na composição tipográfica em inglês não há necessidade aparente do \roou da \ramacro. "Primeiro, segundo, terceiro" sãodefinitivamente nãoescrito de forma abreviada, como 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}em um documento em inglês. Além disso, o inglês não apresenta distinção entre ordinais masculinos e femininos (muito menos neutros!).

Existem vários pacotes LaTeX que simplificam e padronizam a composição tipográfica de números ordinais. Um desses pacotes éNicola Talbot contagem fm, que fornece a macro \ordinalnume apresenta um grande número de adaptações específicas do idioma. (Além disso: o fmtcountpacote oferece muitas outras facilidades além da macro ordinalnum...) Com certeza,

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

duas vezes produz o numeral "1" seguido por uma letra de tamanho de script de nível sobrescrito "o", bem como duas ocorrências do numeral "2" seguido por uma letra de tamanho de script de nível sobrescrito "a". (Vou deixar você adivinhar o que \ordinalnum{2}produz if babelé carregado com a opção english.)

É útil lembrar que o babelpacote já existe há muito tempo e, portanto, muitos dos babelrecursos de composição tipográfica específicos de linguagem do ' foram criados muito antes do advento de pacotes como o fmtcount. Com certeza, a heterogeneidade específica da linguagem encontrada atualmente babelé muito maior do que se o pacote fosse escrito do zero hoje, de cima para baixo. (Além disso: se o portugesmódulo de babelfosse escrito hoje, provavelmente também substituiríamos \def\ro{$^{\rm o}$}and \def\ra{$^{\rm a}$}por \def\ro{\textsuperscript{o}}e \def\ra{\textsuperscript{a}}, respectivamente, mas esse é um problema diferente.)

Responder2

Vários arquivos de definição de idioma babelestão mal documentados.

Se você fizertexdoc babel-portuges(em um terminal ou clicando no link), você verá, no final,

insira a descrição da imagem aqui

apesar de o arquivo LDF ter sido revisado muito recentemente. Acho que essas definições foram acrescentadas há muito tempo, bem no início da babelhistória. Vários LDFs têm similarAd hocdefinições para vários idiomas e é realmente um incômodo, porque podem entrar em conflito com comandos do usuário ou do pacote.

Digamos que você defina em seu documento em inglês um comando chamado \ordou \ro(o primeiro poderia ser usado para um operador matemático, por exemplo): o comando funcionará bem. Ao adicionar \usepackage[portuges]{babel}, entretanto, a compilação pararia: um documento como

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

\DeclareMathOperator{\ord}{ord}

%[...]

pararia com

! 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}

Existem soluções alternativas? Observe que remover essas definições portuges.ldfquebraria os documentos existentes em português usando \ord, \orda, \roou \ra.

Mas peloseudocumento, você pode pesquisar no documento específico o que significa o comando incorreto e decidir se precisa ou não. Por exemplo, com \ord, você pode adicionar uma solução 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 o original \ordpertence apenas ao modo texto.

Responder3

Geralmente, eu não recomendaria o uso de comandos legados de babelarquivos de definição.

Ocomandos padrão para issoSão \textordmasculinee \textordfeminine. Eles funcionam em qualquer idioma e não exigem extensão babel.

Você também pode digitar os caracteres ª e º em seu editor da mesma forma que faria normalmente. Eles funcionarão em qualquer versão recente do LaTeX.

Todos esses comandos são para modo texto. Se por algum motivo você quiser usá-los no modo matemático, será necessário agrupar a palavra em um comando como \textnormal{1º}. Isso volta ao modo de texto.

Nas versões modernas do PDFTeX, todos esses comandos devem funcionar por padrão. Em instalações mais antigas, pode ser necessário adicionar as seguintes linhas ao seu preâmbulo:

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

No LuaLaTeX ou XeLaTeX, você deseja ativar fontes modernas com

\usepackage{fontspec}

Seguido pela \setmainfont. Muitos pacotes de fontes configurarão as codificações corretamente para você.

Algumas fontes têm uma barra abaixo desses símbolos e outras não, então escolha uma que atenda às suas preferências. Se você quiser uma versão sem sublinhado, junto com uma fonte que forneça um, você pode redefinir

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

informação relacionada