Babele - Differenza tra le lingue
Questo semplice file che mostra un errore in inglese e si compila bene in portoghese:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
Perché dovrebbe \roessere definito in una lingua e non nell'altra? Come si scopre cosa si \rodefinisce in portoghese? Quali altri comandi vengono definiti in questo modo? Non vi è alcuna menzione \ronel manuale di Babele.
Risposte
Come si scopre cosa si
\rodefinisce in portoghese?
Per scoprire come viene definito un comando, utilizzare \show. Eseguendo \show\roe cercando nel file di registro, si trova:
> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro
Questo dice che (a) \roè una macro, non una primitiva TeX; (b) la sua definizione si riduce a ; e (c) dovrebbe essere usato in modalità testo, non in modalità matematica.\def\ro{$^{\rm o}$}
Non sono un esperto di portoghese, ma credo che "primo, secondo, terzo" sia scritto in forma lunga come "primeiro, segundo, terceiro" e, usando la notazione di input LaTeX / babel, come 1\ro, 2\ro, 3\roin abbreviazione. Data la definizione di \romostrata sopra, ti farò indovinare 1\ro, 2\ro, 3\rocome appare l'output di .
Chiaramente, quindi, \rodeve essere usato per "convertire" (in senso tipografico!) Un numero cardinale in un numero ordinale. Si noti che sebbene \ronon accetti un argomento esplicito, non è pensato per essere utilizzato da solo ma, piuttosto, in combinazione con un numero.
Per inciso, il portoghese conosce sia gli ordinali di forma maschile che quelli di forma femminile; per generare "primeira, segunda, terceira, quarta" in forma abbreviata, si dovrebbero inserire come 1\ra, 2\ra, 3\ra, 4\ra. Ad esempio, "a quarta vez" ("la quarta volta") potrebbe essere abbreviato in a 4\ra~vez.
Perché dovrebbe
\roessere definito in una lingua e non [nell'altra]?
Ummm, perché le esigenze tipografiche differiscono tra le lingue?
Di sicuro, nella composizione tipografica in lingua inglese non è apparentemente necessario né il \roo la \ramacro. "Primo, secondo, terzo" non sono sicuramente scritti in forma abbreviata come 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}in un documento in lingua inglese. Inoltre, l'inglese non presenta una distinzione tra ordinali maschili e femminili (figuriamoci neutri!).
Esistono diversi pacchetti LaTeX che semplificano e standardizzano la composizione dei numeri ordinali. Uno di questi pacchetti è fmtcount di Nicola Talbot , che fornisce la macro e che presenta un gran numero di adattamenti specifici della lingua. (A parte: il pacchetto fornisce molti altri servizi oltre alla macro ...) Certo, basta,\ordinalnumfmtcountordinalnum
\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}
due volte produce il numero "1" seguito da una lettera "o" in apice a livello di script, nonché due istanze del numero "2" seguite da una lettera "a" a livello di apice. (Ti lascerò indovinare cosa \ordinalnum{2}produce se babelè caricato con l'opzione english.)
È utile ricordare a se stessi che il babelpacchetto è in circolazione da molto tempo e quindi che molte delle funzionalità di babelcomposizione tipografica specifiche del linguaggio sono state create molto prima dell'avvento di pacchetti come fmtcount. Di sicuro, l'eterogeneità specifica della lingua che si trova babelattualmente è di gran lunga maggiore che se il pacchetto fosse scritto da zero oggi in modo top-down. (A parte: se il portugesmodulo di babelfosse scritto oggi, probabilmente si sostituirebbe anche e con e , rispettivamente, ma questo è un problema diverso.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}
Diversi file di definizione della lingua per babelsono scarsamente documentati.
Se lo fai texdoc babel-portuges(su un terminale o facendo clic sul collegamento), vedrai, alla fine,
nonostante si affermi che il file LDF sia stato rivisto di recente. Immagino che queste definizioni siano state aggiunte molto tempo fa, proprio all'inizio della babelstoria. Diversi LDF hanno definizioni ad hoc simili per varie lingue ed è davvero un fastidio, perché potrebbero entrare in conflitto con i comandi dell'utente o del pacchetto.
Supponiamo che tu definisca nel tuo documento inglese un comando chiamato \ordo \ro(il primo potrebbe essere usato per un operatore matematico, ad esempio): il comando funzionerà bene. Dopo l'aggiunta \usepackage[portuges]{babel}, tuttavia, la compilazione si interrompe: un documento come
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
si fermerebbe 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}
Ci sono soluzioni alternative? Si noti che la rimozione di queste definizioni da portuges.ldfromperebbe documenti esistenti in portoghese usando \ord, \orda, \roo \ra.
Ma per il tuo documento, puoi cercare nel documento specifico cosa significa il comando incriminato e decidere se è necessario o meno. Ad esempio, con \ord, potresti aggiungere una soluzione alternativa come
\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}
%[...]
perché l'originale \ordappartiene solo alla modalità testo.
In genere sconsiglio l'utilizzo di comandi legacy da babelfile di definizione.
I comandi standard per questo sono \textordmasculinee \textordfeminine. Questi funzionano in qualsiasi lingua e non richiedono babel.
Puoi anche digitare i caratteri ª e º nel tuo editor come faresti normalmente. Funzioneranno con qualsiasi versione recente di LaTeX.
Tutti questi comandi sono per la modalità testo. Se per qualche motivo vuoi usarli in modalità matematica, dovrai racchiudere la parola in un comando come \textnormal{1º}. Questo torna alla modalità testo.
Nelle versioni moderne di PDFTeX, tutti questi comandi dovrebbero funzionare per impostazione predefinita. Nelle installazioni precedenti, potrebbe essere necessario aggiungere le seguenti righe al preambolo:
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
Su LuaLaTeX o XeLaTeX, vuoi invece abilitare i font moderni con
\usepackage{fontspec}
Seguito da \setmainfont. Tuttavia, molti pacchetti di caratteri imposteranno correttamente le codifiche.
Alcuni caratteri hanno una barra sotto questi simboli e altri no, quindi scegline uno che si adatti alle tue preferenze. Se vuoi una versione senza sottolineatura, insieme a un carattere che ne dia uno, puoi ridefinire
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}