Latex3: Perubahan huruf untuk Cyrillic

Dibuat pada 17 Feb 2020  ·  31Komentar  ·  Sumber: latex3/latex3

Seperti disebutkan di https://github.com/latex3/latex3/issues/671 , saat ini

\documentclass{article}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{expl3}

\ExplSyntaxOn
\def\test{\text_lowercase:n}
\ExplSyntaxOff

\begin{document}
\test{\.I İ \CYRI И}
\end{document}

memberikan hasil 'ganjil' yang terbaik.

Seharusnya dimungkinkan untuk melakukan perubahan huruf besar-kecil di sini karena tidak bergantung pada perubahan \lccode melainkan pada perluasan И ke

\u8:И ->\IeC {\CYRI }

dan kemudian melakukan pekerjaan.

expl3 feature-request

Komentar yang paling membantu

@josephwright tetapi Anda benar-benar harus menerapkan \text_lowercase:n{\emoji{Man}} = \emoji{Boy} ;-)

Semua 31 komentar

u8:И ->IEC {CYRI }

Tidakkah lebih masuk akal untuk mengekstrak dari u8:И, dan mencari huruf besar
informasi di beberapa intarray?

@blefloch
Ya!

Apa saja perintah u8:... ini? Apakah mereka dibutuhkan?

@blefloch
Ya!

atau mungkin bukan Kris. Seseorang mungkin harus berurusan dengan notasi ^^ di tempat itu alih-alih tetapi secara keseluruhan saya setuju itu terlihat seperti titik awal yang lebih baik

Apa saja perintah u8:... ini? Apakah mereka dibutuhkan?

Anda harus tahu :-) nama Anda ada di file yang berisi kode itu. Ya mereka diperlukan: di pdftex LaTeX melihat byte menganalisisnya dan membuat satu csname dari mereka \u8:... yang menyimpan LICR untuk karakter utf8 yang dalam kasus di atas adalah \IeC {\CYRI } atau jika \u8:... tidak didefinisikan merespons tanpa representasi Unicode untuk ...

Anda harus tahu :-) nama Anda ada di file yang berisi kode itu.
Tapi Tidak semua yang saya mungkin bertanggung jawab diperlukan :-).

Saya setuju saya harus melihat kode aslinya! Setidaknya untuk mencari tahu dari mana : berasal.

Tapi saya harus berhenti sekarang jika saya membuat marah orang tertentu dengan menampilkan pendapat saya di tempat umum seperti itu :-).

@blefloch Ada beberapa hal yang dibutuhkan. Yang pertama adalah melihat pasangan/triplet/kuartet UTF-8 dan mengambilnya secara keseluruhan daripada token-by-token. Itu cukup mudah: periksa token char aktif yang sama dengan titik awal inputenc . Fase kedua adalah mengetahui bagaimana kasus mengubahnya. Alasan saya menyebutkan mengambil pendekatan \IeC{...} adalah karena kita tidak memerlukan data _new_: itu cara yang sama seperti \MakeUppercase menanganinya dan dengan demikian menggunakan data \@uclclist kita sudah mengumpulkan.

Alasan saya menyebutkan mengambil pendekatan IeC{...} adalah karena kita tidak memerlukan data baru:
Nah, Anda mungkin perlu sedikit lebih banyak jika Anda ingin benar-benar mencakup setiap karakter yang berubah huruf besar-kecil (Mereka mungkin belum semuanya memiliki LICR.)

Menggunakan angka dan tabel Unicode secara estetika lebih menarik, tentu saja. Tetapi jika 'tabel nama' berfungsi untuk saat ini. . .

Untuk Sirilik, Yunani, Armenia, dll dll, apakah mungkin menggunakan LICR baru dari bentuk cyr{}, sedikit seperti aksen?

@car222222 Masalah muncul karena ada tempat yang \MakeUppercase akan berfungsi yang \text_uppercase:n tidak, yang turun ke hal-hal yang melalui u8:... . Itu sebabnya saya mulai dengan ini. Jika kita menginginkan rentang Unicode penuh dalam pdfTeX (dapat dilakukan), kita harus menyimpan data secara manual dalam array integer.

Jika kita menginginkan rentang Unicode penuh dalam pdfTeX (dapat dilakukan), kita harus menyimpan data secara manual dalam array integer.

Mengingat bahwa pdfTeX sengaja hanya menyediakan karakter utf8 jika didukung oleh pengkodean font yang dimuat, patut dipertanyakan untuk perubahan huruf pertama dan kemudian menemukan bahwa hasilnya adalah karakter yang tidak didukung. Tentu saja, jika seluruh data ada di dalam format maka tidak ada muatan tambahan (selain ukuran yang diambil olehnya) dan persiapan awal.

dipertanyakan untuk perubahan kasus pertama dan kemudian menemukan bahwa hasilnya adalah karakter yang tidak didukung.

Saya tidak menemukan ini sangat bermasalah. Huruf kecil dan huruf besar berada dalam penyandian yang sama, jadi Anda hanya akan mendapatkan kesalahan pada alfa kapital jika Anda memulai dengan alfa huruf kecil yang tidak didukung.

Pada 18/2/20 15:49, Ulrike Fischer menulis:

it is questionable to first case change and then find that the
result is an unsupported character.

Saya tidak menemukan ini sangat bermasalah. Huruf kecil dan huruf besar ada di
penyandian yang sama, jadi Anda hanya akan mendapatkan kesalahan pada alfa kapital jika Anda
mulai dengan alfa huruf kecil yang tidak didukung.

Bahkan jika ada pengkodean dengan alfa huruf kecil tetapi tidak huruf besar
alpha (ini mungkin masuk akal untuk beberapa aksen yang lebih jarang),
mendapatkan kesalahan char Unicode tidak diatur tampaknya lebih baik daripada
secara tidak sengaja mendapatkan karakter huruf kecil.

Saya setuju dengan Ulrike dan Bruno. Tetapi saya gagal membayangkan kasus yang realistis (permainan kata-kata) di mana karakter huruf besar dan kecil tidak tersedia/tidak tersedia secara bersamaan.

Mengingat pdfTeX sengaja hanya menyediakan karakter utf8 jika didukung oleh pengkodean font yang dimuat

Berarti apa? pdfTeX tidak 'menyediakan karakter' sama sekali, bukan? Dan 'pengkodean font yang dimuat' adalah konsep LaTeX, bukan mesin.

Mungkin itu berarti bahwa dalam cara kami awalnya mengatur hal-hal utf8 untuk LaTeX, hanya LICR (dan pemetaan hanya disediakan 'untuk penyandian yang diketahui' dan kemudian hanya dimuat untuk penyandian yang dimuat.

Benar, tetapi pembatasan seperti itu tidak perlu dilakukan akhir-akhir ini, bukan?
Kami tentu saja sekarang dapat dengan mudah menyediakannya untuk setiap subset Unicode yang kami inginkan, dan dalam konteks ini kami hanya perlu mencakup semua 'karakter yang dapat di-casable'.

Penafian: Saya tidak pernah tertarik pada pembatasan itu untuk penyandian yang diketahui :-).

    Given that pdfTeX deliberately only provides utf8 chars if
    supported by the loaded font encodings

Berarti apa? pdfTeX tidak 'menyediakan karakter' sama sekali, bukan? Dan
'pengkodean font yang dimuat' adalah konsep LaTeX, bukan mesin.

arti pdflatex dan tulisan pdftex

Mungkin itu berarti bahwa cara kami awalnya mengatur hal-hal utf8 untuk
LaTeX, hanya LICR (dan pemetaan hanya disediakan 'untuk diketahui
encodings' dan kemudian hanya dimuat untuk pengkodean yang dimuat.

ya yang merupakan Good Thing TM karena itu membuat dunia LaTeX bebas
tahu dan karakter yang hilang

Benar, tetapi pembatasan seperti itu tidak perlu dilakukan akhir-akhir ini, bukan?
Kami tentu saja sekarang dapat dengan mudah menyediakannya untuk setiap subset Unicode kami
ingin, dan dalam konteks ini kita hanya perlu mencakup semua 'karakter yang dapat dihubungkan'.

ya ada. jika Anda tidak memiliki mesin terbang untuk mengeset karakternya
tidak ada gunanya melakukannya, itulah sebabnya mengklaim bahwa Anda dapat melakukan unicode sebagai
seperti yang dilakukan xetex atau luatex (lateks) dan kemudian hanya menghasilkan lubang dan Tidak
char XXX peringatan di log adalah langkah mundur ke pdflatex
solusi, imho

Penafian: Saya tidak pernah tertarik pada pembatasan itu untuk penyandian yang diketahui :-).

baik, selama Anda menulis bahasa Inggris biasanya tidak masalah jika Anda
tulis dalam bahasa lain dan dokumen Anda akan rusak tanpa
memperingatkan Anda bahwa Anda melakukannya

Mungkin ada alasan untuk tidak memuat LICR untuk karakter yang tidak dapat direpresentasikan.

Tapi di sini kita hanya berbicara tentang mendefinisikan LICR dan karakter huruf besar, perhatikan 'karakter'.
Tidak ada hubungannya dengan pengaturan huruf, sehingga pengkodean/font yang tersedia tidak relevan.
Kasus penggunaan: formulir uppecased hanya untuk digunakan dalam bookmark pdf, tidak pernah diketik (oleh TeX, setidaknya!)

