texjporg / tex-jp-build

Minimum source repository to build Japanese TeX processing tools
23 stars 6 forks source link

[upTeX] Latin-1 ブロックの分割 #43

Closed t-tk closed 5 years ago

t-tk commented 6 years ago

upTeXのblock に関し uptex-fonts の方で述べていたLatin-1 blockの分割案です。 https://github.com/texjporg/uptex-fonts/issues/2#issuecomment-319367973

Unicodeでは script property が定義され Script.txtに記載されている。U+80 ~ U+FF の中は、Common のものと Latin のものが混在しており、これを upTeXの扱うBlockとしては Common と Latin の2個に分割する。

U+AA(ª), U+BA(º), U+C0..D6(À..Ö), U+D8..F6(Ø..ö), U+F8..FF(ø..ÿ): "Latin" (Latin-1 Letters), その他: "Common" の2分割。

試しに作ってみました。 https://github.com/t-tk/tex-jp-build/tree/uptex-devel

Latin-1 Lettersの文字のdefaultのkcatcodeは15(not_cjk)、その他は従来通り18(other_kchar) 以下のようなコードでkcatcodeの設定が不要になります。

\documentclass{ujarticle}
%\kcatcode"C0=15
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
Pokémon
\end{document}

ukinsoku.tex に修正が必要でした。 非互換の変更なので、マクロ類を提供している方に対応のお願いが必要になる等、若干の混乱が生じる恐れがあります。 ご意見があればお願いします。

aminophen commented 6 years ago

https://github.com/t-tk/tex-jp-build/tree/uptex-devel

ファイルが多くて diff が全部追いきれていないのと,以前の議論がうろ覚えなので確認させてください。

[1] 新バージョンのデフォルトは

である。

[2] 新バージョンでは上記 2 つのブロックは \kcatcode が互いに独立(つまり,従来は実効的に \kcatcode"C0\kcatcode"80 が連動していたが,新バージョンでは連動しなくなる)

