チケット #37105

源ノ明朝で segmentation fault

登録: 2017-04-05 14:53 最終更新: 2017-07-16 10:10

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

LuaTeX 本体と LuaTeX-ja のどちらが原因かわかりませんが,とりあえず.話題の源ノ明朝をダウンロードして試してみたのですが,

  1. \documentclass{article}
  2. \usepackage{luatexja}
  3. \usepackage{fontspec}
  4. \begin{document}
  5. \fontspec{SourceHanSerif}
  6. あいうえお
  7. \end{document}
で,私の環境だと
...
(/home/kmaeda/texmf/tex/luatex/luatexja/src/patches/lltjp-fontspec-immediate.st
y

LaTeX Warning: You have requested package `fontspec',
               but the package provides `lltjp-fontspec-immediate'.

) (./test.aux)
(/home/kmaeda/texmf/tex/luatex/luatexja/src/patches/lltjp-fontspec.sty)
ABD: EverySelectfont initializing macros(load luc: /home/kmaeda/.texlive2016/te
xmf-var/luatex-cache/generic/fonts/otl/sourcehanserif-regular.luc)zsh: segmentation fault  lualatex test
となります.luajitlatex にするともう少し読み進むのですが,やはり落ちます.luatexja を読み込まない場合は落ちません.LuaTeX のバージョンは 1.0.5 (rev. 6306) で試しています.TL2016 のバイナリでも同様です.

まず,同様の現象が他の環境でも再現するでしょうか?

(上の LaTeX Warning も少し気になっていますが,これはまた別の話.)

チケットの履歴 (15 件中 3 件表示)

2017-04-05 14:53 更新者: kmaeda
  • 新しいチケット "源ノ明朝で segmentation fault" が作成されました
2017-04-05 16:47 更新者: h7k
コメント

ほぼ同じ Linux/amd64/Lua(jit)TeX-r6306 なので情報量は少ないと思いますが,再現しました. plain LuaTeX の次のファイル(name:, file: 両方で実験)で試してみても,やはり Segfault が発生しています.

  1. \input luatexja.sty
  2. \jfont\a=name:SourceHanSerif:jfm=ujis
  3. \a
  4. あいうえお
  5. \bye
  1. \input luatexja.sty
  2. \jfont\a=file:SourceHanSerif-Regular.ttc:jfm=ujis
  3. \a
  4. あいうえお
  5. \bye
2017-04-05 17:11 更新者: abenori
コメント

(もう少し情報があるかもしれないので)W32TeXですがやはり落ちます.場所も同様のようです.

2017-04-05 17:29 更新者: h7k
コメント

fontloader 周りのようです.次の内容のファイルを texlua で処理させると落ちました.

  1. kpse.set_program_name("luatex")
  2. local s = kpse.find_file("SourceHanSerif-Regular.ttc", "truetype fonts")
  3. print(s)
  4. local a = fontloader.open(s)

2017-04-05 17:39 更新者: kmaeda
コメント

fontloader 周りのようです.次の内容のファイルを texlua で処理させると落ちました.

確認しました.なるほど,最近の luaotfload はもう本体の fontloader を使っていないのでしょうが,luatexja は使うから落ちるわけですか.

2017-04-05 19:57 更新者: h7k
コメント

最近の luaotfload はもう本体の fontloader を使っていないのでしょうが,luatexja は使うから落ちるわけですか.

そのようですね.

本当は luaotfload の使っている(Lua で書かれた)fontloader が使えればよいのですが, そちらの仕様がよくわからない(かつどんどんフォーマットが変わっていっている?)のが厄介です. その点,LuaTeX 本体の fontloader だと,Reference Manual にきちんとデータ構造が書かれているので, 現状の LuaTeX-ja では本体の fontloader を(いくつかのフォントの情報を得るため)使っている,というわけです.

2017-04-06 09:04 更新者: kmaeda
コメント

一応 SEGV なので LuaTeX ML に投げてみました.

2017-04-07 23:21 更新者: kmaeda
コメント

LuaTeX rev. 6310 で動くようになりました. diff を見た感じ,luatex 組み込みの fontforge (fontloader) がデフォルトでは float (32 bit) で処理している部分があるのですが,Source Han Serif を扱うには float では不足で,double (64 bit) を使うように指定してやると動くようになるということのようです.

これで Linux 環境の LuaTeX でも

  1. \documentclass{ltjarticle}
  2. \usepackage{luatexja-fontspec}
  3. \setmainjfont{SourceHanSerif}
  4. \begin{document}
  5. \section{あああ}
  6. あああ
  7. \end{document}
のように気軽に太明朝が使えるようになりました(ただし,フォントキャッシュの読み込みにちょっと時間がかかります).

2017-04-08 00:15 更新者: h7k
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2017-04-08 00:15 に更新されました
コメント

こちらでも r6310 で動くことを確認しました.