Setelah melihat masalahnya sedikit lagi, tampaknya lebih mudah untuk menanganinya menggunakan daftar pemetaan yang tetap daripada mencoba melakukan sesuatu dengan melihat ke dalam karakter aktif. Saya telah melihat sekilas berapa banyak codepoint yang ada dengan data perubahan huruf besar-kecil: sekitar 2000. Itu mungkin sedikit banyak untuk melakukan semuanya, jadi untuk saat ini saya telah mengambil yang Yunani dan Cyrillic yang dicakup oleh T2 / LGR . Pikiran selamat datang.

bagaimana dengan ide untuk menyimpan semuanya dalam intarray?

Masalahnya dengan menggunakan intarray adalah kita tidak bisa membuatnya jarang, jadi ukurannya akan tergantung pada codepoint dari nilai akhir yang akan disimpan. Ada juga sedikit hit performa pada titik penggunaan karena kita harus mengekstrak, mengonversi ke byte, dan membangun karakter aktif, daripada melakukannya sekali pada waktu buka.

Juga, kembali dengan bisnis 'apa codepoints memiliki mesin terbang', sejauh yang saya tahu, yang Yunani dan Cyrllic ditambah yang Latin sudah tercakup sejauh ini yang paling berguna

Nah, bagi orang Yunani dan Cyrills merekalah yang paling berguna, ya! Tapi tidak ke seluruh dunia?
Das heisst: bagaimana Anda mengukur utilitas ini?

Saya kira totalnya naik begitu besar karena banyak turunan latin di sekitar, atau tidak?
2000 kira-kira 30+ huruf khas, saya kira.

'Utilitas' di sini baru saja dimulai dengan 'apa yang berfungsi saat ini di pdfTeX', jadi 'pengkodean apa yang tersedia'. Saya tidak yakin apa sebenarnya yang dicakup oleh semua pemetaan: mungkin ada positif palsu. Agaknya ada untuk memulai semua varian matematika (miring, sanserif, ...).

Banyak yang beraksen Latin/Cyrillic/Yunani, lalu ada Copic, Armenian, Old Hungarian, Cherokee, dll. Tentu bukan 30 huruf, tapi mungkin setidaknya 10.

Daftar skrip lengkap:

  • Latin (>700 codepoints!) termasuk. versi lebar penuh
  • orang Yunani
  • Koptik
  • Sirilik
  • Armenia
  • bahasa Georgia
  • Cherokee
  • Glagolitik
  • gurun
  • Osage
  • Hungaria Kuno
  • Warang
  • Medefaidrin
  • Adlam

!! Latin (>700 codepoints!) termasuk. versi lebar penuh
Ah ya, belum lagi versi 'superscript yang dilingkari',
dan saya yakin harus ada emoji huruf kecil di Unicode sekarang :-).

@ car222222 Untungnya tidak ada huruf yang dilingkari ;) Ini terutama banyak dan banyak menggabungkan versi aksen.

@josephwright tetapi Anda benar-benar harus menerapkan \text_lowercase:n{\emoji{Man}} = \emoji{Boy} ;-)

Pikiran tentang liputan lebih lanjut? Atau apakah kita mengikuti apa yang telah saya siapkan untuk saat ini?

Penanganan \.I İ di MWE di atas berbeda di pdfLaTeX (juga dibandingkan dengan mesin Unicode), tetapi saya akui bahwa İ mungkin merupakan kasus yang rumit dalam kode perubahan kasus umum.

Jadi saya mencoba pengubah kasus Turki

\documentclass{article}
\usepackage{fontspec}
\usepackage{libertinus}
\usepackage{expl3}

\ExplSyntaxOn
\def\test{\text_lowercase:nn{tr}}
\ExplSyntaxOff

\begin{document}
\test{\.I İ \CYRI И}
\end{document}

( L3 programming layer <2020-02-25> ) dan LuaLaTeX dan XeLaTeX tidak senang

! Undefined control sequence.
<inserted text> ı

@moewew Hmm, itu agak aneh: Saya akan mendapatkan diurutkan

@moewew Masalah khusus dengan bahasa Turki: sekarang diperbaiki

Pikiran tentang liputan lebih lanjut? Atau apakah kita mengikuti apa yang telah saya siapkan untuk saat ini?

Saya akan mulai dengan hadiah dan memperpanjang saat dibutuhkan

Oke, saya pikir itu posisi terbaik, dan juga berarti kita bisa membuat masalah terus bergerak. Saya akan tutup di sini dan penambahan spesifik dapat dibahas dalam edisi baru.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat