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 が使えないので、困っております。
何か良い方法はあるでしょうか。
他にも、上記サンプルについてご意見などいただければ幸いです。
よろしくお願いいたします。
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.さん
ありがとうございます。
早速組み込んでみました。
https://github.com/trueroad/texinfo-sample-jp
かなりまともになったと思います。
なお、いただいたサンプルをそのまま私の環境でコンパイルすると、
SimSun フォントが無いというエラーになってしまい、一瞬、途方にくれました。
ですが、単純に下記のようなダミーを \input zhspacing.sty の前に入れてやれば簡単に回避できました。
\def\zhfont{dummy}
\def\zhpunctfont{dummy}
また、zhspacing.sty も luatexja.sty と同様、
texinfo.tex よりも前に読み込まないとおかしくなるようです。
ありがとうございます。
早速組み込んでみました。
https://github.com/trueroad/texinfo-sample-jp
かなりまともになったと思います。
なお、いただいたサンプルをそのまま私の環境でコンパイルすると、
SimSun フォントが無いというエラーになってしまい、一瞬、途方にくれました。
ですが、単純に下記のようなダミーを \input zhspacing.sty の前に入れてやれば簡単に回避できました。
\def\zhfont{dummy}
\def\zhpunctfont{dummy}
また、zhspacing.sty も luatexja.sty と同様、
texinfo.tex よりも前に読み込まないとおかしくなるようです。
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
「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
アセトアミノフェンさん
ありがとうございます。
やはり 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 にさえ対応すれば、
途中のバージョンがうまくいかなくても、普通の人?は使っていなくて、
特に困らないのかもしれませんが。。。
ありがとうございます。
やはり 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 にさえ対応すれば、
途中のバージョンがうまくいかなくても、普通の人?は使っていなくて、
特に困らないのかもしれませんが。。。
> 途中のバージョンを試してみたいと思った場合は、
> どうするのがよいでしょうか。
途中のバージョンは自前でビルドするほかないと思います。開発版リポジトリ
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 の履歴を探す必要があります)
> どうするのがよいでしょうか。
途中のバージョンは自前でビルドするほかないと思います。開発版リポジトリ
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 の履歴を探す必要があります)