texjporg / mendex-doc

Japanese in­dex pro­ces­sor (documents only)
BSD 3-Clause "New" or "Revised" License
4 stars 2 forks source link

mendex v3.0 向け pdf の更新 #7

Closed t-tk closed 5 years ago

t-tk commented 6 years ago

mendexのデフォルト文字コードのUTF-8化 https://github.com/texjporg/tex-jp-build/issues/60 でオプションの変更があった部分の更新を希望しています。 ここの master のソースは更新済みです。

mendex.pdf は、以前 @aminophen さんが作成して下さったようです。 mendex.man1.pdf 作成は、日本語化パッチを当てた groff が必要と伺いました。私が作成するのは少々荷が重いので手伝ってくださると有難いです。

groff は最新の 1.22.4 で utf8 対応予定と Werner LEMBERG さんに教えていただきました。 http://tug.org/pipermail/tex-live/2018-April/041445.html しかし、1.22.4.rc2 という開発版の段階であり 正式版はまだリリースされていないようです。http://ftp.gnu.org/gnu/groff/ 標準のgroffでutf8の日本語が通るようになればうれしいので、状況を調べてみたいと思いつつ手が回っていません。

aminophen commented 6 years ago

mendex v3.0 が TeX Live でバイナリとして配布されるのは 2019 年からなので,あと10ヶ月はドキュメント更新を待った方がいいと思います。

t-tk commented 6 years ago

コメントありがとうございます。更新を待つとのこと、了解しました。 その間にgroff+utf8+日本語についても状況が変わるかもしれません。

ここはissueを立てたままにしておきます。

aminophen commented 5 years ago

pretest 開始のアナウンスが出たらなるべく早くリリースしようと思います。

なお,mendex.man1.pdf は角藤さんが更新してくださいました。

groff は最新の 1.22.4 で utf8 対応予定と Werner LEMBERG さんに教えていただきました。

groff 1.22.4 は昨年12月に出たようです。あとで試してみます。

t-tk commented 5 years ago

この話

groff は最新の 1.22.4 で utf8 対応予定と Werner LEMBERG さんに教えていただきました。 http://tug.org/pipermail/tex-live/2018-April/041445.html

よく読むと encoding を heuristic でなく明示的に指定する tag が記述できるようになる、ということのようです。 手元では日本語の部分が上手く出ません。 GNU groff version 1.22.4 で試しました。

$ groff -K utf8 -man -t -rS11 mendex.1  > a.ps
troff: mendex.1:486: warning: can't find special character 'u304B'
troff: mendex.1:486: warning: can't find special character 'u3075_3099'
troff: mendex.1:486: warning: can't find special character 'u3057'
troff: mendex.1:486: warning: can't find special character 'u304D'
troff: mendex.1:486: warning: can't find special character 'u304B_3099'
troff: mendex.1:486: warning: can't find special character 'u3044'
(略)
t-tk commented 5 years ago

groffの日本語化の過去の取り組みについて調べました。

以前 @aminophenさんに↓で教えて頂いた https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2057&parent=12304 groff_1.18-1.1-12 が最後のようです。 北川信亨さん, 柳原良亮さんによるパッチ(jgroff-0.101)を鵜飼文敏さんがmultibyte拡張に書き換えたもので ソースに含まれる ChangeLog.jp によると日本語化部分の最終の修正は 2002-11-04 となっています。 ソースに含まれる README.jp によると日本語化されたモジュールは groff, gtroff, grotty, grops, grohtml, grodvi, gxditview, gtbl, gpic, geqn, xtotroff とあります。大掛かりです。 日本語化の内容は、日本語フォントの切り替え(ゴシック、明朝体)、禁則処理、PostScript出力時の文字位置の調整(wcharkern,lowerwchar)などです。

今回利用しようとしているPostScript出力には grops の日本語化部分を使用しているはずです。 日本語PostScriptを出力するためには、日本語部分を日本語フォントに切り替える機能が必須であることはもちろん見栄えも含めて満足いくものにするためにはwcharkern,lowerwcharの機能は欲しいところです。

