Babel - Perbedaan antar bahasa

Sep 18 2020

File sederhana ini yang menunjukkan kesalahan dalam bahasa Inggris dan dikompilasi dengan baik di bawah bahasa Portugis:

\documentclass{report}

\usepackage[english]{babel}
%\usepackage[portuges]{babel}

\begin{document}
\ro
\end{document}

Mengapa \rodidefinisikan dalam satu bahasa dan bukan di bahasa lain? Bagaimana cara mengetahui apa yang \rodiartikan dalam bahasa Portugis? Perintah lain apa yang didefinisikan dengan cara ini? Tidak disebutkan \rodalam manual Babel.

Jawaban

4 Mico Sep 19 2020 at 06:39

Bagaimana cara mengetahui apa yang \rodiartikan dalam bahasa Portugis?

Untuk mengetahui bagaimana suatu perintah didefinisikan, gunakan \show. Menjalankan \show\rodan mencari di file log, seseorang menemukan:

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

Ini mengatakan bahwa (a) \roadalah makro, bukan primitif TeX; (b) definisinya turun ke ; dan (c) seharusnya digunakan dalam mode teks, bukan mode matematika.\def\ro{$^{\rm o}$}

Saya bukan ahli dalam bahasa Portugis, tetapi saya percaya bahwa "pertama, kedua, ketiga" ditulis dalam bentuk panjang seperti "primeiro, segundo, terceiro" dan, menggunakan notasi masukan LaTeX / babel, seperti 1\ro, 2\ro, 3\rodalam bentuk tangan pendek. Diberikan definisi yang \roditunjukkan di atas, saya akan membiarkan Anda menebak seperti apa outputnya 1\ro, 2\ro, 3\ro.

Jelas, kemudian, \rodimaksudkan untuk digunakan untuk "mengubah" (dalam pengertian tipografi!) Sebuah bilangan pokok menjadi bilangan urut. Perhatikan bahwa meskipun \rotidak menggunakan argumen eksplisit, ini tidak dimaksudkan untuk digunakan dengan sendirinya melainkan, dalam hubungannya dengan angka.

Secara kebetulan, bahasa Portugis mengenal baik ordinal bentuk maskulin dan feminin; untuk menghasilkan "primeira, segunda, terceira, quarta" dalam bentuk singkatan, seseorang akan memasukkannya sebagai 1\ra, 2\ra, 3\ra, 4\ra. Misalnya, "a quarta vez" ("keempat kalinya") dapat disingkat menjadi a 4\ra~vez.

Mengapa \rodidefinisikan dalam satu bahasa dan bukan dalam bahasa lain?

Ummm, karena kebutuhan tipografi berbeda antar bahasa?

Yang pasti, dalam pengaturan huruf bahasa Inggris tidak ada kebutuhan yang jelas baik untuk makro \roatau \ra. "Pertama, kedua, ketiga" jelas tidak ditulis dalam bentuk singkatan seperti 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}pada dokumen berbahasa Inggris. Selain itu, bahasa Inggris tidak menonjolkan perbedaan antara ordinal maskulin dan feminin (apalagi netral!).

Ada beberapa paket LaTeX yang menyederhanakan dan membakukan penyusunan huruf bilangan ordinal. Salah satu paket tersebut adalah fmtcount Nicola Talbot , yang menyediakan makro \ordinalnumdan yang menampilkan sejumlah besar adaptasi khusus bahasa. (Selain: fmtcountPaket menyediakan banyak fasilitas lain selain makro ordinalnum...) Benar saja,

\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}

dua kali menghasilkan angka "1" diikuti oleh huruf ukuran skrip tingkat superskrip "o", serta dua contoh angka "2" diikuti oleh huruf ukuran skrip tingkat superskrip "a". (Saya akan membiarkan Anda menebak apa yang \ordinalnum{2}dihasilkan jika babeldimuat dengan opsi english.)

Sangat berguna untuk mengingatkan diri sendiri bahwa babelpaket tersebut telah ada sejak lama dan oleh karena itu banyak babelfasilitas penyusunan huruf khusus bahasa dibuat jauh sebelum munculnya paket seperti fmtcount. Yang pasti, heterogenitas khusus bahasa yang ditemukan babelsaat ini jauh lebih besar daripada jika paket tersebut ditulis dari awal hari ini dengan cara top-down. (Selain: Jika portugesmodul babelditulis hari ini, seseorang mungkin juga akan mengganti dan dengan dan , masing-masing, tetapi itu masalah yang berbeda.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}

3 egreg Sep 19 2020 at 10:09

Beberapa file definisi bahasa untuk babeldidokumentasikan dengan buruk.

Jika Anda melakukannya texdoc babel-portuges(di terminal atau mengklik tautan), Anda akan melihat, di bagian paling akhir,

meskipun file LDF diklaim telah direvisi baru-baru ini. Saya rasa definisi ini telah ditambahkan sejak lama, di awal babelsejarah. Beberapa LDF memiliki definisi ad hoc yang serupa untuk berbagai bahasa dan ini benar-benar mengganggu, karena mereka dapat konflik dengan perintah pengguna atau paket.

Katakanlah Anda mendefinisikan dalam dokumen bahasa Inggris Anda sebuah perintah bernama \ordatau \ro(yang sebelumnya dapat digunakan untuk operator matematika, misalnya): perintah tersebut akan bekerja dengan baik. \usepackage[portuges]{babel}Namun, setelah menambahkan , kompilasi akan berhenti: dokumen seperti

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

\DeclareMathOperator{\ord}{ord}

%[...]

akan berhenti dengan

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

Apakah ada solusi? Perhatikan bahwa menghapus definisi ini dari portuges.ldfakan istirahat dokumen yang ada di Portugis menggunakan \ord, \orda, \roatau \ra.

Tapi untuk Anda dokumen, Anda dapat mencari di dokumen spesifik apa yang menyinggung sarana perintah dan memutuskan apakah Anda perlu atau tidak. Misalnya, dengan \ord, Anda dapat menambahkan solusi seperti

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

%[...]

karena aslinya \ordhanya milik mode teks.

3 Davislor Sep 19 2020 at 08:51

Saya biasanya akan merekomendasikan untuk tidak menggunakan perintah warisan dari babelfile definisi.

The perintah standar untuk ini adalah \textordmasculinedan \textordfeminine. Ini berfungsi dalam bahasa apa pun dan tidak membutuhkan babel.

Anda juga dapat mengetikkan karakter ª dan º ke editor Anda seperti biasa. Mereka akan bekerja dalam versi LaTeX terbaru.

Semua perintah ini untuk mode teks. Jika karena alasan tertentu Anda ingin menggunakannya dalam mode matematika, Anda perlu memasukkan kata tersebut ke dalam perintah seperti \textnormal{1º}. Ini beralih kembali ke mode teks.

Pada versi modern PDFTeX, semua perintah ini seharusnya berfungsi secara default. Pada instalasi lama, Anda mungkin perlu menambahkan baris berikut ke pembukaan Anda:

\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}

Di LuaLaTeX atau XeLaTeX, Anda ingin mengaktifkan font modern dengan

\usepackage{fontspec}

Diikuti oleh \setmainfont. Banyak paket font akan mengatur pengkodean untuk Anda dengan benar.

Beberapa font memiliki bilah di bawah simbol-simbol ini, dan yang lainnya tidak, jadi pilihlah yang sesuai dengan preferensi Anda. Jika Anda menginginkan versi tanpa garis bawah, bersama dengan fonta yang memberikan garis bawah, Anda dapat mendefinisikan ulang

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