我正在尝试如何使用lualatex来使用中文?(TexLive 2014,已更新至冻结状态):
\documentclass{article}
\usepackage{luatexja-fontspec}
\setmainjfont{FandolSong}
\begin{document}
在 Lua\TeX{} 中正常地使用中文。获得自动的\textbf{字体选择},标点“压缩”,以及正确的断行处理等特性。
\end{document}
我尝试用lualatex test.tex
- 来编译它,但不能,因为它失败了:
...
(/media/texlive/2014/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua)
! LuaTeX error ...xlive/2014/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua:90: b
ad argument #1 to 'open' (string expected, got nil).
l.172 }
?
(/media/texlive/2014/texmf-dist/tex/luatex/luatexja/ltj-base.sty)
! LuaTeX error [\directlua]:1: attempt to index field 'stack' (a nil value).
l.249 }
%
?
(/media/texlive/2014/texmf-dist/tex/luatex/luatexja/ltj-latex.sty
(/media/texlive/2014/texmf-dist/tex/luatex/luatexja/patches/lltjfont
.sty (/media/texlive/2014/texmf-dist/tex/latex/ms/everysel.sty)
ABD: EverySelectfont initializing macros)
...
我错过了什么?
答案1
我认为这是 的一个错误luaotfload
。您可以更新到 TeX Live 2015(几天后),问题应该已经修复。
答案2
好吧,我想我明白了。首先,我添加了一行打印内容texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua:90
:
local function open_cmap_file(name, inc, cid_dec, mke)
print("open_cmap_file: name " .. name) -- added
fh = io.open(kpse.find_file(name, 'cmap files'), "r")
....
... 并意识到它打印出来:open_cmap_file: name UniJIS2004-UTF32-H
。所以我查了一下:
$ tlmgr search --global --file UniJIS2004
...
adobemapping:
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF16-H
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF16-V
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF32-H
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF32-V
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF8-H
texmf-dist/fonts/cmap/adobemapping/aj16/CMap/UniJIS2004-UTF8-V
texworks:
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF16-H
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF16-V
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF32-H
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF32-V
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF8-H
tlpkg/texworks/share/poppler/cMap/Adobe-Japan1/UniJIS2004-UTF8-V
...所以我安装了adobemapping
:tlmgr install adobemapping
。
现在,编译失败,并显示:
luaotfload | db : Reload initiated (formats: otf,ttf,ttc,dfont); reason: "Font IPAExMincho not found.".
! Font \JY3/mc/m/n/10=IPAExMincho:jfm=ujis at 9.62219pt not loadable: metric dat
a not found or bad.
<to be read again>
relax
l.34 \kanjiencoding{JY3}\selectfont
\adjustbaseline
... 所以我现在有一个字体问题。我在 Ubuntu 11.04 上,不知道我会拥有哪些具体的中文字体。通过texdoc luatexja
,我意识到这个包的默认设置确实是\def\ltj@stdmcfont{IPAExMincho}
- 但也可以包含luatexja.cfg
与文件相同的目录中的文件.tex
;手册中推荐了这些内容:
\def\ltj@stdmcfont{psft:Ryumin-Light}
\def\ltj@stdgtfont{psft:GothicBBB-Medium}
...还有这个-还有没有一个\setmainjfont
语句——示例可以编译,尽管似乎缺少一些字符。
我以前用过simsun.ttc
字体,所以我想试试。请注意,如果字体名称是simsun.ttc
,并且它不是在系统范围内安装的,而只是存在于(甚至作为符号链接)与文件相同的目录中.tex
,那么它可以不是\setmainjfont{SimSun}
只能用读入\setmainjfont{simsun}
。但是,对于我的特定版本的simsun.ttc
,我收到此编译错误:
luaotfload | db : Reload initiated (formats: otf,ttf,ttc,dfont); reason:
"Font simsun not found.".(compiling luc: /media/texlive/2014/texmf-var/luatex
-cache/generic/fonts/otf/simsun.luc)(compiling luc: /home/user/.texlive
2014/texmf-var/luatex-cache/generic/fonts/otf/simsun.luc)(save: /media/
texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/simsun.lua)(save: /media
/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/simsun.luc)
...
LaTeX Font Warning: Font shape `JY3/simsun(0)/bx/n' undefined
(Font) using `JY3/simsun(0)/m/n' instead on input line 8.
[1{/media/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./testb.aux)
...
</media/texlive/2014/texmf-dist/fonts/opentype/public/lm/lmroman10-re
gular.otf><./simsun.ttc(bad-fontname-simsun:-1)Invalid TTC index number
因此,即使我使用pdflatex
/时没有遇到此字体问题{CJKutf8}
,但使用 时simsun.ttc
会失败Invalid TTC index number
。希望我知道如何修复此问题(也许是这个错误:[NTG-context] 最新测试版停止加载某些 ttc 字体)...
然后我找到了SimSun.ttf
一个可以下载的地方;simsun.ttc
从目录中删除,并下载到SimSun.ttf
同一目录中(与.tex
文件相同)。然后我\setmainjfont{SimSun}
在代码中使用它——示例最终编译成功,所有字符显然都存在于 PDF 中。
不确定这是否就是全部,但目前看起来是这样……