公式の groff には今もこれらは取り込まれていません。UTF-8対応が進んでいるのは確かなものの、日本語化部分は過去のローカライズ版の水準に達していないと言えると思います。 ただし日本語化groffでかなりの部分を占めているEUC-JPの処理は、今となってはUTF-8前提にしてしまって省略できるような気もします。 ローカライズ版が本家に取り入れないまま、本家の発展とともにローカライズ版の長所が失われつつある図式です。日本語化groffの成果を一部分でも公式に取り込んでもらうことができれば嬉しいのですが。

以下、groff 1.22.4 の手元での簡単な動作確認です。 groff 1.22.4 で英語主体で日本語が少々の入力を端末に出力

$ groff -T utf8 -man -k mendex.1

充分実用的。 現在私の方で作成中の upmendex.1 ではハングルも含まれますが端末出力は充分実用的です。

groff 1.22.4 で日本語主体の入力を端末に出力:

$ groff -T utf8 -man -k mendex.1.ja
(省略)
troff: mendex.1.ja:15: warning [p 1, 2.2i]: can't break line
troff: mendex.1.ja:15: warning [p 1, 2.3i]: cannot adjust line
troff: mendex.1.ja:15: warning [p 1, 2.5i]: can't break line
troff: mendex.1.ja:17: warning [p 1, 2.7i]: can't break line
troff: mendex.1.ja:24: warning [p 1, 3.3i]: can't break line
troff: mendex.1.ja:27: warning [p 1, 3.7i]: can't break line
troff: mendex.1.ja:30: warning [p 1, 4.0i]: can't break line
(省略)

一応読めるが行分割に失敗している模様。せめてこれくらい何とかならないものか。

groff 1.22.4 で日本語主体の入力をPostScriptに出力 (一昨日の投稿とほぼ同じ)

$ groff -K utf8 -man -t mendex.1.ja > a.ps
troff: mendex.1.ja:9: warning: can't find special character 'u540D'
troff: mendex.1.ja:9: warning: can't find special character 'u79F0'
troff: mendex.1.ja:10: warning: can't find special character 'u7D22'
troff: mendex.1.ja:10: warning: can't find special character 'u5F15'
troff: mendex.1.ja:10: warning: can't find special character 'u6574'
troff: mendex.1.ja:10: warning: can't find special character 'u5F62'
(省略)

日本語文字が欠けてしまう。下記 [ubuntu-jp:6071] の方法で警告を消すことはできるようです。

その他見つけたもの

kubotaさん "groff 日本語パッチ" https://srad.jp/~kubota/journal/5560/ 2001年頃の状況です。おそらく2019年の現在までにいくつかは不要になりいくつかは実現しているのかなと思います。

"[ubuntu-jp:6062] 日本語のマンページを ps に直すには" のスレッド https://lists.ubuntu.com/archives/ubuntu-jp/2018-November/thread.html

"[ubuntu-jp:6071] Re: 日本語のマンページを ps に直すには" https://lists.ubuntu.com/archives/ubuntu-jp/2018-November/006070.html

t-tk commented 5 years ago

CJKの行分割に関しては groff 1.21 位で機能強化されているようです。 日本語主体の入力に対しては ja.tmac というものを使うと良いようです。

ソースの中のNEWSより

o The new `class' request assigns a short name to a set of characters
  which can be referred to in the `cflags' request.  This is especially
  useful to control line-breaking and hyphenation rules in CJK languages.

o Three new values for the `cflags' request have been added, which are
  needed for proper CJK support.

    128  prohibit before but allow break after character
    256  prohibit after but allow break before character
    512  allow break before and after character

groff 1.22.4 で日本語主体の入力を端末に出力, ja.tmac を使用

groff -T utf8 -man -k -mja mendex.1.ja
(省略)
troff: mendex.1.ja:15: warning [p 1, 2.2i]: cannot adjust line
troff: mendex.1.ja:17: warning [p 1, 2.7i]: cannot adjust line
troff: mendex.1.ja:24: warning [p 1, 3.5i]: cannot adjust line
troff: mendex.1.ja:27: warning [p 1, 4.0i]: cannot adjust line
troff: mendex.1.ja:30: warning [p 1, 4.5i]: cannot adjust line
troff: mendex.1.ja:33: warning [p 1, 5.0i]: cannot adjust line
(省略)

行分割は改善したが整列に失敗している? warningは目障りだが、実用的と呼べる範囲か。

t-tk commented 5 years ago

こんなのを見つけました。本家のgroffでもきっとpsの文字欠けは防げるはず。 @obuk さんの using-grops use japanese fonts with grops groff postscript driver https://github.com/obuk/using-grops

obuk commented 5 years ago

こんにちは。github からメールが届いたので、ubuntu 18.04 の groff 1.22.3 で ps を出力し、 その実行結果を貼り付けます。フォントは fonts-takao* です。

$ groff -man -mja mendex.1.ja >a.ps
mendex.1.ja:128: warning [p 3, 1.8i]: cannot adjust line
mendex.1.ja:250: warning: can't find special character `u301C'
mendex.1.ja:402: warning [p 6, 4.8i]: cannot adjust line
mendex.1.ja:402: warning [p 6, 5.0i]: cannot adjust line
$ ps2pdf a.ps a.pdf
$ ls -l a.ps a.pdf
-rw-rw-r-- 1 obuk obuk   582734 Mar  5 10:42 a.pdf
-rw-rw-r-- 1 obuk obuk 42528520 Mar  5 10:39 a.ps
t-tk commented 5 years ago

@obuk さん、ありがとうございます。 本家のgroffで日本語ps→pdfが作成できるのは魅力的で、希望が持てます。 この先さらに、前述の「日本語フォントの切り替え、禁則処理、PostScript出力時の文字位置の調整」のうち禁則処理はすでに本家のgroffに機能があるようなので、残りの「日本語フォントの切り替え、PostScript出力時の文字位置の調整」が手軽になると嬉しいところです。 時間が出来たら少し考えてみようかと思います。

おそらく本質的な問題ではありませんが、u301Cとはどういう訳か波ダッシュ問題の一種?

obuk commented 5 years ago

301C の警告は、ja.local のようなものに次行を加えることで止めることができます。説明は Character-Translations を参照してください。

.tr \[u301C]\[uFF5E]

t-tk さんが気にされている、日本語フォントの切り替え、禁則処理、PostScript出力時の文字位置の調整、も groff に実装されています。

t-tk commented 5 years ago

フォントの切り替えは Special-Fonts でしょうか?

PostScript出力時の文字位置の調整は、日本語groffではwcharkern,lowerwcharというパラメータで調整できました。本家groffのソースを検索したところそのパラメータは発見できませんでした。代替の機能が実装されているのでしょうか?

obuk commented 5 years ago
t-tk commented 5 years ago

私の言おうとしていた「フォントの切り替え」は、EUC-JPであれば多バイト文字(全角文字)を日本語フォント、ASCIIを欧文フォントに自動で切り替える機能のことです。UTF-8で似たような機能を作ろうとした場合「¢」「£」「“”」「○」「α」などをどう切り替えるかが悩ましかったりします。さらにCJKが混在する入力の場合はどう処理するか、も悩ましい。 Chenging-Fonts の場合は明示的にマークアップして切り替えるものと理解しました。それは一つのやり方だと思いますが、私の期待した機能と少し違うように思います。

私の当面の目標は、mendex.1, mendex.1.ja, upmendex.1 を、出来れば公式のgroffで、違和感ない品質で、端末出力とPostScriptまたはPDF出力できるようになることです。日本語groff の機能の一部が公式groffで未実装だとしても目標に届けばありがたいです。

(追記)端末出力は上記のように満足しています。残りはPostScript出力です。

obuk commented 5 years ago

t-tk さんの仰りたい「フォントの切り替え」とは、groff が文字コードからそのメトリクスやグリフを得るための方法のようなものでしょうか。

t-tk commented 5 years ago

「フォントの切り替え」とは、groff が文字コードからそのメトリクスやグリフを得るための方法のようなもの

はいそうです。日本語化で広く行われている方法は文字コードを見て日本語と欧文を判別して切り替える方法でして、日本語groff でもそのように実装されています。pTeXも同様で upTeXはその少々拡張です。

groff_1.18-1.1-12 の README.jp より

◎ 日本語化について

(略)

・ 日本語フォントについては、カレントフォントがボールド体の時はゴシッ
   ク体に、それ以外のフォント(ローマン、イタリック、イタリックボールド
   等)がカレントフォントの時は明朝体に、自動的に切り替わります。日本語
   フォントを直接指定することは出来ません。

ただし、多言語拡張(CJK混植)や多書体化を目指すとするならばもっと柔軟な機能が欲しくなります。

obuk commented 5 years ago

groff の Special Fonts は、日本語のフォントのように後で追加するフォントのリストのことです。groff はフォントリストを検索して見付かったものを使います。単純ですが、自動で目的のフォントを選択させることができます。検索の説明は Using Symbols にあります。

Using Symbols は ja.tmac で使われている cflags リクエストも説明しています。ja.tmac は、そのままでは読み難いので、次のようなワンライナを通すと読みやすいかもしれません。

perl -CIO -MEncode -lpe 's/\\\[u([0-9A-F]+)\]/decode("UCS-2BE", pack("H*", $1))/eg' ja.tmac

Special Fonts は、説明のはじめに Symbol フォントがその代表のように書かれていたり、日本人は日本語のフォントを特別なものだと思わないことなど、理解を妨げるところもあるのかもと思いました。 よろしくお願いします。

t-tk commented 5 years ago

ご解説ありがとうございます。Using Symbolsの検索の説明を読んでみましたが複雑で理解しづらく感じました。ちゃんと理解するために、実物の動作を確認しながらもう少し追ってみようかと思います。 mendex.1 や upmendex.1 のように、英語主体で説明用にCJKが少々混じっているような文書の場合にはこの機能で充分いけるような気もします。

日本語groffの場合は font/dev*/DESCfontset という文法を追加して実現しているようです。 設定次第で日英混植だけでなくCJK多言語混植への拡張も出来そうで、私の理想に近いと感じました。 ただ、Using Symbolsの検索と重複する機能であるとすると、本家に取り込んでもらう価値がある必須機能なのかどうかの判断はまだ出来ていません。

obuk commented 5 years ago

水を差すようで気が引けますが、mendex をいまの groff で整形したとき、その結果について、いくつか気に入らないところがあるかもしれませんが、ps は作成できるようになりましたでしょうか。

t-tk commented 5 years ago

mendex をいまの groff で整形したとき、(...)、ps は作成できるようになりましたでしょうか。

まとめます。

groff 出力 mendex.1.ja mendex.1 upmendex.1
... ... 日本語主体 英語+日 英語+日韓
日本語版 端末 OK OK OK
本家 端末 OK OK OK
日本語版 PS OK OK NG
本家 PS NG NG NG
using-grops(未検証) PS OK OK OK

日本語版はgroff-1.18.1.1-12, 本家はgrof-1.22.4 上記の表で「本家PS」は設定の変更だけで実現しようとした場合です。 using-gropsの手法は概要を理解したものの私としては未検証であり、推定です。 いろいろ調べ、教えていただいた結果をまとめた現状認識は、

t-tk commented 5 years ago

私の個人的な動機、短期的目標は 「upmendex.1 を公開するとともにそれを upmendex.man1.pdf に変換したものを用意したい。」というところです。 現状 mendex.1 → mendex.man1.pdf の変換も人に頼っており「upmendex.1 → upmendex.man1.pdf の変換」はさらに技術的障壁があるのは明らかで、手法の検討に入った次第です。CJKの混植となると情報が無く現状認識自体が難しいので、今回@obukさんにいろいろ教えていただいて助かっています。 本家/日本語版の実装内容の差を理解した後、理想と現実のギャップをどうやって埋めるかは費用対効果を見つつ考えようと思っています。

