一般フォーラム

LuaLaTeXで和文フォントが欠落する

LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
Number of replies: 13
LuaLaTeXにおいて,プリアンブルに
\usepackage[hiragino-pron]{luatexja-preset}
と設定した際,和文フォントが出力されません.(数式と等幅欧文のフォントは出力されます.)


作業環境はWindows8.1, W32TeX, LuaLaTeX, TeXworksです.W32TeXは本日インストールしました.

使用するヒラギノフォントは
C:\w32tex\share\texmf-fonts\fonts\opentype\hiragino 以下に
HiraKakuProN-W3.otf, etc...
のように配置してあります.(今は試験的に運用しているため一時的に実体を配置しています.)Windows自体にはインストールしていません.

以下がコンパイルに利用したサンプルです.

------------------
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
\usepackage[hiragino-pron]{luatexja-preset}
\setmonofont{inconsolatazi4}
\begin{document}
\section{はじめてのLua\TeX-ja}
ちゃんと日本語が出るかな?
\subsection{出たかな?}
長い文章を入力するとちゃんと右端のところで折り返されるかな?
大丈夫そうな気がするけど.ちょっと不安だけど何事も挑戦だよね.

Math mode: $y=ax^2+bx+c$.

Mono-font is \texttt{Inconsolata}.
\end{document}
------------------

これをlualatexで処理すると,以下のようなエラーが発生します.(長いため一部抜粋,ログファイル全体は添付します)

