New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
t-tk opened this Issue Jan 7, 2018 · 18 comments

Comments

Projects
None yet
3 participants
@t-tk
Collaborator

t-tk commented Jan 7, 2018

upTeXのblock に関し uptex-fonts の方で述べていたLatin-1 blockの分割案です。
texjporg/uptex-fonts#2 (comment)

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

This comment has been minimized.

Member

aminophen commented Jan 8, 2018

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

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

[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 が連動していたが,新バージョンでは連動しなくなる)

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

@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 8, 2018

diffは分かりづらかったですね。Latin-1に関するところは、実質↓の二つのコミットです。
t-tk@43f5fee
t-tk@1472dfa

[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

This comment has been minimized.

Member

aminophen commented Jan 8, 2018

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

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

@zr-tex8r

This comment has been minimized.

zr-tex8r commented Jan 8, 2018

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

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

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

@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 9, 2018

コメントありがとうございます。
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

This comment has been minimized.

zr-tex8r commented Jan 12, 2018

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

  • 次の条件に該当する文字を含むブロックを15にする。
    • TeXのT1エンコーディングに含まれる。
      ※今ではT1が最も基本的な欧文エンコーディングである。
    • UnicodeでのScript属性がCommon、Inheritedでない
      ※「CommonやInheritedなら和文でもいいじゃない」という理屈。

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

  • Basic Latin
  • Latin-1 Supplement(のLatin部分)
  • Latin Extended-A
  • Latin Extended-B
  • Alphabetic Presentation Forms
    ※T1のf-リガチャのグリフを「U+FB0xと対応する」と考えると含まれる。

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

  • TeXのT1・OT1・LY1・T2A・LGRエンコーディングに含まれる。
    ※もっとマイナーなOT4・IL2・QX・L7x・T2B・T2Cを全部含めても同じ。
  • UnicodeでのScript属性がCommon、Inherited、Greek、Cyrillicでない。
    ※ギリシャ・キリル文字はその最も基本的な集合がpTeXの和文文字に含まれるため、全て除外する。
@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 12, 2018

ご検討ありがとうございます。
規定はなるべく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は置いておいて、

  • \usepackage[utf8x]{inputenc} + babel がなるべく通るようにする。ただしCJKに加えGreek, Cyrillicは除外(pTeXとほぼ互換)。
  • Latin Extended-{C,D,E}, Latin Extended Additional 及び Latinとともに組まれることが想定される IPA Extensions は、Basic Latin, Latin Extended-{A,B} と同様15 とする。

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

  • IPA Extensions
  • Hebrew
  • Latin Extended Additional
  • Latin Extended-C
  • Latin Extended-D
  • Latin Extended-E

あるいはさらに加えて

  • Arabic
  • Arabic Supplement
  • Arabic Extended-A
  • Arabic Presentation Forms-A
  • Arabic Presentation Forms-B
@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 14, 2018

Latin* と Hebrew を 15(not_cjk) とする案で作ってみました。 t-tk@4395048

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

  • Basic Latin
  • Latin-1 Supplement のうち属性がLatinのもの (=Latin-1 letters)
  • Latin Extended-A
  • Latin Extended-B
  • Alphabetic Presentation Forms
  • IPA Extensions
  • Hebrew
  • Latin Extended Additional
  • Latin Extended-C
  • Latin Extended-D
  • Latin Extended-E

\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

This comment has been minimized.

Collaborator

t-tk commented Jan 14, 2018

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

@zr-tex8r

This comment has been minimized.

zr-tex8r commented Jan 15, 2018

(現状の自分の雑感)

次のような方針がある:

  • できるだけ15にする(Greek、Cyrillicは例外)
    • 「明らかにCJKな文字+pTeXの和文文字」以外?
  • どれも15にしない(ASCIIは例外)
  • 「何か」に基づいて決める。例えば:
    • T1の範囲
    • LaTeX標準のパッケージ(inputenc)だけで“入力”できる範囲。(サードパーティのパッケージを要しない)
    • LaTeX標準のパッケージ+Babelだけで“入力”できる範囲。
    • AdobeのCJKのグリフ集合で全角幅のものの範囲。
      ※AC1に「全角幅のé」があるので期待に沿わない。

その他の自分の考え:

  • Greek、Cyrillicは和文扱いを保つべき。
  • ↑を前提にするなら、結局「デフォルトだけで全てうまくいくことはない」ことを認識すべき。
  • 「欧文か和文か(15かそれ以外か)」はエンジン実装からは切り離して、フォーマット作成時のTeX言語コード(ukinsoku.tex?)で扱う、という方針もある。
@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 15, 2018

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

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

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

  • どんな方法を採ったところで誰かの立場からは「デフォルトが不都合」という状況は残ってしまう。
  • 本格的な(非英語)欧文(ラテン文字)のためには、「¡¿«»“”§£」の対応などを考えるとkcatcode切り替えの操作は必須
    * なので、「kcatocodeの切り替えはユーザーの用途に合わせ適宜してください」と言わざるを得ない
  • ギリシャ文字、キリル文字、ヘブライ文字、アラビア文字、タイ文字などと比べ、ラテン文字のユーザーは相当多いと思われる。
    • upTeXにとってCJKとラテン文字の混植は優先順位が高く、デフォルトを選ぶ理由になる。

ということで、

  • 「何か」に基づいて決める。例えば:
    • UnicodeのScript属性がLatinのものはできるだけ15にする(FULLWIDTH LATINは例外)

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

  • Basic Latin
  • Latin-1 Supplement のうち属性がLatinのもの (=Latin-1 letters)
  • Latin Extended-A
  • Latin Extended-B
  • Alphabetic Presentation Forms
  • Latin Extended Additional
  • Latin Extended-C
  • Latin Extended-D
  • Latin Extended-E

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

@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 15, 2018

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

@t-tk

This comment has been minimized.

Collaborator

t-tk commented Jan 18, 2018

迷いましたが、以下で気持ちが固まりつつあります。現状は、7ebcad9

  • 目的は、\usepackage[utf8]{inputenc} もしくは \usepackage[utf8x]{inputenc} の Latin文字がなるべく通るようにする。
    • T1 かつ「Unicodeの属性がLatin」かつ「\usepackage[utf8]{inputenc}でサポートされている」文字はUTF-8入力で既定で出せるようにする
    • Alphabetic Presentation Forms にある合字は、通常の欧文TeXのUTF-8入力には使われないので対象外とする
    • その他のBlockにあるLatin文字は、通常の欧文TeXのUTF-8入力には使われないので対象外とする
  • その他の言語は従来通り、欧文(非CJK)扱いするにはkcatcodeを切り替えてから使用する
  • AC1の「全角幅のé」などは従来とは逆にkcatcodeの設定が必要になるという副作用があるが、ゴメンナサイする

kcatcode の既定を15にするblockは

  • Basic Latin
  • Latin-1 Supplement のうち属性がLatinのもの (=Latin-1 letters)
  • Latin Extended-A
  • Latin Extended-B

下記、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

This comment has been minimized.

Collaborator

t-tk commented Jan 19, 2018

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

This comment has been minimized.

Collaborator

t-tk commented Jan 21, 2018

kcatcode の既定を15にするblockを以下とする更新 t-tk@bb06ecd

  • Basic Latin
  • Latin-1 Supplement のうち属性がLatinのもの (=Latin-1 letters)
  • Latin Extended-A

とサンプル更新 t-tk@5cf6e6e

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

@aminophen

This comment has been minimized.

Member

aminophen commented Jan 27, 2018

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

uptex-base の方はまた後日。

@t-tk

This comment has been minimized.

Collaborator

t-tk commented Feb 25, 2018

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

@t-tk t-tk closed this Feb 25, 2018

@aminophen

This comment has been minimized.

Member

aminophen commented Jul 30, 2018

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment