TeX Live 2013 pretest + luaotfload + TFM

TeX Live 2013 pretest + luaotfload + TFM

- 北川 弘典 の投稿
返信数: 9
TeX Live 2013 pretest (x86_64-linux) で,
以下のソースをタイプセットさせました:

=== a.tex ===
%#!luatex
\input luaotfload.sty
\font\G=cmtt10
\G a
\end
===

pdf 自体は生成されますが,どうやら毎回
フォント名データベースを作りにいっているようです:

$ luatex a | grep luaotfload ; luatex a | grep luaotfload
(./a.tex (/opt/texlive/2013/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
(/opt/texlive/2013/texmf-dist/tex/luatex/luaotfload/luaotfload.lua)(using write
Module luatexbase-mcb info: creating 'luaotfload.patch_font' type 4
Module luatexbase-mcb info: inserting 'luaotfload.pre_linebreak_filter'
Module luatexbase-mcb info: inserting 'luaotfload.hpack_filter'
Module luatexbase-mcb info: inserting 'luaotfload.define_font'
Module luatexbase-mcb info: inserting 'luaotfload.find_vf_file'
(luatexbase-mcb) at position 1 in 'luaotfload.patch_font'
luaotfload | Font names database loaded: /home/h7k/.texlive2013/texmf-var/luatex
luaotfload | Updating the font names database:
luaotfload | Scanning TEXMF fonts...
luaotfload | Scanning OS fonts...
luaotfload | Font names database saved: %s
(以下,全く同じ内容が繰り返される.略)

これでは大変不便です.
なぜこのような挙動になってしまうのでしょうか?

なお,使用している luaotfload は v1.28 (2013/04/11) で,
scripts/oberdiek/oberdiek.luatex.lua に次の修正を加えています:

55c55
< table.insert(package.loaders, kpse_module_loader)
---
> table.insert(package.searchers, kpse_module_loader)
北川 弘典 への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- Akira Kakuto の投稿
--- otfl-font-nms.lua.orig Thu Apr 18 14:26:04 2013
+++ otfl-font-nms.lua Sun Apr 21 23:20:52 2013
@@ -105,6 +105,9 @@
 end

 local data = names.data
+ if data then
+ reloaded = true
+ end
 if type(data) == "table" and data.version == names.version then
 if data.mappings then
 local found = { }

で今のところ動いていますが、あまりわかっていないので、
困ることがあるかもしれません。

Akira Kakuto への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- 北川 弘典 の投稿
試しに作った luaotfload-1.28-speedup.patch を添付します.

なお,その後,
\font\H=lmroman10-regular.otf \H s
という行も加えて調べてみましたら,

(load: /opt/texlive/2013/texmf-var/luatex-cache/generic/
fonts/otf/temp-lmroman10-regular.lua)(save: /home/h7k/
.texlive2013/texmf-var/luatex-cache/generic/fonts/otf/
temp-lmroman10-regular.lua)

のように(改行位置は手動で調整),OpenType フォントの
キャッシュを TEXMFSYSVAR から読み込もうとし,その結果
毎回キャッシュを保存していることにも気づきました.
これも上パッチで直したつもりです.
北川 弘典 への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- Akira Kakuto の投稿
> 毎回キャッシュを保存していることにも気づきました.

luajittex の場合にこれがおこるのですが、何故でしょうか?
ID か何かが合わないのでしょうか?
luatex に比べて luajittex の方が極端に遅くなっています。
(W32TeX では localpath と systempath の差はなしにしています。)

Akira Kakuto への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- 北川 弘典 の投稿
先ほど W32TeX をインストールして確かめてみました
(luaotfload は私のパッチがあたる前のものです)が,
一回 C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/ 以下に
キャッシュが作られた後は,それが再利用されているようです.不思議です.

LuaTeX: beta-0.77.0-2013042207 (rev 4635)
LuaJITTeX: beta-0.76.0-2013042208 (rev 39)
北川 弘典 への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- Akira Kakuto の投稿
temp-ipaexm.lua のように小さいキャッシュファイルに関しては、luajittex も
異常なく振舞うようで、 temp-kozminpr6n-regular.lua のようにサイズが
ある程度大きい場合、Lua ライブラリの loadfile が luajittex の場合
ちゃんと機能していないようです。

Akira Kakuto への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- Akira Kakuto の投稿
1.29 が release され、font name database を毎回作成する
という欠陥に対しては、パッチ不要となったようです。
luajittex の場合には、KozMinPr6N-Regular のようなフォント
に対しては load: と save: を繰り返す欠陥は同じです。
LuaJIT で loadfile() が働かないので、仕方がないでしょう。
ConTeXt mkiv on LuajitTeX では多分 KozMinPr6N-Regular も通常
どおりだと思いますが、うまく工夫してあるのかもしれません。

Akira Kakuto への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- 北川 弘典 の投稿
> 1.29 が release され、font name database を毎回作成する
> という欠陥に対しては、パッチ不要となったようです。
情報ありがとうございます.手動で入れ替えてみました.
確かに,\font\G=cmtt10 に関しては再生成されなくなっています.

しかし,
\font\H=lmroman10-regular \H s
を実行すると(.otf をつけるとfont name database 再生成)
(load: /opt/texlive/2013/texmf-var/luatex-cache/generic/
fonts/otf/temp-lmroman10-regular.lua)
と TEXMFSYSVAR を見に行ってしまうのは変わらないようです.

公式に pretest に入るまでしばらく様子を見てみます.
北川 弘典 への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- Akira Kakuto の投稿
lualibs (comment characters を忘れているバグが未だあるかもしれない),
luaotfload, luatexbase が更新され、luajitlatex でも
KozMinPr6N-Regular などが時間遅れなく使用できるようになって
いると思います。おそらく ConTeXt のコードを利用し、
loadfile() が LuaJIT で働かないことがある欠陥を回避できて
いるのではないかと思います。 バイナリcacheは LuaJIT の場合、
形式が違うはずですが、luajitlatex を走らせると自動的に .luc に
対応して .lub ファイルを作成してくれるようです。

Akira Kakuto への返信

Re: TeX Live 2013 pretest + luaotfload + TFM

- 北川 弘典 の投稿
> luajitlatex でも KozMinPr6N-Regular などが時間遅れなく使用できるように
確認しました.ありがとうございます.

# LuaTeX-ja はまだ新 luaotfload & lualibs に対応できていません.
# できるだけ早く対応します.