Open t-tk opened 1 year ago
ありがとうございます。 そうすると、一つの案として、次のような進め方が出来るように思いました。いかがでしょうか?
1は日本語 XeTeX として、XeTeX互換性が高く、海外LaTeXパッケージが通りやすいところを目指す。2はpTeXの後継として従来の日本語pLaTeX用パッケージが通りやすいことを目指す。 自動判定は、1向けには海外製は従来の延長でよくて、2向けは日本国内の作者宣伝して対応してもらう。
upTeX の IVS関連 #45 で kcatcode周りをいじっている最中に思いついた案です。 https://github.com/texjporg/tex-jp-build/commit/92aeca952d89ae24423ef78bd3766d25cb3f483a
kcatcode latin_ucs 14番 を新設。 対象のUTF-8のマルチバイト文字列のUnicode Blockの kcatcodeがlatin_ucs 14番の時には、内部バッファ(UTF-8)からノードを生成する際に「欧文 Unicode 1 文字 」とみなして「欧文 Unicode 1 文字 1 トークン」を生成する。 そのノードは欧文のcatcode (1~15)が振られ「欧文の8bit tfm」を参照する。 今のところ文字コードの最大は 0xFF を想定だが、0x10FFFF まで拡張可能。0xFFFFまでは ofm を読めるようにすれば対応可のはず。
この状態でほぼ 「upTeX ベース、 dvi出力」「(和文・欧文どちらも) Unicode 1 文字から 1 トークンができる」「和文JFM拡張」「欧文の本文が8bit tfm」 が実現できていると思います。 あとは、和文のトークンから catcode を得ようとした場合に欧文の letter(11) や other_char(12) を返すように機能追加すれば、ほとんど npTeX でやろうとしていたことに近づいていると思います。
plain uptex入力に対し、
%#!uptex
\parindent=0pt
\font\ec=ecrm1000
\ec
\jfont\jpy=umin10
\jpy
\def\pick#1{=#1=}
%default
1 Æ \kchar"C6 \char"C6
\wlog{Æ}
\message{\expandafter\pick\string Æ}
\kcatcode"C6=15 % not_cjk: not cjk characters
2 Æ \kchar"C6 \char"C6
\wlog{Æ}
\message{\expandafter\pick\string Æ}
\kcatcode"C6=18 % other_kchar: cjk symbol codes
3 Æ \kchar"C6 \char"C6
\wlog{Æ}
\message{\expandafter\pick\string Æ}
\kcatcode"C6=14 % latin_ucs: not cjk in ucs code
4 Æ \kchar"C6 \char"C6
\wlog{Æ}
\message{\expandafter\pick\string Æ}
%default again
\kcatcode"C6=15 % not_cjk: not cjk characters
5 Æ \kchar"C6 \char"C6
\wlog{Æ}
\message{\expandafter\pick\string Æ}
\bye
logはこんなのが出ました。 Æ (U+00C6, UTF-8: 0xC3 0x86) に対し、default(kcatcode=15)では0xC3, 0x86 の 8bit 2byte 欧文扱いだが、 kcatcode=14 では 0xC6 の欧文として扱われる。
This is e-upTeX, Version 3.141592653-p4.1.1-u1.30-230214-2.6 (utf8.uptex) (TeX Live 2024) (preloaded format=euptex 2024.4.6) 6 APR 2024 21:41
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**latincat06.tex
(./latincat06.tex
^^c3^^86
=^^c3=^^86
^^c3^^86
=^^c3=^^86
Æ
=Æ=
^^c6
=^^c6=
^^c3^^86
=^^c3=^^86 [1] )
Output written on latincat06.dvi (1 page, 412 bytes).
\kchar
は常に和文(CJK)扱い、\char
は常に欧文扱いになる。
upTeXにcatcodeが15以下でかつCJKのトークンを追加で導入しよう、という提案です。 [upTeX] JIS-encoded TFM https://github.com/texjporg/tex-jp-build/issues/149 とは別に扱った方がよさそうなので issue を立てます。
背景はこちら。 https://github.com/texjporg/tex-jp-build/issues/149#issuecomment-1279731866
で、私の提案はこちら https://github.com/texjporg/tex-jp-build/issues/149#issuecomment-1279757248
で @aminophen さんのリプライ https://github.com/texjporg/tex-jp-build/issues/149#issuecomment-1279778635