背景としては、従来の日本語ローカライズのときに培われた技術やその成果物が、本家に採択される機会を失ったために失われていく状況への焦りもあります。日本語groffの場合には、時代の流れとともに価値が低くなった部分、ローカルすぎて本家が取り込みをためらうであろう部分もあるものの、必要な部分を上手に整理すれば本家に取り込んでもらえそうに思っています。

obuk commented 5 years ago

まだ新しい groff で ps を出力していないのであれば、(1) いまの groff (本家と記されているもの) を使って、using-grops の方法で ps を出力してみませんか。それから、(2) 過去の pdf と比較するなどして、同じか近い内容の ps を出力できる入力 mendex.1、mendex.1.ja、upmendex.1 を用意し、(3) いまの groff (本家) でできないことや (2) において困ったことを整理して相談するのは如何でしょうか。

いまの groff でも難しいことは残っていると思いますが、過去の groff では全くできなかったことが、いまはできるようになりました。利用者も工夫し、歩みより、それでも諦めたり、我慢したり、と、いろいろあるかもしれません。それでも少しずつ進むといいと思います。

t-tk commented 5 years ago

コメントありがとうございます。 CJKに関して言えば、上記class, cflags, ja.tmacなどの機能は「過去の groff では全くできなかったことが、いまはできるようになった」例なのかなと思います。UTF-8関連も機能向上していると思います。関係各位のご尽力のおかげであり有難いことです。 私の理解では、using-grops の方法は、何より本家groffで動く利点が大きいですし、日本語プロポーショナルフォントを用いる場合はもちろんのことおそらくCJK混色にも応用可能という点で日本語groffの方法とは異なる価値があると思います。 一方、日本語groffの方法は全角組みで用が足りる場合には設定を簡便にすますことが出来るので捨てがたいと思います。 日本語groffの方法を本家に採用してもらうためには、簡潔で理解しやすい仕様と実装を心がける必要がある上、まだ構想段階に過ぎませんのでまだまだ先の話です。 mendex.1はすでに角藤さんや @aminophen さんが pdf を作成して下さっており、mendex.1.jaはLaTeX版でpdf作成されていると思います。 upmendex.1 は、目前は、弥縫策ですが、日本語groff で裏フォント方式(ハングルを一度日本語ゴシックの別の字に割り当ててPS出力後に再度ハングルに差し替える)で作ってしまおうかと思っています。当座しのぎのやり方であり、他人に薦められる方法ではありませんが。

本家へのパッチ構想も時間が掛かりそうなので using-grops の方法を確認しつつ並行して検討したいと思います。

t-tk commented 5 years ago

upmendex.1 → ps → pdf は groff-1.18.1.1-12を使い裏フォント方式で作成しました。 https://github.com/t-tk/upmendex-package で公開し CTAN に upmendex の新版として投稿しました。

mendexの話に戻すと、将来的には mendex.1 → ps → pdf の更新を、日本語groffに依存しない方法で実行しやすくしたいと思っています。using-grops の方法も含め、検討は別の場所で私なりに進めてみようかと考えています。そのためにこの場をお借りして議論を続けさせてもらいました。ありがとうございます。

それはさておき、ここのIssueの mendex v3.0 向け pdf の更新は、CTAN の mendex-doc 2019-03-03 で既に完了していると思います。ありがとうございます。 ここは閉じます。

obuk commented 5 years ago

もう遅いですが、mendex の概要を日本語と韓国語で書き、groff 1.22.4 で ps の作成を確認しました。 フォントは NanumGothic.ttf と NanumGothicBold.ttf を使いました。これらを groff のフォント NGR と NGB としてセットアップし、次のとおり H (Helvetica) につなぎました。

.fspecial HR  GR NGR
.fspecial HB  GB NGB
.fam H

必要なら宛先をご連絡ください。サイズが大きいので直接お送りします。