Skip to content
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

updmap の機能追加案 #16

Open
aminophen opened this issue Jan 29, 2019 · 13 comments
Open

updmap の機能追加案 #16

aminophen opened this issue Jan 29, 2019 · 13 comments

Comments

@aminophen
Copy link
Member

aminophen commented Jan 29, 2019

#10texjporg/uptex-fonts#8 で出ている updmap の話をまとめます。

[1] Adobe-Identity0 なフォントを使うための設定手順を作りたい

Noto / SourceHan のような Adobe-Identity0 なフォントは,Unicode 専用なので,普通は pTeX で使えない。 → 現在の updmap / kanji-config-updmap の仕組みでは扱えない。しかし,設定手順は kanji-config-updmap-sys noto のような一発で実行できると便利。

(今ある tl-updates/updmap.pl のままでは,jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up を別々に設定しないといけず,3回のコマンドが必要である。これを簡略化するには?)

  • updmap.pl を拡張せずとも,kanji-config-updmap.pl を拡張すれば対応できる?(例えば,(1) データベースに「AI0 なフォントである」という情報を登録しておき,(2) AI0 なフォントに対しては representative map を ptex-* ではなく uptex-* にするだけ)
  • 仮にこの実装なら,rml などのマップエントリが消えるので,副作用がないか確認。(例:pxchfon.sty は \special{pdf:mapline -rml} のように - で始まる PS-TFM 名を指定することで,kanjix.map で登録された既存のマップエントリを削除する(dvipdfm-x のソース spc_pdfm.c も参照)。このとき,元々 kanjix.map に当該エントリが無かったらどうなるのか?)

[2] CMap を変更するための設定手順を作りたい

UniJIS{,2004}-UTF16-{H,V} ←→ UniJIS{,2004}up-UTF16-{H,V} を切り替えるコマンドが欲しい。考えられる方法は2つ。

  • maps/ にあらかじめ UniJIS{,2004}up-UTF16-{H,V} を使うマップを追加用意しておき,updmap / kanji-config-updmap でそれを呼べるようにする。
  • maps/ は追加しない。代わりに updmap / kanji-config-updmap を拡張し,kanjix.map ができた後に CMap の文字列置換を行う。
@norbusan
Copy link
Member

ad [1] Adobe-Identity0

自分の意見ですが、kanji-config-updmapだけの拡張が足りないと思います:結局updmap.cfgの設定だけしてるので、updmapは対応していなかったら、できないと思います。最後にupdmapはjaEmbedの設定をとって、いろんなmapでkanjix.mapを作成すること

jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up を別々に設定しないといけず,3回のコマンドが必要である。これを簡略化するには?

3回のコマンドが必要じゃないため、kanji-config-updmapを拡張するべきです。

例えば:

  • kanji-config-updmap hiraginoは全てのエンジンに対してhiraginoを選択して、3回updmapを起動して(実は一回全部合わせて)、3つのjaEmbed.XXXを更新します。
  • kanji-config-updmap notoはAI0に対応してる設定だけ更新します。そして、その以外Warning: ptex does not support AIO fonts, leaving ptex settings untouched at: ......
  • kanji-config-updmapの新しいオプション:-ptex, -otf, -uptex, -otf-up (拡張のupdmapkanji_map_progs)。使い方:
    kanji-config-updmap -uptex -otf-up noto
    
    uptexotf-upだけの設定をnotoにします。

どう思いますか?

ad [2] CMap

第一:問題はあまりわかりません。すみません。今のuptex-XXXXX.mapにたとえば

uprml-h	UniJIS-UTF16-H	HiraMinPro-W3.otf

が書いてありますよね。それは

uprml-h	UniJISup-UTF16-H	HiraMinPro-W3.otf

に書換の話ですか?
なず両方が必要ですか?どの環境に?

あまりにもわからないんですが、意見として、最初の方法の方が簡単じゃないかなと思っています。
updmapkanjixを作成の後の書換はなかなかどう。。。

でも、本当に問題をわかりませんから、判断できません。

@aminophen
Copy link
Member Author

aminophen commented Jan 31, 2019

すみません,まだ私自身が「そういう機能が必要かどうか」「必要ならばどんな user interface が良いか」のどちらも意見が決まっていません。

[1] Adobe-Identity0 なフォントを使うための設定手順を作りたい

kanji-config-updmap を拡張するのは必要ですが,例えば,こんな心配をしています。

  • 1月30日に,noto を使いたくなって,コマンドを実行した。 → その結果,updmap.cfg に「jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up」が「noto」になる。
  • 1月31日に,やっぱり hiragino に戻したくなって,kanji-config-updmap-sys hiragino を実行した。 → この結果は何?

「jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up」と「jaEmbed」が競争する場合,どちらを希望するかが人によって違うかもしれません。

