Babel - Diller arasındaki fark
İngilizce'de bir hata gösteren ve Portekizce altında çok iyi derlenen bu basit dosya:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
Neden \robir dilde tanımlanırken diğerinde tanımlanmasın? \roPortekizce'de neyin tanımlandığı nasıl anlaşılır? Bu şekilde başka hangi komutlar tanımlanır? \roBabel el kitabında bundan bahsedilmiyor .
Yanıtlar
\roPortekizce'de neyin tanımlandığı nasıl anlaşılır?
Bir komutun nasıl tanımlandığını bulmak için kullanın \show. \show\roGünlük dosyasını çalıştırıp inceledikten sonra şunları bulur:
> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro
Bu (a) \robir TeX ilkeli değil, bir makro; (b) tanımı aşağı iner ; ve (c) matematik modunda değil, metin modunda kullanılması gerekiyordu.\def\ro{$^{\rm o}$}
Portekizce konusunda uzman değilim, ancak "birinci, ikinci, üçüncü" nin "primeiro, segundo, terceiro" olarak uzun biçimde yazıldığına ve 1\ro, 2\ro, 3\rokısa eldeki gibi LaTeX / babel giriş gösterimi kullanılarak yazıldığına inanıyorum . \roYukarıda gösterilen tanım göz önüne alındığında, çıktısının 1\ro, 2\ro, 3\roneye benzediğini tahmin etmenize izin vereceğim .
Açıkçası, o halde, \robir kardinal sayıyı bir sıra sayıya "dönüştürmek" (tipografik anlamda!) İçin kullanılması amaçlanmıştır. \roAçık bir argüman almasa da, bunun kendi başına değil, bir rakamla birlikte kullanılması amaçlandığını gözlemleyin .
Bu arada, Portekiz hem eril hem de dişil biçimli sıra sayılarını bilir; kısaltılmış biçimde "primeira, segunda, terceira, quarta" üretmek için, bunlardan biri girilir 1\ra, 2\ra, 3\ra, 4\ra. Örneğin, "a quarta vez" ("dördüncü kez") olarak kısaltılabilir a 4\ra~vez.
Neden
\robir dilde tanımlanırken diğerinde değil?
Ummm, çünkü tipografik ihtiyaçlar diller arasında farklılık gösteriyor?
Elbette, İngilizce dizgide ne makroya \rone de \ramakroya ihtiyaç yoktur . "Birinci, ikinci, üçüncü" kesinlikle1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o} İngilizce bir belgede olduğu gibi kısaltılmış biçimde yazılmaz . Dahası, İngilizce eril ve dişil (nötr bir yana bırakın!) Sıradanlar arasında bir ayrım yapmaz.
Sıralı sayıların dizilimini basitleştiren ve standartlaştıran birkaç LaTeX paketi vardır. Bu tür bir paket, makro sağlayan ve çok sayıda dile özgü uyarlamalar içeren Nicola Talbot'un fmtcount'udur\ordinalnum . (Bir kenara: fmtcountPaket, makronun yanı sıra birçok başka kolaylık sağlar ordinalnum...) Yeterince eminim,
\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}
iki kez "1" rakamını ve ardından üst simge düzeyinde komut dosyası boyutu "o" harfini ve ayrıca "2" sayısının iki örneğini ve ardından üst simge düzeyinde komut dosyası boyutundaki "a" harfini üretir. ( Seçenek yüklüyse neyin \ordinalnum{2}üreteceğini tahmin etmenize izin vereceğim .)babelenglish
babelPaketin uzun süredir ortalıkta olduğunu ve bu nedenle birçok babeldile özgü dizgi tesisinin paketlerin ortaya çıkışından çok önce oluşturulduğunu hatırlatmakta fayda var fmtcount. Şüphesiz, birinin babelşu anda bulduğu dile özgü heterojenlik , paketin bugün baştan aşağı bir şekilde yazılmasından çok daha büyüktür. (Kenara: Eğer portugesbir modül babelbugün yazılmıştır, biri muhtemelen de yerini alacak ve ile ve sırasıyla, ama bu farklı bir konu.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}
İçin birkaç dil tanımı dosyası babelyetersiz şekilde belgelenmiştir.
Bunu yaparsanız texdoc babel-portuges(bir terminalde veya bağlantıya tıklarsanız), en sonunda göreceksiniz,
LDF dosyasının çok yakın zamanda revize edildiği iddia ediliyor. Sanırım bu tanımlar uzun zaman önce babeltarihin en başında eklendi . Birkaç LDF'nin çeşitli diller için benzer geçici tanımları vardır ve bu gerçekten bir baş belasıdır çünkü kullanıcı veya paket komutlarıyla çakışabilirler.
İngilizce belgenizde \ordveya adında bir komut tanımladığınızı varsayalım \ro(örneğin, eski bir matematik operatörü için kullanılabilir): komut iyi çalışacaktır. \usepackage[portuges]{babel}Ancak eklendikten sonra derleme durur:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
ile dururdu
! 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}
Çözümler var mı? Bu tanımının kaldırılması unutmayın portuges.ldfkullanarak Portekizce varolan belgeleri kırardı \ord, \orda, \roveya \ra.
Ama için senin belgede, ne hakaret komut araçları belirli belgede aramak ve ihtiyacınız olup olmadığını karar verebilir. Örneğin, ile \ord, aşağıdaki gibi bir geçici çözüm ekleyebilirsiniz:
\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}
%[...]
çünkü orijinal \ordyalnızca metin moduna aittir.
Genelde babeltanım dosyalarından eski komutların kullanılmamasını öneririm .
Bunun için standart komutları vardır \textordmasculineve \textordfeminine. Bunlar herhangi bir dilde çalışır ve gerektirmez babel.
Düzenleyicinize ª ve º karakterlerini normalde yaptığınız gibi yazabilirsiniz. LaTeX'in herhangi bir son sürümünde çalışacaklar.
Bu komutların tümü metin modu içindir. Herhangi bir nedenle bunları matematik modunda kullanmak istiyorsanız, kelimeyi gibi bir komutla sarmalamanız gerekir \textnormal{1º}. Bu, metin moduna geri döner.
PDFTeX'in modern sürümlerinde, bu komutların tümü varsayılan olarak çalışmalıdır. Daha eski kurulumlarda, önsözünüze aşağıdaki satırları eklemeniz gerekebilir:
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
LuaLaTeX veya XeLaTeX'te, bunun yerine modern yazı tiplerini etkinleştirmek istersiniz.
\usepackage{fontspec}
Ardından \setmainfont. Yine de birçok yazı tipi paketi kodlamaları sizin için doğru şekilde ayarlayacaktır.
Bazı yazı tiplerinde bu sembollerin altında bir çubuk bulunur ve bazılarında yoktur, bu nedenle tercihinize uygun olanı seçin. Alt çizgisiz bir sürüm ve onlara bir yazı tipi veren bir yazı tipi istiyorsanız, yeniden tanımlayabilirsiniz.
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}