LuaTeXで一部のフォントが指定できない

LuaTeXで一部のフォントが指定できない

- 安威江 蒼 の投稿
返信数: 14

LuaLaTeXでHelveticaやTimesなどの一部のフォントを指定すると、lualatexコマンド中に下のようなエラーが出てしまいます。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: "font-not-found"
!
! The font "Times" cannot be found.
!
! See the fontspec documentation for further information. 
!
! For immediate help type H <return >.
!............................................... 

何か解決策はございますでしょうか。

ソース

\documentclass[a4paper]{ltjsarticle}
\usepackage{fontspec}
\setmainfont{Times}
\begin{document}
sample
\end{document}

環境

OS X 10.11.6

TeX Live 2016

安威江 蒼 への返信

Re: LuaTeXで一部のフォントが指定できない

- Akira Kakuto の投稿
今のままの設定でよいと思います。つまり type1
フォントは fontspec 経由で native fonts としては
使えないように設定しておくことをお勧めします。
fontconfig のサーチパスから除いておくわけです。
type1 フォントはごく簡単な encoding の場合を除いて
native フォントとしては殆ど使えないと思います。

type1 フォントを使う必要があるときは, lualatex
や xelatex の場合も tfm + map の方法を使います。
Akira Kakuto への返信

Re: LuaTeXで一部のフォントが指定できない

- Akira Kakuto の投稿
Mac は fontconfig じゃないかもしれません。
それから,Times や Helvetica が type1 と
仮定していますが,違っているかもしれません。
どなたかが訂正して下さると思います。
Akira Kakuto への返信

Re: LuaTeXで一部のフォントが指定できない

- aminophen の投稿
Mac の場合、「Times」という名前の実フォントは「Times.dfont」のようです。
fontspec は LuaTeX を使用する場合 luaotfload に処理を任せていますが、
これは otf/ttf/ttc いずれでもないので失敗すると思います。

Times に似た別のフォントを使われるとよいと思います。
aminophen への返信

Re: LuaTeXで一部のフォントが指定できない

- Akira Kakuto の投稿
ありがとうございます。
fontconfig (some platforms における)
も luatex には(多分?)無関係でした。
ぼけています。
Akira Kakuto への返信

Re: LuaTeXで一部のフォントが指定できない

- 安威江 蒼 の投稿
解答していただきありがとうございました。
私もそのあと試行錯誤しましたが、HelveticaやTimesを指定することは叶わず、
今回はTex Gyreで代替することにしました。
フォントを自由に簡単に使えるという触れ込みだったはずなのになあという気がしますが、
今回ばかりは仕方ないみたいですね。
安威江 蒼 への返信

Re: LuaTeXで一部のフォントが指定できない

- 奥村 晴彦 の投稿
Macのシステムフォントということでしたらxelatexをお使いになったほうが自由度が高いのではないでしょうか。
奥村 晴彦 への返信

Re: LuaTeXで一部のフォントが指定できない

- 安威江 蒼 の投稿
御助言ありがとうございます。
luatexの試行錯誤で結構時間を使いすぎたので、
次回xelatexを使ってみようと思います。
aminophen への返信

Re: LuaTeXで一部のフォントが指定できない

- 安威江 蒼 の投稿
解答していただきありがとうございました。
どうやらdfontとはMac OS 9時代のフォントをMac OS Xように調整したものらしいですね。
今回は代替フォントを使いたいと思います。
安威江 蒼 への返信

Re: LuaTeXで一部のフォントが指定できない

- aminophen の投稿
(既に自己解決なさっているようですが、私の備忘録として貼っておきます)

LuaTeX は 2015 → 2016 で fontforge を削除したため、これを境に
dfont がサポートできなくなったそうです。
http://tex.stackexchange.com/questions/315565/luatex-does-not-find-dfont-fonts/315570
aminophen への返信

Re: LuaTeXで一部のフォントが指定できない

- Akira Kakuto の投稿
ソース (luafontloader) を見ると
fontforge library の一部は,
まだ lua(jit)tex に link されている
のではないでしょうか?
Akira Kakuto への返信

Re: LuaTeXで一部のフォントが指定できない

- aminophen の投稿
たしかに lua(jit)tex バイナリに fontforge library の一部はリンクされていますが、
luaotfload v2.7 は現在バイナリの built-in luafontloader を一切使っていません。
https://github.com/lualatex/luaotfload/issues/327#issuecomment-212496312

v2.6 までは luatex 本体の fontloader を利用していましたので、たまたま fontforge が
使えて dfont も読み込めたのでしょう。v2.7 以降の luaotfload は完全に lua スクリプト
のみからなる独自実装になっていると理解しています。v2.7 が登場したのは、記憶が
正しければ TL2016 pretest 期間中だったと思いますので、結果的に「TL2016 以降で
dfont が使えない」という状況になっているものと思います。
aminophen への返信

Re: LuaTeXで一部のフォントが指定できない

- Akira Kakuto の投稿
正確には lua(jit)tex で削除されたのではなくて,luaotfload から
削除されたということでしょうか。

# lua(jit)tex に残っている fontforge library 内でも,Hans さんが
# dfont サポートをやめたような記憶があるような気が ...
# 例によって間違っているかもしれません。
Akira Kakuto への返信

Re: LuaTeXで一部のフォントが指定できない

- aminophen の投稿
試し方が合っているかどうか解りませんが、Mac 環境で試してみました。
plain luatex で luaotfload.sty をインプットせずにフォントを扱う方法がすぐには
わからなかったので TeX.SX の以下の投稿をベースにやってみました。
http://tex.stackexchange.com/questions/105869/how-to-use-opentype-fonts-with-plain-luatex

適当なディレクトリで

$ mkdir test
$ cd test
$ luatex -ini luatex-plain
$ ln -s /usr/local/texlive/2016/bin/x86_64-darwin/luatex luatex-plain

を実行します。つまり
TEXMFDIST/tex/generic/context/luatex/luatex-plain.tex
をダンプして実行可能な状態をつくります。

以下の times0.tex を作成して
% ----------
\font\Times=file:Times.dfont at 12pt
{\Times foo}\par
\bye
% ----------

$ ./luatex-plain times0

でコンパイルすると、TL2016 の LuaTeX では

fonts : loading './Times.dfont', hash 'times'
otf reader : unknown version '
fonts : loading done
fonts : saving './Times.dfont' in cache(save: /Users/npjilab/Library/texlive/20
16/texmf-var/luatex-cache/generic/fonts/otl/times.lua)(save: /Users/npjilab/Lib
rary/texlive/2016/texmf-var/luatex-cache/generic/fonts/otl/times.luc)...-dist/t
ex/generic/context/luatex/luatex-fonts-merged.lua:14744: bad argument #1 to 'fo
r iterator' (table expected, got nil).

{
l.2 {
  \Times foo}\par
?

でエラーになります。一方、TL2015 では PDF が出てきました。
このときの PDF を一応添付します。ただしく Times.dfont 由来の Times-Roman が
埋め込まれていることが解ります。

この実験方法が正しければ、plain luatex のほうでも(つまり luatex バイナリでも)
dfont サポートが TL2016 で削除されたことを意味すると思います。