[2] CMap を変更するための設定手順を作りたい

書き直します。

これを作りたい理由は, texjporg/uptex-fonts#8 の「矢印の向き」など,Adobe CMap の変なところを直すためです。(Adobe に pull request は一回しましたが,backward compatibility issue などの理由で reject されています。)

  • maps/ にあらかじめ UniJIS{,2004}up-UTF16-{H,V} を使うマップを追加用意しておき,updmap / kanji-config-updmap でそれを呼べるようにする。

これは,maps のファイルを全部 copy して,新しい maps を作る方法です。implementation は簡単です。でもこの場合,dvips + gs でも UniJIS{,2004}up-UTF16-{H,V} が使われるのですが,このファイルは TeX Live で配っているだけなので,gs の Resource から見つかりません。これが心配です。

  • maps/ は追加しない。代わりに updmap / kanji-config-updmap を拡張し,kanjix.map ができた後に CMap の文字列置換を行う。

この方法なら,dvips maps は untouched です。

@norbusan
Copy link
Member

(明日の朝出発なので、返事が遅くなります。旅行中。)

@norbusan
Copy link
Member

ひとつだけ

* 1月30日に,noto を使いたくなって,コマンドを実行した。 → その結果,updmap.cfg に「jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up」が「noto」になる。

* 1月31日に,やっぱり hiragino に戻したくなって,kanji-config-updmap-sys hiragino を実行した。 → この結果は何?

「jaEmbed.uptex / jaEmbed.otf / jaEmbed.otf-up」と「jaEmbed」が競争する場合,どちらを希望するかが人によって違うかもしれません。

はい、それはそうですが、今でもupdmapそのような状況に対応しています(古いkanjiEmbed <-> jaEmbed)。はい、新しい方法ならば、全部「jaEmbed.XXXX」だけ使えるようになって、backward compatibilityでjaEmbedだけ使われた場合は、ワーニングを出して、更新すること。

それは問題ないと思います。僕に任せてください。

@aminophen
Copy link
Member Author

(昨日から体調がアレなので,私も返事遅くなります。)

@norbusan
Copy link
Member

(お大事に!)

@aminophen
Copy link
Member Author

@norbusan さん,作成いただいた progs-support を試してみました。しかし,私が作った物の方が

(1) updmap を拡張しなくて良い(kanji-config-updmap だけ拡張で済む)
(2) kanji-config-updmap の Usage も変わらない
(3) コマンドが一回で済む

という点で良いと思いますがどうでしょう? 特に (2) は日本のユーザを混乱させずに済みます。おそらく,ほとんどの日本のユーザは kanji-config-updmap-sys noto としたいはずです。

-  Usage:  kanji-config-updmap [OPTION] {<fontname>|auto|nofont|status}
+  Usage:  kanji-config-updmap [OPTION] NN[.PROG]={<fontname>|auto|nofont|status} ...

本当は kanji-config-updmap --help を読んで欲しいのですが,ほとんどの人は他の人が書いたブログを見て真似るだけです。そうすると @norbusan のコードでは NOT EXIST ptex-noto.map が出てしまいます。

@norbusan
Copy link
Member

norbusan commented Mar 7, 2019

ま〜、僕は別になんでもいいと思いますが、将来的にそのようなフォントがどんどん出てくると思っています。僕の感じはkanji-config-updmap-sys noto を起動することは、曖昧です。そして、次のkanji-config-updmap-sysの起動でまた消してしまいます。

はい、ユーザの問題をよくわかっています。それは欲しかったら、僕の更新でもうえのとおり、kanji-config-updmap-sys noto が動けるようにすることができます。同じくuptex/otf-uptexだけの更新します。普通のユーザは、NotoとHiraginoはどこが違うがわからないと思います。

でも、とりあえずこれでいいかな?

@aminophen
Copy link
Member Author

将来的にそのようなフォントがどんどん出てくると思っています

は賛成。

kanji-config-updmap-sys noto を起動することは、曖昧です。

はよくわかりません。

そして、次のkanji-config-updmap-sysの起動でまた消してしまいます。

これは無いと思います。一度 kanji-config-updmap-sys noto すると,jaEmbed = noto なので,次に kanji-config-updmap-sys してもまた noto になるから問題ないです。


さて,「upTeX + dvipdfmx で Noto を使うための interface」は私のもので十分なのですが,もっと大きな問題があります。それは

「Adobe-Identity0 なフォントの日本語部分は dvips + gs では全く使えない」

ということです。どうしようか迷っています。updmap.pl は

https://github.com/texjporg/jfontmaps/blob/5f7a631dc5ac0b03b7ff2a12b3edd6adb8b6f679/tl-updates/updmap.pl#L877

というコードで skip しますが,それだと dvips mapline が全部消えてしまい,日本語が全く使えない状態になってしまいます。そうならないように新しいコードを書きます。

@aminophen
Copy link
Member Author

aminophen commented Mar 17, 2019

それだと dvips mapline が全部消えてしまい,日本語が全く使えない状態になってしまいます。そうならないように新しいコードを書きます。

fallback ブランチにその実装を作ってみました。

  • 以下の TFM に対しては AI0 fonts (unicode-encoded fonts) を map する。
    • upTeX + dvipdfmx の raw text (uptex-{ja,sc,tc,ko}-{family}.map)
    • upTeX + dvipdfmx + \usepackage{otf} の raw text (otf-up-{ja,sc,tc,ko}-{family}.map)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の \UTF (otf-{ja,sc,tc,ko}-{family}.map の一部)
  • 以下の TFM に対しては noEmbed を map する。
    • pTeX + dvipdfmx の raw text (ptex-{ja,sc,tc,ko}-{family}.map)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の raw text (otf-{ja,sc,tc,ko}-{family}.map の一部)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の \CID (otf-{ja,sc,tc,ko}-{family}.map の一部)
    • pTeX/upTeX + dvips (全部)

ただ,自分でもまだ納得していないのでリリースはしたくないです。

master ブランチは以下のようになっています。

  • 以下の TFM に対しては AI0 fonts (unicode-encoded fonts) を map する。
    • upTeX + dvipdfmx の raw text (uptex-{ja,sc,tc,ko}-{family}.map)
    • upTeX + dvipdfmx + \usepackage{otf} の raw text (otf-up-{ja,sc,tc,ko}-{family}.map)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の \UTF (otf-{ja,sc,tc,ko}-{family}.map の一部)
  • 以下の TFM に対しては何も map しない。
    • pTeX + dvipdfmx の raw text (ptex-{ja,sc,tc,ko}-{family}.map)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の raw text (otf-{ja,sc,tc,ko}-{family}.map の一部)
    • pTeX/upTeX + dvipdfmx + \usepackage{otf} の \CID (otf-{ja,sc,tc,ko}-{family}.map の一部)
    • pTeX/upTeX + dvips (全部)

この方がわかりやすいかも,と思います。

@aminophen
Copy link
Member Author

aminophen commented Mar 17, 2019

fallback ブランチにその実装を作ってみました。
ただ,自分でもまだ納得していないのでリリースはしたくないです。

というのは,結局「updmap が dvipdfmx と dvips のフォントを同じにしようとする」のが弱点だと思っているからです。progs-support (ja.uptex とか ja.otf とか) は一見良さそうだったのですが,完全な解決にはなっていないので中途半端でした。

  • ja.uptex の value は以下の2個の map を一緒に決める。でも,(1) は AI0 が OK で (2) は NG。
    • (1) upTeX + dvipdfmx
    • (2) upTeX + dvips
  • ja.otf はさらに多く,以下の10個の map を一緒に決める。でも AI0 が OK なのは (3) と (5) だけで,他の8つは全部 NG。
    • (1) pTeX + dvipdfmx + \usepackage{otf} の raw text
    • (2) pTeX + dvipdfmx + \usepackage{otf} の \CID
    • (3) pTeX + dvipdfmx + \usepackage{otf} の \UTF
    • (4) upTeX + dvipdfmx + \usepackage{otf} の \CID
    • (5) upTeX + dvipdfmx + \usepackage{otf} の \UTF
    • (6) pTeX + dvips + \usepackage{otf} の raw text
    • (7) pTeX + dvips + \usepackage{otf} の \CID
    • (8) pTeX + dvips + \usepackage{otf} の \UTF
    • (9) upTeX + dvips + \usepackage{otf} の \CID
    • (10) upTeX + dvips + \usepackage{otf} の \UTF

こう考えると,もともと「(kanji-config-)updmap で AI0 fonts を使おうと試みること」自体が bad なのではないかと思えてしまいます。

なお,「ja.otf は10個の map を一緒に決める」というのが問題だからファイルを分ければいい気もしますが,一方で dvipdfmx -f otf-ipaex.map hoge.dvi のように直接その mapfile をコマンドで使っているユーザもいるので,その互換性も壊したくないので分けることができません。

@aminophen
Copy link
Member Author

fallback ブランチにその実装を作ってみました。

同じ挙動ですが,stub ブランチに better な実装を作りました。これをリリースしようと思います。

@aminophen
Copy link
Member Author

[1] Adobe-Identity0 なフォントを使うための設定手順を作りたい

20190318.0 を出しました。「AI0 フォントが使える場合はそれをマップし,使えない場合は noEmbed と同じ設定をマップする」という仕様です。

[2] CMap を変更するための設定手順を作りたい

これは引き続き考えます。

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

No branches or pull requests

2 participants