にしたい,という理解でよろしいでしょうか?(もしこの通りであれば,私は賛成です。pxcjkcat パッケージが影響を受けそうですが,upTeX のリビジョンを 1.23 に上げて #14 をマージすれば \uptexrevision を使って両方に対応できそうに思います。)

t-tk commented 6 years ago

diffは分かりづらかったですね。Latin-1に関するところは、実質↓の二つのコミットです。 https://github.com/t-tk/tex-jp-build/commit/43f5fee8a930c19d88bd9acb9b94a3f0d0360df8 https://github.com/t-tk/tex-jp-build/commit/1472dfa83421fa44bfbbb1138401598559f4e3ec

[1] 新バージョンのデフォルトは

U+80 ~ U+FF のうち,Latin-1 Lettersの文字のdefaultのkcatcodeは15(not_cjk) … "Latin" U+80 ~ U+FF のうち,その他は従来通り18(other_kchar) … "Common"

である。

[2] 新バージョンでは上記 2 つのブロックは \kcatcode が互いに独立(つまり,従来は実効的に \kcatcode"C0 と\kcatcode"80 が連動していたが,新バージョンでは連動しなくなる)

はい。この通りです。 upTeX のリビジョンは上げる予定です。

aminophen commented 6 years ago

Latin-1に関するところは、実質↓の二つのコミット

ありがとうございます。把握できました。テストはもう少ししようと思いますが,いいと思います。

zr-tex8r commented 6 years ago

「kcatcodeテーブルにおいてLatin-1ブロックを分割する」 の方はいいんですが、 「Latinの方を既定で15にする」 の方は少し気になります。

(ASCII以外の)kcatcodeの既定を15にするのは初めてのことだと思いますが、これの目的はなんでしょうか。中韓JFMとの兼ね合いでしょうか。

もし「そちらの方が便利だから」という理由であれば、それ自体は納得できるのですが、その理屈でいうと、他にも「既定で15」にすべきブロックがあると思います。「LatinのLatin-1」だけ特別扱いというのが腑に落ちないわけです。

t-tk commented 6 years ago

コメントありがとうございます。 upTeXの和文カテゴリコードがアレでご指摘されている点が動機になっています。 これでつまづくユーザーさんも多いようなので規定値を15にすべきかという迷いがあります。

その理屈でいうと、他にも「既定で15」にすべきブロックがあると思います。

具体的な良い案はありますか? 現行はCJK扱いが過多。 今回の修正案でもスペイン語の ¡ とか ¿ のkcatcodeの規定は18(other_kchar) になってしまう。 例えば、Latin Extended* とか、Hebrew とか、Arabic とかを15にするか、 あるいは、CJK(upTeXのCJK組版)で使いそうにないものは全部15にするなど。 キリル文字やギリシャ文字でJIS第一水準にあるものは、規定の動作をpTeXに近づけておくため15にしたくないなどなど。 どうやっても中途半端になりそうです。 妥当で上手い理屈があればよいのですが。

どうせ中途半端なら、現状維持か、あるいは今回の修正案(Latin 1 Lettersだけ規定を15にする)でも良いかとも思います。

zr-tex8r commented 6 years ago

「妥当で上手い理屈」を色々と考えていたのですが、次のようなのはどうでしょうか。

これだと以下のブロックが該当します。これはpTeXの和文文字の集合とは重なりません。

さらに、条件を次のように変更しても、同じ結果が得られます。

t-tk commented 6 years ago

ご検討ありがとうございます。 規定はなるべくpTeX互換(Greek, Cyrillicは全角組み)は前提として、 CJK以外の多言語は、出来るだけ欧文TeXに近いものとしたい、と考えた場合、 pTeXと多言語処理 に紹介されているグルジア語、アラビア語、ヘブライ語、サンスクリット語、タイ語なども気になります。 いっそのこと、upTeXのCJKで組むことは普通考えにくいような文字のブロックは、理屈抜きに15(not_cjk)にしてしまう、という方針もあり得るかと思います。 その一方、キリがないし(よく判らないし)マイナーなパッケージやエンコーディングは、規定で処理出来なくても許してもらっていいような気もします。

Latin Extended-{A,B} が 15 で Latin Extended-{C,D,E}, Latin Extended Additional が 18 というのに少し違和感があります。 しかし、Latin Extended-{D,E} に Script属性 Common が含まれていたり、 U+0600..06FF の Arabic block に Script属性 Common や Inherited が含まれていたり、 一筋縄では行かないようですね。

ArabTeXは置いておいて、

という(ご都合主義的な)屁理屈で、ZRさんの案にさらに加えて以下を15とする、という案でどうでしょう。

あるいはさらに加えて

t-tk commented 6 years ago

Latin* と Hebrew を 15(not_cjk) とする案で作ってみました。 https://github.com/t-tk/tex-jp-build/commit/4395048aa35a0defdce2ce604507f4080e11de31

15 (not_cjk) のブロックは次の11個です。

\usepackage[utf8x]{inputenc} + babel + Hebrew が規定で動くようになり、 https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/50589.html のような例が(e-upTeX上の)upLaTeXで通るようになるはずです。

最近の babel は、LuaTeX や XeTeX も考慮され、対応言語もどんどん拡張されているのですね。今日初めて知りました。 約10年前に考えていたような「(当時の)欧文LaTeXとbabelの範囲は使いやすくする」「アラビア語などは頑張らない」という方針に従い、今は、Hebrew, (非英語)Latin は15にして、Arabic その他私の理解が及ばない文字は現状維持にしようと考えています。

t-tk commented 6 years ago

奥村先生のLaTeX2e 美文書作成入門第5版の付録I章I.5でアラビア語, ヘブライ語, デーヴァナーガリー, タイ語を{,u}platexで動かす方法やその他の言語対応の紹介を読み、考えなおしました。 現状どこまでUTF-8入力に対応しているのか不明ですし、今やXeTeX等を推奨したほうがいいのかもしれませんが、CJKで使いそうにないスクリプトは15にする(Greek, Cyrillicは例外)、という案も検討することにします。

zr-tex8r commented 6 years ago

(現状の自分の雑感)

次のような方針がある:

その他の自分の考え:

t-tk commented 6 years ago

整理ありがとうございます。

結局「デフォルトだけで全てうまくいくことはない」ことを認識すべき。

そうですね。どこかで妥協は必要です。

ということで、

という方針とすると、15 (not_cjk) のブロックは次の9個です。

ころころ気が変わりましたが、妥協点として頃合いかもしれません。

t-tk commented 6 years ago

よく見るとScript属性が"Latin # Lm"のものがあちこち散らばっていました。収拾がつかないかもしれません。 もう少し考えてみます。

t-tk commented 6 years ago

迷いましたが、以下で気持ちが固まりつつあります。現状は、https://github.com/texjporg/tex-jp-build/commit/7ebcad9591802f394634dd9b6d0af5115db27828

kcatcode の既定を15にするblockは

下記、new default by UTF-8 のところが今回の更新により既定で通るようになります。 Alphabetic Presentation Forms の合字はどっちにしろ役に立たないようですし、ASCII入力の方が便利です。

\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}