# LuajitTeX で 7 ウェイトを同時に出力させようとしたら,キャッシュ生成の時点で Lua 側のメモリ制限にひっかかっていますね…….

2017-04-08 12:43 更新者: kmaeda
コメント

# LuajitTeX で 7 ウェイトを同時に出力させようとしたら,キャッシュ生成の時点で Lua 側のメモリ制限にひっかかっていますね…….

情報ありがとうございます.試してみると,LuajitTeX より LuaTeX の方がキャッシュの読み込みが速いような気もします.

LuaJIT のメモリ制限については, http://stackoverflow.com/questions/35155444/why-is-luajits-memory-limited-to-1-2-gb-on-64-bit-platforms に説明がありました.

2017-05-01 09:19 更新者: None
コメント
\documentclass{ltjarticle}
\begin{document}
いろはにほへと
ちりぬるを
わかよたれそ
つねならむ
うゐのおくやま
けふこえて
あさきゆめみし
ゑひもせす
\end{document}
2017-05-01 09:39 更新者: None
コメント

None への返信

すみません途中で送信しました.

上の文書を作業ディレクトリに luatexja.cfg

\def\ltj@stdmcfont{NotoSerifCJKjp-Regular}
\def\ltj@stdgtfont{NotoSansCJKjp-Regular}
を置いてコンパイルすると問題なく NotoSerif が使えるのですが,kmaeda さんが仰る通りキャッシュ読み込みに時間がかかります.

私の環境 (Debian 8.7; TeX Live 2017) ではコンパイルにかかる時間は

LuaLaTeX (1.0.4) LuaJITLaTeX (1.0.4)
IPAex (default) 0.5 s 0.8 s
NotoSerif 6.1 s 2.1 s

どちらも $HOME/.texlive2017 のキャッシュを読み込んでいるように見えるのですが,ここまで差が出るのは何故なのでしょうか.

また,高速化できる方法があればお教えいただけると幸いです.

2017-05-01 11:06 更新者: h7k
  • 状況完了 から オープン に更新されました
コメント

コンパイルにかかる時間

きちんと調べてはいませんが,フォントの規模自体が違うことが大きいと思います.

例えば luaotfload によるキャッシュを調べると,私の環境では

$ ls ipaex*.lua sourcehan*.lua -l
-rw-r--r-- 1 h7k h7k  2178910  5月  1 09:46 ipaexg.lua
-rw-r--r-- 1 h7k h7k  2185850  5月  1 09:46 ipaexm.lua
-rw-r--r-- 1 h7k h7k 10328828  5月  1 10:52 sourcehansans-regular-1.lua
-rw-r--r-- 1 h7k h7k 10557099  5月  1 10:52 sourcehanserif-regular-1.lua
となっており, SourceHanSerif/Sans のキャッシュの容量は IPAex のそれの 5 倍ほどです.

また,luaotfload 以外にも,LuaTeX-ja は独自で縦書きに関するキャッシュを作りますが,こちらは

$ ls *ipaex*.lua *sourcehan*.lua -l
-rw-r--r-- 1 h7k h7k  266834  5月  1 09:46 extra_ipaexg.lua
-rw-r--r-- 1 h7k h7k  266856  5月  1 09:46 extra_ipaexm.lua
-rw-r--r-- 1 h7k h7k 2346545  5月  1 10:51 extra_sourcehansans-regular.lua
-rw-r--r-- 1 h7k h7k 2341148  5月  1 10:38 extra_sourcehanserif-regular.lua
と桁レベルで違っています.


なお,フォントのキャッシュは自動的に .luc (LuaTeX), .lub (LuaJITTeX) としてコンパイルされ,次回以降の読み込みが早くなるようになっています.

ただ otc 版の SourceHanSerif/Sans などの「大きな」フォントを LuaJIT(La)TeX で使う場合,LuaJIT のメモリ制限に引っかかってコンパイルがうまくいかないことがあります(結果の .lub ファイルが0バイトになります). 例えば,これを書いているマシン (Gentoo amd64, Core i5-3427U) では

luajitlatex IPAex	         1.33
lualatex    IPAex                1.46
luajitlatex SourceHanSerif/Sans	24.55
lualatex    SourceHanSerif/Sans	 2.96
と,LuaJIT(La)TeX ではかえって遅くなってしまっています.

2017-05-03 06:04 更新者: None
コメント

h7k への返信

お返事ありがとうございます.

コンパイルにかかる時間

きちんと調べてはいませんが,フォントの規模自体が違うことが大きいと思います. 例えば luaotfload によるキャッシュを調べると,私の環境では
(中略)
と桁レベルで違っています.

私の環境でも同程度のファイルサイズでした. 結局メモリにうまく乗るかどうかという話でしたね,お騒がせしました.

2017-07-16 10:10 更新者: h7k
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2017-07-16 10:10 に更新されました
コメント

完了とします.

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする