LuaTeX や XeTeX で日本語 Texinfo

LuaTeX や XeTeX で日本語 Texinfo

- TrueRoad の投稿
返信数: 6
LuaTeX や XeTeX で日本語の Texinfo ファイルを処理してみるテストをしています。
https://github.com/trueroad/texinfo-sample-jp

以前のご相談の内容
https://okumuralab.org/tex/mod/forum/discuss.php?d=1800
を取り込んで Native Unicode を使えるようにした texinfo.tex のパッチを作り、
本家 bug-texinfo に投稿しています。
http://lists.gnu.org/archive/html/bug-texinfo/2016-01/msg00148.html

これに日本語 Texinfo サンプルを作って試しており、
とりあえず何とか PDF の生成まではできるようになりました。

ですが、いくつか問題が残っているので、
質問させてください。

・LuaTeX-ja は LuaTeX 0.88 に未対応?

LuaTeX 0.80 にはバグがあるようで、
日本語に限らず、ほとんどの Texinfo 文書が処理できません。

LuaTeX 0.88 でバグが解消されているようで、
「英語かつ画像無し」の Texinfo 文書であれば(試した限りでは)処理できています。

しかし、日本語を処理するために LuaTeX-ja を使わせていただこうとすると、
エラーになってしまいます。

何か設定等がまずいのか、今のところ未対応なのか、
どちらになるでしょうか。

本当は既存の日本語 Texinfo ファイルを処理してみたかったのですが、
0.80 では全滅でした。

上記サンプルは仕方なく 0.80 のバグを踏まないように作ってみたものです。

・LuaTeX-ja のロード順

本来、texinfo.tex は texi ファイルの 冒頭で texinfo.tex を読み込み、
必要に応じて言語ごとの設定ファイル txi-ja.tex が読み込まれる、
という順番で動作します。

ですので、luatexja.sty を txi-ja.tex でロードできればスマートだと思うのですが、
残念ながらエラーになってしまいます。

仕方がないので、上記サンプルでは、
luatexja.sty を読み込んでから texinfo.tex を読み込む動作をする texinfo-ja.tex を作り、
これを texinfo.tex の代わりに texi ファイルの冒頭に書いています。

他に何か良い方法はあるでしょうか。

・XeTeX の欧文フォント

XeTeX の場合は、LuaTeX 0.80 のようなバグもありませんので、
既存の日本語 Texinfo ファイルでも、多少書き換える
(UTF-8 にする、@documentencoding と @documentlanguage を追加する)
程度で処理できるようになるものが多いようです。

ですが、私の作った txi-ja.tex の設定ですと、
和文と欧文のフォントを別々に指定できず、全部 IPAex フォントになってしまうので、
(他にも問題はあるんでしょうが)見栄えが悪いです。

XeLaTeX であれば、ZXjatype などが使えるのでしょうけども、
Texinfo では LaTeX が使えないので、困っております。

何か良い方法はあるでしょうか。

他にも、上記サンプルについてご意見などいただければ幸いです。
よろしくお願いいたします。
TrueRoad への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- Z. R. の投稿

XeLaTeX であれば、ZXjatype などが使えるのでしょうけども、
Texinfo では LaTeX が使えないので、困っております。

何か良い方法はあるでしょうか。

「plain XeTeX で CJK する」ためのパッケージとしては、zhspacing というものがあります。

本来は中国語用のものですが、試しに日本語を組んでみた感じでは、かなりまともな出力になっていると思います。

\input zhspacing.sty
\zhspacing
% 文字クラスの補正
% (unicode-letters.tex での設定の不備)
\def\do#1{\XeTeXcharclass"#1=1 }
\do{3041}\do{3043}\do{3045}\do{3047}\do{3049}\do{3063}
\do{3083}\do{3085}\do{3087}\do{308E}\do{3095}\do{3096}
\do{30A1}\do{30A3}\do{30A5}\do{30A7}\do{30A9}\do{30C3}
\do{30E3}\do{30E5}\do{30E7}\do{30EE}\do{30F5}\do{30F6}
\do{30FC}\do{31F0}\do{31F1}\do{31F2}\do{31F3}\do{31F4}
\do{31F5}\do{31F6}\do{31F7}\do{31F8}\do{31F9}\do{31FA}
\do{31FB}\do{31FC}\do{31FD}\do{31FE}\do{31FF}
% フォント設定
\def\setjafont#1{%
  \let\zhfont#1\let\zhpunctfont#1%
  \let\zhextafont#1\let\zhextbfont#1%
}
\font\tensf=cmss10
\font\tenmin="IPAexMincho" at 9.25pt
\font\tengt="IPAexGothic" at 9.25pt
\setjafont\tenmin

% 日本語用のレイアウト設定については考えない

% テスト1
\TeX はアレ、
{\tensf\setjafont\tengt ああ\TeX はアレ}、
\TeX はアレ。

% テスト2
ConTeXt(この中のXは/ks/と読む)はTeX上に構成された
文書生成システムである.
最新版の「MkIV(マーク4)」はLuaTeXエンジンのみをサポートし,
「MkII(マーク2)」はpdfTeXとXeTeXをサポートする.
(XeTeX に対して「MkIII」が計画されていたが結局作られなかった.)
「TeXマニア」を自称するなら,LaTeXばかりでなくConTeXtの
動向もチェックすべきである.

