
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 \ro
definido em um idioma e não no outro? Como descobrir o que se \ro
define em português? Que outros comandos são definidos desta forma? Não há menção \ro
no manual do Babel.
Responder1
Como descobrir o que se
\ro
define em português?
Para descobrir como um comando é definido, use \show
. Executando \show\ro
e 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\ro
abreviado. Dada a definição \ro
mostrada acima, deixarei você adivinhar como 1\ro, 2\ro, 3\ro
é a saída de.
Claramente, então, \ro
destina-se a ser usado para “converter” (no sentido tipográfico!) um número cardinal em um número ordinal. Observe que embora \ro
nã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
\ro
definido 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 \ro
ou da \ra
macro. "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 \ordinalnum
e apresenta um grande número de adaptações específicas do idioma. (Além disso: o fmtcount
pacote 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 babel
pacote já existe há muito tempo e, portanto, muitos dos babel
recursos 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 portuges
módulo de babel
fosse 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 babel
estão mal documentados.
Se você fizertexdoc babel-portuges
(em um terminal ou clicando no link), você verá, no final,
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 babel
histó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 \ord
ou \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.ldf
quebraria os documentos existentes em português usando \ord
, \orda
, \ro
ou \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 \ord
pertence apenas ao modo texto.
Responder3
Geralmente, eu não recomendaria o uso de comandos legados de babel
arquivos de definição.
Ocomandos padrão para issoSão \textordmasculine
e \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}}