Babel - Diferença entre idiomas

Sep 18 2020

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 \roseria definido em um idioma e não no outro? Como saber o que é \rodefinido para em português? Que outros comandos são definidos desta forma? Não há menção disso \rono manual do Babel.

Respostas

4 Mico Sep 19 2020 at 06:39

Como saber o que é \rodefinido para em português?

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

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

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

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

Claramente, então, \rodeve ser usado para "converter" (no sentido tipográfico!) Um número cardinal em um número ordinal. Observe que, embora \ronão receba um argumento explícito, não deve ser usado isoladamente, mas sim em conjunto com um numeral.

A propósito, o português conhece os ordinais tanto na forma masculina como na feminina; para gerar "primeira, segunda, terceira, quarta" de forma abreviada, inserir-se-á 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 \roseria definido em um idioma e não [no] outro?

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

Com certeza, na composição em inglês, não há necessidade aparente de \roou da \ramacro. "Primeiro, segundo, terceiro" definitivamente não são escritos 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 uma distinção entre ordinais masculinos e femininos (muito menos neutros!).

Existem vários pacotes LaTeX que simplificam e padronizam a composição de números ordinais. Um desses pacotes é o fmtcount de Nicola Talbot , que fornece a macro \ordinalnume apresenta um grande número de adaptações específicas de idioma. (À parte: 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 "o" em nível sobrescrito em script, bem como duas instâncias do numeral "2" seguidas por uma letra "a" em nível sobrescrito. (Vou deixar você adivinhar o que \ordinalnum{2}produz se babelestiver 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 do idioma foram criados muito antes do advento de pacotes como fmtcount. Com certeza, a heterogeneidade específica da linguagem que encontramos babelno momento é muito maior do que se o pacote fosse escrito do zero hoje de uma maneira descendente. (À parte: se o portugesmódulo de babelfosse escrito hoje, provavelmente também substituiria e por e , respectivamente, mas esse é um problema diferente.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}

3 egreg Sep 19 2020 at 10:09

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

Se você fizer isso texdoc babel-portuges(em um terminal ou clicando no link), verá, bem no final,

apesar do arquivo LDF ter sido revisado recentemente. Acho que essas definições foram adicionadas há muito tempo, no início da babelhistória. Vários LDFs têm definições ad hoc semelhantes para vários idiomas e isso é realmente um incômodo, porque eles podem entrar em conflito com os 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}, no entanto, a compilação parava: um documento como

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

\DeclareMathOperator{\ord}{ord}

%[...]

iria parar 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 a remoção dessas definições de portuges.ldfquebraria documentos existentes em Português usando \ord, \orda, \roou \ra.

Mas para o seu documento, você pode pesquisar no documento específico o que o comando incorreto significa e decidir se é necessário 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 de texto.

3 Davislor Sep 19 2020 at 08:51

Eu geralmente não recomendaria o uso de comandos legados de babelarquivos de definição.

Os comandos padrão para isso são \textordmasculinee \textordfeminine. Funcionam em qualquer idioma e não exigem babel.

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

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

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

Em LuaLaTeX ou XeLaTeX, você deseja habilitar fontes modernas com

\usepackage{fontspec}

Seguido por \setmainfont. Muitos pacotes de fontes irão configurar as codificações para você corretamente, no entanto.

Algumas fontes têm uma barra abaixo desses símbolos, e outras não, portanto, escolha uma que corresponda à sua preferência. Se você quiser uma versão sem sublinhado, junto com uma fonte que lhes dê um, você pode redefinir

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