\bye
Z. R. への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- TrueRoad の投稿
Z.R.さん
ありがとうございます。

早速組み込んでみました。
https://github.com/trueroad/texinfo-sample-jp
かなりまともになったと思います。

なお、いただいたサンプルをそのまま私の環境でコンパイルすると、
SimSun フォントが無いというエラーになってしまい、一瞬、途方にくれました。
ですが、単純に下記のようなダミーを \input zhspacing.sty の前に入れてやれば簡単に回避できました。

\def\zhfont{dummy}
\def\zhpunctfont{dummy}

また、zhspacing.sty も luatexja.sty と同様、
texinfo.tex よりも前に読み込まないとおかしくなるようです。
TrueRoad への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- aminophen の投稿
texinfo については全く存じないのですが,LuaTeX についてお答えしますと

「LuaTeX-ja は LuaTeX 0.88 に未対応?」

これは LaTeX が LuaTeX-0.85.0 以降に未対応であることに尽きるようです。手元の
This is LuaTeX, Version beta-0.85.0 (TeX Live 2015/W32TeX) (rev 5550)
で plain TeX 文書を処理すると

% test.tex
\input luatexja.sty
あいうえお
\bye

$ luatex test.tex

これだけでもエラーになります。一見「plain TeX で luatexja.sty を使うこと」と
「LaTeX が LuaTeX-0.85.0 に未対応であること」は関係ないことに思えますが,動作を見ると
LuaTeX-ja が依存している luatexbase.sty から ctablestack.sty が呼ばれて

luatexja.sty → luatexja-core.sty
→ texmf-dist/tex/luatex/luatexbase/luatexbase.sty
Package: luatexbase 2015/10/04 v1.3 luatexbase interface to LuaTeX
→ texmf-dist/tex/luatex/ctablestack/ctablestack.sty
→ texmf-dist/tex/latex/base/ltluatex.tex
File: ltluatex.tex 2015/10/03 v1.0f LuaTeX support for plain TeX (core)
→ texmf-dist/tex/latex/base/ltluatex.lua:130: attempt to index global 'newtoken' (a nil value)
stack traceback:
texmf-dist/tex/latex/base/ltluatex.lua:130: in main chunk
[C]: in function 'require'
[\directlua]:1: in main chunk.
l.228    \directlua{require("ltluatex")}
                                     
?

この ltluatex.tex は LaTeX team によるものですので,LaTeX team がこれを更新しない限り
LuaTeX-ja は LuaTeX-0.85.0 では plain TeX でも LaTeX でも使えないことになります。

以前のトピックと根は同じではないでしょうか。
https://okumuralab.org/tex/mod/forum/discuss.php?d=1752
aminophen への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- TrueRoad の投稿
アセトアミノフェンさん
ありがとうございます。

やはり LuaTeX-ja は LuaTeX 0.88 には(今のところ)未対応ということですね。

LaTeX はまだ使えない、という情報は見かけていたのですが、
plain TeX の場合でも LaTeX に依存しているというのは知りませんでした。

ところで、LuaTeX は 0.80 以降、バージョンごとにどんどん変更が入っているようですね。
私は 0.80 と 0.88 しか手元にないのですが、0.81 とか 0.85 とか(他にもあるのでしょうか?)、
途中のバージョンを試してみたいと思った場合は、
どうするのがよいでしょうか。

現状、texinfo.tex の画像を扱う機能と PDF のしおりを作成する機能は、
0.80 なら使えるのですが 0.88 だと使えません。

バージョン判定で分岐させることになると思いますが、
どのバージョンなら何が使えて、どのバージョンだと何が使えない、
などが試しながらやらないとわからないよなぁ、と思っています。

実際には 0.80 と(texlive 2016 に載るであろう)0.90 にさえ対応すれば、
途中のバージョンがうまくいかなくても、普通の人?は使っていなくて、
特に困らないのかもしれませんが。。。
TrueRoad への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- aminophen の投稿
> 途中のバージョンを試してみたいと思った場合は、
> どうするのがよいでしょうか。

途中のバージョンは自前でビルドするほかないと思います。開発版リポジトリ
https://foundry.supelec.fr/scm/viewvc.php?root=luatex
の該当する revision を checkout して,ということになるでしょう。
Win32 に限り,角藤さんのバイナリのアーカイブを兼宗さんが以下で提供してくださっているので,
適当な過去の日付の luatex-dev-w32.tar.xz やその他必要ファイルをとってくれば動きます。
http://eplang.jp/w32tex/archive/

W32TeX の ChangeLog に現れているのは
0.81.0, 0.85.0, 0.86.0, 0.87.{0,1,2}, 0.88.0, 0.89.0
ですが,そこまで細かく調べる必要はないと思います。
(ちなみに luatex-w32.tar.xz はずっと TL2015 と同じ beta-0.80.0 です)

過去のバージョンのドキュメントなら,開発版リポジトリに行けば revision 毎に入手できます。
/trunk/manual の luatex.pdf の履歴を探す必要があります)
aminophen への返信

Re: LuaTeX や XeTeX で日本語 Texinfo

- TrueRoad の投稿
アセトアミノフェンさん
ありがとうございます

Windows 環境もありますので、
Win32 の過去バイナリアーカイブを使わせていただこうと思います。

いろいろ教えていただき、
ありがとうございました。