\section{ASCII input}
``?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres
often na{\"\i}ve  vis-\`a-vis the d{\ae}monic ph{\oe}nix's official r\^ole
in fluffy souffl\'es?''

\section{new default by UTF-8}
``?`But aren't Kafka's Schloß and Æsop's Œuvres
often naïve vis-à-vis the dæmonic phœnix's official rôle
in fluffy soufflés?''

\section{punctuations}
{
\kcatcode"A7=15% U+A7:§ (Latin-1 Supplement, Common)
\kcatcode"201C=15% U+201C:“ (General Punctuation)

“¿But aren’t Kafka’s Schloß and Æsop’s Œuvres
often naïve vis-à-vis the dæmonic phœnix’s official rôle
in fluffy soufflés?”
}

\section{ligature}
{
\kcatcode"FB00=15% U+FB00:ff  (Alphabetic Presentation Forms)
\huge
off of{}f, film f{}ilm, flute f{}lute, shuffle shuff{}le shuf{}fle shuf{}f{}le

% error
%off film flute shuffle
}

{
\kcatcode"FB00=18% U+FB00:ff  (Alphabetic Presentation Forms)
\huge
off of{}f, film f{}ilm, flute f{}lute, shuffle shuff{}le shuf{}fle shuf{}f{}le

% strange result
off film flute shuffle
}
\end{document}
t-tk commented 6 years ago

T1 かつ「Unicodeの属性がLatin」かつ「Blockが Latin Extended-B」である文字は U+0237 (ȷ) の 'LATIN SMALL LETTER DOTLESS J' だけが該当し、現状 \usepackage[utf8]{inputenc} もしくは \usepackage[utf8x]{inputenc} でサポートされていないようです。 将来追加される可能性も皆無とは言えませんが、dotless j のUTF-8入力が普及する可能性は将来を含めて低いと考えます。 従って、Latin Extended-Bは今回の規定値変更の対象外としたいと思います。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
\kcatcode"180=18% U+0180 (Latin Extended-B)

\section{new default by UTF-8}
80:(Ă)(Ą)(Ć)(Č)(Ď)(Ě)(Ę)(Ğ)(Ĺ)(Ľ)(Ł)(Ń)(Ň)(Ŋ)(Ő)(Ŕ)\\
90:(Ř)(Ś)(Š)(Ş)(Ť)(Ţ)(Ű)(Ů)(Ÿ)(Ź)(Ž)(Ż)(IJ)(İ)(đ)()\\
A0:(ă)(ą)(ć)(č)(ď)(ě)(ę)(ğ)(ĺ)(ľ)(ł)(ń)(ň)(ŋ)(ő)(ŕ)\\
B0:(ř)(ś)(š)(ş)(ť)(ţ)(ű)(ů)(ÿ)(ź)(ž)(ż)(ij)()()()\\
C0:(À)(Á)(Â)(Ã)(Ä)(Å)(Æ)(Ç)(È)(É)(Ê)(Ë)(Ì)(Í)(Î)(Ï)\\
D0:(Ð)(Ñ)(Ò)(Ó)(Ô)(Õ)(Ö)(Œ)(Ø)(Ù)(Ú)(Û)(Ü)(Ý)(Þ)()\\
E0:(à)(á)(â)(ã)(ä)(å)(æ)(ç)(è)(é)(ê)(ë)(ì)(í)(î)(ï)\\
F0:(ð)(ñ)(ò)(ó)(ô)(õ)(ö)(œ)(ø)(ù)(ú)(û)(ü)(ý)(þ)(ß)

\section{punctuations}
\kcatcode"A7=15% U+A7:§ (Latin-1 Supplement, Common)

80:(Ă)(Ą)(Ć)(Č)(Ď)(Ě)(Ę)(Ğ)(Ĺ)(Ľ)(Ł)(Ń)(Ň)(Ŋ)(Ő)(Ŕ)\\
90:(Ř)(Ś)(Š)(Ş)(Ť)(Ţ)(Ű)(Ů)(Ÿ)(Ź)(Ž)(Ż)(IJ)(İ)(đ)(§)\\
A0:(ă)(ą)(ć)(č)(ď)(ě)(ę)(ğ)(ĺ)(ľ)(ł)(ń)(ň)(ŋ)(ő)(ŕ)\\
B0:(ř)(ś)(š)(ş)(ť)(ţ)(ű)(ů)(ÿ)(ź)(ž)(ż)(ij)(¡)(¿)(£)\\
C0:(À)(Á)(Â)(Ã)(Ä)(Å)(Æ)(Ç)(È)(É)(Ê)(Ë)(Ì)(Í)(Î)(Ï)\\
D0:(Ð)(Ñ)(Ò)(Ó)(Ô)(Õ)(Ö)(Œ)(Ø)(Ù)(Ú)(Û)(Ü)(Ý)(Þ)()\\
E0:(à)(á)(â)(ã)(ä)(å)(æ)(ç)(è)(é)(ê)(ë)(ì)(í)(î)(ï)\\
F0:(ð)(ñ)(ò)(ó)(ô)(õ)(ö)(œ)(ø)(ù)(ú)(û)(ü)(ý)(þ)(ß)

U+0131 : dotless-i (Latin Extended-A): \i, ı

\kcatcode"180=15% U+0180 (Latin Extended-B)
% error
U+0237 : dotless-j (Latin Extended-B): \j, %ȷ
\end{document}
t-tk commented 6 years ago

kcatcode の既定を15にするblockを以下とする更新 https://github.com/t-tk/tex-jp-build/commit/bb06ecdf7dd1c8f9d3492461b038717e4509dfc4

とサンプル更新 https://github.com/t-tk/tex-jp-build/commit/5cf6e6ec6b0a4de0a8e4f5df8a6d6d64672ada40

方針確定して、サンプルやドキュメント更新を進めます。

aminophen commented 6 years ago

とりあえず upLaTeX に含まれる ukinsoku.tex について,「Latin-1 Supplement のうち属性が Latin のもの」をコードポイントで指定するようにしてリリースしておきました。 texjporg/uplatex@b5f7528

uptex-base の方はまた後日。

t-tk commented 6 years ago

upTeX 1.23 リリースに伴い、当Issueは完了。

aminophen commented 6 years ago

FYI: latex3/latex2e@ed72e71 で,\j (0237), \SS (1E9E), \k{} (02DB) and \.{} (02D9) が追加されました。特に \j は OT1 や T1 等,多くのエンコーディングで \DeclareUnicodeCharacter 設定が入りました。

t-tk commented 5 years ago

@aminophen さん、\DeclareUnicodeCharacter 設定更新のご紹介ありがとうございます。

以前書いた方針↓に従うとすると、\j (0237), \SS (1E9E) を含むブロックはkcatcode の既定を15にすべきblock に新たに該当することになったことになります。

kcatcode の既定を15にするblockは

新規に該当の "Latin Extended-B", "Latin Extended Additional"はすべての文字が「Unicodeの属性がLatin」になっていました。 一方 U+02D9, U+02DB は「Unicodeの属性がCommon」なので対象外になります。

U+0237やU+1E9EをUTF-8で入力するような需要がそんなに多いとも思えませんが、 逆にLatin Extended-BやLatin Extended Additional の文字をCJK扱いとしたい需要はさらに少ないでしょうからこの際変更しようかと思っています。 再度の既定値の非互換変更になりますが、前回よりもさらに悪影響を受けるユーザーさんは少ないと予想し、再度のゴメンナサイをしようかと。 また、T1の文字表を眺めてみるとこれ以上の追加はあり得ず、これで打ち止めになるはずです。

t-tk commented 5 years ago

以下でテスト中です。 https://github.com/t-tk/tex-jp-build/tree/uptex-devel

昨年の場合は 0x007F..0x0080 のコード領域を触っていたので ukinsoku.tex にも影響してややこしかったのですが、今回はサンプルの微修正のみで済みます。 来週2月23日リリース予定。

t-tk commented 5 years ago

予定通り "Latin Extended-B", "Latin Extended Additional" のデフォルトを not_cjk に変更して upTeX 1.24 としてリリースしました。 uptex-base も更新し、CTANに投稿しました。 ここは閉じます。