Babel - Różnica między językami
Ten prosty plik, który pokazuje błąd w języku angielskim i dobrze kompiluje się pod portugalskim:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
Dlaczego miałoby \robyć zdefiniowane w jednym języku, a nie w drugim? Jak dowiedzieć się, co jest \rozdefiniowane w języku portugalskim? Jakie inne polecenia są zdefiniowane w ten sposób? W \ropodręczniku Babel nie ma wzmianki o tym.
Odpowiedzi
Jak dowiedzieć się, co jest
\rozdefiniowane w języku portugalskim?
Aby dowiedzieć się, jak zdefiniowano polecenie, użyj \show. Uruchamiając \show\roi przeglądając plik dziennika, można znaleźć:
> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro
To mówi, że (a) \rojest makrem, a nie prymitywem TeX; b) jego definicja sprowadza się do ; oraz (c) ma być używany w trybie tekstowym, a nie matematycznym.\def\ro{$^{\rm o}$}
Nie jestem ekspertem od portugalskiego, ale uważam, że „pierwszy, drugi, trzeci” jest zapisywany w długiej formie jako „primeiro, segundo, terceiro” i, używając notacji wejściowej LaTeX / babel, jak 1\ro, 2\ro, 3\row skrócie. Biorąc pod uwagę \ropowyższą definicję , pozwolę Ci zgadnąć, jak 1\ro, 2\ro, 3\rowygląda wynik.
Jasne jest więc, \roże ma służyć do „zamiany” (w sensie typograficznym!) Liczby kardynalnej na liczbę porządkową. Zauważ, że chociaż \ronie przyjmuje jawnego argumentu, nie jest przeznaczony do użycia samodzielnie, ale raczej w połączeniu z liczbą.
Nawiasem mówiąc, Portugalczyk zna zarówno formy męskie, jak i żeńskie liczby porządkowe; aby wygenerować „primeira, segunda, terceira, quarta” w skróconej formie, należy je wprowadzić jako 1\ra, 2\ra, 3\ra, 4\ra. Np. „A quarta vez” („czwarty raz”) można skrócić do a 4\ra~vez.
Dlaczego miałoby
\robyć zdefiniowane w jednym języku, a nie w drugim?
Ummm, ponieważ potrzeby typograficzne różnią się w zależności od języka?
Z pewnością w składzie anglojęzycznym nie ma wyraźnej potrzeby stosowania ani makra, \roani \ramakra. „Pierwsza, druga, trzecia” zdecydowanie nie są napisane w skróconej formie, jak 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}w dokumencie w języku angielskim. Co więcej, w języku angielskim nie ma rozróżnienia między męskimi i żeńskimi (nie mówiąc już o neutralności!) Liczebnikami porządkowymi.
Istnieje kilka pakietów LaTeX, które upraszczają i standaryzują skład liczb porządkowych. Jednym z takich pakietów jest fmtcount Nicoli Talbot , który dostarcza makro i który zawiera dużą liczbę dostosowań specyficznych dla języka. (Poza tym pakiet zapewnia wiele innych udogodnień oprócz makra ...) Oczywiście,\ordinalnumfmtcountordinalnum
\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}
dwukrotnie tworzy cyfrę „1”, po której następuje litera o rozmiarze skryptu na poziomie indeksu górnego „o”, a także dwa wystąpienia cyfry „2”, po której następuje litera o rozmiarze skryptu na poziomie indeksu górnego „a”. (Pozwolę ci zgadnąć, co \ordinalnum{2}produkuje, jeśli babeljest załadowana opcją english.)
Warto przypomnieć sobie, że babelpakiet istnieje już od dłuższego czasu i dlatego wiele narzędzi babeldo składu specyficznych dla języka zostało utworzonych na długo przed pojawieniem się pakietów, takich jak fmtcount. Z pewnością, specyficzna dla języka heterogeniczność, jaką można babelobecnie znaleźć, jest znacznie większa niż w przypadku, gdyby pakiet został napisany dziś od zera w sposób odgórny. (Na marginesie: Jeśli portugesmoduł babelzostały napisane dzisiaj, jeden prawdopodobnie również wymienić i z i , odpowiednio, ale to już inna kwestia).\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}
Niektóre pliki definicji języków dla programu babelsą słabo udokumentowane.
Jeśli to zrobisz texdoc babel-portuges(na terminalu lub klikając link), zobaczysz na samym końcu,
pomimo, że plik LDF został rzekomo niedawno poprawiony. Myślę, że te definicje zostały dodane dawno temu, na samym początku babelhistorii. Kilka LDF ma podobne definicje ad hoc dla różnych języków i jest to naprawdę uciążliwe, ponieważ mogą powodować konflikty z poleceniami użytkownika lub pakietu.
Powiedzmy, że definiujesz w dokumencie w języku angielskim polecenie o nazwie \ordlub \ro(to pierwsze może być używane na przykład dla operatora matematycznego): polecenie będzie działać dobrze. \usepackage[portuges]{babel}Jednak po dodaniu kompilacja zatrzymywała się: dokument taki jak
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
zatrzymałby się
! 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}
Czy istnieją obejścia? Należy pamiętać, że usunięcie tych definicji z portuges.ldfzłamie istniejących dokumentów w języku użyciu \ord, \orda, \rolub \ra.
Ale dla twojego dokumentu, można wyszukać w dokumencie konkretnego jaka obrażając środki dowodzenia i zdecydować, czy konieczna czy nie. Na przykład za pomocą \ordmożesz dodać obejście, takie jak
\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}
%[...]
ponieważ oryginał \ordnależy tylko do trybu tekstowego.
Generalnie odradzałbym używanie starszych poleceń z babelplików definicji.
Te standardowe polecenia do tego są \textordmasculinei \textordfeminine. Działają one w dowolnym języku i nie wymagają babel.
Możesz także wpisywać znaki ª i º w swoim edytorze w taki sam sposób, jak zwykle. Będą działać w każdej najnowszej wersji LaTeX.
Wszystkie te polecenia dotyczą trybu tekstowego. Jeśli z jakiegoś powodu chcesz ich użyć w trybie matematycznym, musisz zawinąć słowo w polecenie, takie jak \textnormal{1º}. Spowoduje to przełączenie z powrotem do trybu tekstowego.
W nowoczesnych wersjach PDFTeX wszystkie te polecenia powinny działać domyślnie. W starszych instalacjach może być konieczne dodanie następujących wierszy do preambuły:
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
W LuaLaTeX lub XeLaTeX zamiast tego chcesz włączyć nowoczesne czcionki z
\usepackage{fontspec}
Następnie \setmainfont. Jednak wiele pakietów czcionek ustawi poprawnie kodowanie.
Niektóre czcionki mają pasek pod tymi symbolami, a inne nie, więc wybierz taką, która odpowiada Twoim preferencjom. Jeśli potrzebujesz wersji bez podkreślenia wraz z czcionką, która je nadaje, możesz przedefiniować
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}