------------------
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
LuaTeX warning: lua-loaded font [32] ("HiraMinProN-W3:mode=node;script=latn;lang
uage=DFLT;-kern;jfm=ujisv;+vert;+vrt2") has no characters!
LaTeX Font Info:    Font shape `JY3/HiraMinProN-W3(0)/m/n' will be
(Font)              scaled to size 9.24866pt on input line 490.
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
LuaTeX warning: lua-loaded font [33] ("HiraMinProN-W3:mode=node;script=latn;lang
uage=DFLT;-kern;jfm=ujis") has no characters!
luaotfload | load : Lookup/name: "HiraKakuProN-W6" -> "hirakakupron-w6.otf"
------------------

この結果,前述のように和文フォントが欠落したPDF(添付あり)が出力されます.

この問題への対処をご教授ください.よろしくお願いします.
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by Akira Kakuto -
こちらでは成功します。(test.pdf)。
log によると,おそらく フォントファイルを見つけられない
ようなので,
mktexlsr
luaotfload-tool -u -vvv
を実行すると良いかもしれません。 cache を一度消して
しまったほうが良いかもしれません。
In reply to Akira Kakuto

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
回答ありがとうございます.

ご指摘の通り
mktexlsrでls-Rを作成し,
$TEXMFVAR/luatex-cache/generic/fonts/otf/
$TEXMFVAR/luatex-cache/generic/names/
を削除した後
luaotfload-tool -u -vvv
でフォントキャッシュを再生成しましたが,同じ結果になりました.


生成したフォントキャッシュを確認するため
C:\w32tex\share\ctxdir\luatex-cache\generic\names\luaotfload-names.lua.gz
内のluaotfload-names.luaを見たところ,

return {
["families"]={
  ["local"]={},
  ["system"]={},
  ["texmf"]={
  ["otf"]={
...
    ["hiraginominchopron"]={
    ["b"]={
      ["default"]=12,
    },
    },
...
...
["mappings"]={
  {
  ["basename"]="hiraminpron-w3.otf",
  ["familyname"]="hiraginominchopron",
  ["fontname"]="hiraminpronw3",
  ["format"]="otf",
  ["fullname"]="hiraminpronw3",
  ["fullpath"]="c:/w32tex/share/texmf-fonts/fonts/opentype/hiragino/hiraminpron-w3.otf",
  ["index"]=11,
  ["italicangle"]=0,
  ["location"]="texmf",
  ["metafamily"]="hiraginominchopronw3",
  ["plainname"]="HiraMinProN-W3",
  ["prefmodifiers"]="w3",
  ["psname"]="hiraminpronw3",
  ["size"]=false,
  ["splainname"]="hiraminpronw3",
  ["splitstyle"]="w3",
  ["subfamily"]="regular",
  ["subfont"]=false,
  ["version"]="8.00",
  ["weight"]=300,
  },
...
...
["names"]={},
["status"]={
...
  ["c:/w32tex/share/texmf-fonts/fonts/opentype/hiragino/hiraminpron-w3.otf"]={
  ["index"]={ 11 },
  ["timestamp"]=1190598250,
  },
...

となっており,正しくキャッシュを生成しているように見えます.

他に確認すべき点などがありましたらご指導願います.
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by Akira Kakuto -
TEXMFVAR という変数は, W32TeX では使用しないように
しているのですが,ご自分で定義されましたか?
もし定義されたとしたら,すみませんが取り消して下さい。
TEXMFVAR があったら,W32TeX では無いと判断している
ところがあります。何のどこだったかは,忘れています。
今の問題とは関係無いと思いますが...
In reply to Akira Kakuto

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
$TEXMFVARは,LuaTeX-ja の使い方
https://osdn.jp/projects/luatex-ja/wiki/LuaTeX-ja%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
をコピー&ペーストした名残で,実際には
C:\w32tex\share\ctxdir\luatex-cache\generic\fonts\otf
C:\w32tex\share\ctxdir\luatex-cache\generic\names
を削除しています.
$TEXMFVARは定義していません.

手を抜いてコピー&ペーストした部分で誤解を招いてしまい,申し訳ありません.
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by aminophen -
昨年10月の El Capitan の OTC フォント対応検討時の経験から
キャッシュの hiraminpronw3 などという文字列がなんだか怪しいです。
どこから「ハイフン抜きの名前」が湧いてきたのやら?という気分です。
以前、luaotfload がなぜか特定のフォントのキャッシュを間違って取得する
問題に悩まされたことがあります。
キャッシュをそれっぽく(試行錯誤しつつ)書き直したら
うまくいったケースもあります。
http://d.hatena.ne.jp/acetaminophen/20151007/1444151435
https://twitter.com/doratex/status/651219923423784961
この辺りは luaotfload の挙動がまだ私にもわかっていない部分です。
luaotfload のバージョンも情報として気になります。
In reply to aminophen

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
回答ありがとうございます.

紹介してくださったリンクを拝見しました.
試しにフォントキャッシュを弄ってみようと思います.


luaotfload のバージョンですが,luaotfload-toolのバージョンで良いでしょうか?
luaotfload-toolのバージョンは以下のようになっております.

------------
C:\Users\unknown>luaotfload-tool --version

luaotfload-tool:
        Luaotfload font management and diagnostic utility.
        License: GNU GPL v2.0.
        Report problems to <https://github.com/lualatex/luaotfload/issues>

luaotfload-tool version: "2.6"
Revision: "2f2f16ec56510dc000302297aca4098a17eb7f5d"
Lua interpreter: stock; version "Lua 5.2"
Luatex SVN revision: 5238
Luatex version: 0.80.0
Platform: type=windows name=windows
    +  machine: unknown
    + nodename: UNKNOWN-PC-2
    +  release: build 9200
    +  sysname: Windows Vista
    +  version: 6.02
Index: version="2f2f16ec56510dc000302297aca4098a17eb7f5d" created="2016-02-28 23:22:24" modified="2016-02-28 23:22:24"
------------

念の為,パッケージの方のバージョンも載せておきます.

--(luaotfload.sty)--
\ifdefined\ProvidesPackage
  \ProvidesPackage{luaotfload}%
    %% FIXME  The date is meaningless, we need to find a way to
    %%        use the git revision instead.
    [2015/12/09 v2.6  OpenType layout system]
\fi
----------------------

--(luaotfload-main.tex)--
  \setdocumenttitle  {The \identifier{luaotfload} package}
  \setdocumentdate  {2015/12/12 v2.6}
  \setdocumentauthor {Elie Roux · Khaled Hosny · Philipp Gesang\\
                      Home:    \hyperlink {https://github.com/lualatex/luaotfload}\\
                      Support: \email    {lualatex-dev@tug.org}}
---------------------------
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
フォントキャッシュを自分なりに調べました.


C:\w32tex\share\ctxdir\luatex-cache\generic\names\luaotfload-names.lua.gz
内のluaotfload-names.lua
(画像左)

C:\w32tex\share\ctxdir\luatex-cache\generic\fonts\otf\hiraminpron-w3.lua
(画像右)
を比較してみたところ,アセト アミノフェン 様のご指摘のように,フォントの名称が変わっている部分が見られます.(赤は比較して明らかに異なるもの,橙は比較できないが怪しいもの)
hiraminpron-w3.luaの方はHiraMinProN-W3となっており,正しいように見えます.


lualatexのログを見ると
------
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
(load luc: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron-w3.luc)
(load cache: C:/w32tex/share/ctxdir/luatexja/extra_hiraminpron-w3.luc)
LuaTeX warning: lua-loaded font [30] ("HiraMinProN-W3") has no characters!
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
------
となっており,(hiraminpron-w3.luaから生成された)hiraminpron-w3.lucをTeXファイルのコンパイルに利用しており,これについてエラーを出力しています.


…と調べてみましたが,正直よく分かりませんでした.参考になれば幸いです.


(画像は新しいタブで開くか保存すると拡大表示できるみたいです)
Attachment 無題.png
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by 前田 一貴 -
hiraminpron-w3.lua についてですが,スクリーンショットを見る限りやはりおかしいですね.
IPAMincho を指定した場合にできる ipam.lua を見るなどしてほしいのですが,
正常ならばフォントキャッシュは例えば次のような感じになるはずです.

return {
["cache_version"]=2.82,
["descriptions"]={
  [32]={
  ["boundingbox"]=1,
  ["class"]="base",
  ["comment"]="copy of U+000A0",
  ["index"]=198,
  ["name"]="aj231",
  ["width"]=1024,
  },
  [33]={
  ["boundingbox"]=2,
  ["class"]="base",
  ["index"]=199,
  ["name"]="aj232",
  ["width"]=1024,
  },
  ... (以下グリフの数だけ続く)

日本語フォントなら何万行もいかないと ["familyname"] は出てこないのが通常ですが,
スクリーンショットでは34行目に出てきているので,グリフ情報の読み込みに
失敗していると推測できます.

ではなぜグリフ情報の読み込みに失敗しているかというと,よくわからないから
困ってしまうのですが…….
In reply to aminophen

Re: LuaLaTeXで和文フォントが欠落する

by 北川 弘典 -
私の手元の luaotfload のキャッシュ
~/.texlive2015/texmf-var/luatex-cache/generic/names/luaotfload-names.lua.gz
を見ても,

  ["basename"]="HiraMinProN-W3.otf",
  ["familyname"]="hiraginominchopron",
  ["fontname"]="hiraminpronw3",
  ["format"]="otf",
  ["fullname"]="hiraminpronw3",
  ["index"]=1262,
  ["italicangle"]=0,
  ["metafamily"]="hiraginominchopronw3",
  ["plainname"]="HiraMinProN-W3",
  ["prefmodifiers"]="w3",
  ["psname"]="hiraminpronw3",
  ["size"]=false,
  ["splainname"]="hiraminpronw3",

となっていますが,元記事のサンプルは正常に通りました.
(こちらの環境が Linux ということもある?)

小塚明朝に対するエントリを見ても

  ["basename"]="KozMinPr6N-Regular.otf",
  ["familyname"]="kozukaminchopr6n",
  ["fontname"]="kozminpr6nregular",
  ["format"]="otf",
  ["fullname"]="kozminpr6nregular",
  ["index"]=1270,
  ["italicangle"]=0,
  ["metafamily"]="kozukaminchopr6naj16opentype",
  ["plainname"]="Kozuka Mincho Pr6N AJ16 OpenType Regular",
  ["prefmodifiers"]="r",
  ["psname"]="kozminpr6nregular",
  ["size"]=false,
  ["splainname"]="kozukaminchopr6naj16opentyperegular",
  ["splitstyle"]="regular",
  ["subfamily"]="regular",
  ["subfont"]=false,
  ["weight"]=400,

となっているので,よくまかりませんが
小文字ハイフン無しは luaotfload の仕様なのかもしれません.
In reply to 北川 弘典

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
回答ありがとうございます.

前田 様のご指摘通り,
C:\w32tex\share\ctxdir\luatex-cache\generic\fonts\otf\ の
ipaexm.lua と hiraminpron-w3.lua を比較した結果,
hiraminpron-w3.lua は
["descriptions"]={},
となっており,本来10万行程度あると思われる要素が空になっています.
(確かにこれではフォントを出力できそうにありません…)

また 北川 様の情報との比較から,
C:\w32tex\share\ctxdir\luatex-cache\generic\names\luaotfload-names.lua.gz
のデータは正しい,またはTeXファイルの処理には影響しないものと推測されます.

以上から,前田 様のご推測通り,グリフ情報の読み込みに失敗しており,hiraminpron-w3.lua の ["descriptions"] が空になっているのが問題の原因だと思われます.


(個人的な可能性の検討)
upLaTeX + dvipdfmx / dvips では HiraMinProN-W3.otf を出力できているので,フォントデータの破損は考えにくいのですが,同じW32TeX(だと思われる)角藤 様の環境では正しく出力されているため,フォントデータの破損の可能性もあるかもしれません.


皆様のご指摘を踏まえた上で,別のOTFフォントを利用して検証するなどして,調べようと思います.
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by Akira Kakuto -
cache を消してやって見ましたので,参考になればして下さい。
対応していそうな log を比べてみます:

ヤバルゴ mdl.2 さんの場合,(失敗)
--------------------------------------------------------------------------------
* it cannot be used with a font that wasn't selected by luatexja-fontspec.
*************************************************
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"(compil
ing luc: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron-w3.lu
c)(save: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron-w3.lu
a)(save: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron-w3.lu
c)(save cache: C:/w32tex/share/ctxdir/luatexja/extra_hiraminpron-w3.lua)(save ca
che: C:/w32tex/share/ctxdir/luatexja/extra_hiraminpron-w3.luc)
LuaTeX warning: lua-loaded font [30] ("HiraMinProN-W3") has no characters!
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
\g__fontspec_family_HiraMinProN-W3_int=\count137
luaotfload | load : Lookup/name: "HiraKakuProN-W6" -> "hirakakupron-w6.otf"(comp
iling luc: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hirakakupron-w6
.luc)(save: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hirakakupron-w
6.lua)(save: C:/w32tex/share/ctxdir/luatex-cache/generic/fonts/otf/hirakakupron-
w6.luc)(save cache: C:/w32tex/share/ctxdir/luatexja/extra_hirakakupron-w6.lua)(s
ave cache: C:/w32tex/share/ctxdir/luatexja/extra_hirakakupron-w6.luc)
LuaTeX warning: lua-loaded font [31] ("HiraKakuProN-W6") has no characters!
luaotfload | load : Lookup/name: "HiraKakuProN-W6" -> "hirakakupron-w6.otf"
-------------------------------------------------------------------------------

こちらの場合,(成功)
--------------------------------------------------------------------------------
* it cannot be used with a font that wasn't selected by luatexja-fontspec.
*************************************************
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"(compil
ing luc: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron-w3
.luc)(save: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminpron
-w3.lua)(save: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hiraminp
ron-w3.luc)(load cache: c:/usr/local/share/ctxdir/luatexja/extra_hiraminpron-w3.
luc)
luaotfload | load : Lookup/name: "HiraMinProN-W3" -> "hiraminpron-w3.otf"
\g__fontspec_family_HiraMinProN-W3_int=\count137
luaotfload | load : Lookup/name: "HiraKakuProN-W6" -> "hirakakupron-w6.otf"(comp
iling luc: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hirakakupron
-w6.luc)(save: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hirakaku
pron-w6.lua)(save: c:/usr/local/share/ctxdir/luatex-cache/generic/fonts/otf/hira
kakupron-w6.luc)(load cache: c:/usr/local/share/ctxdir/luatexja/extra_hirakakupr
on-w6.luc)
luaotfload | load : Lookup/name: "HiraKakuProN-W6" -> "hirakakupron-w6.otf"
--------------------------------------------------------------------------------

こちらの場合は,

LuaTeX warning: lua-loaded font [30] ("HiraMinProN-W3") has no characters!
LuaTeX warning: lua-loaded font [31] ("HiraKakuProN-W6") has no characters!

という warning 行が無いことに注意して下さい。
In reply to Akira Kakuto

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
回答ありがとうございます.

他のフォント( ipaexm.ttf, msmincho.ttc, meiryoke_620r1.ttc, KozMinPr6N-Regular.otf, GothicBBBPro-Medium.otf )で同様に
\usepackage[hiragino-pron]{luatexja-preset} or
\setmainjfont{Meiryoke-gothic}
のようにフォントを指定してコンパイルした結果,
ipaexm.ttf, msmincho.ttc, meiryoke_620r1.ttc → 成功
KozMinPr6N-Regular.otf, GothicBBBPro-Medium.otf → 失敗
となりました.
(もっとサンプルが欲しいのですが,OTFの和文フォントが手元に無いです….)

この結果から,OpenType フォントだと失敗するものと推測されます.
今までの情報からさらに推測するならば,luaotfload-tool による OpenType フォントのグリフ情報の生成に失敗している,とも言えそうです.

とはいえ,なぜ自分の W32TeX 環境では上記の処理ができないのか見当つきません….
なにかお気づきの点がありましたら,指摘していただけると幸いです.
In reply to ヤバルゴ mdl.2

Re: LuaLaTeXで和文フォントが欠落する

by ヤバルゴ mdl.2 -
2016/04/22 の更新 (と修正コミット) を適用した W32TeX
(LuaTeX: v0.95.0, luaotfload: v2.7, LuaTeX-ja: commit c3e2159)
にて再確認したところ,和文フォント (ヒラギノ) を埋め込むことができました.

今回の質問にお答えしてくださった方々,
および LuaTeX(-ja) を開発・更新している方々,
ありがとうございました.