lualatexja 中的中文有问题(“打开”的参数 #1 不正确)?

lualatexja 中的中文有问题(“打开”的参数 #1 不正确)?

我正在尝试如何使用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

...所以我安装了adobemappingtlmgr 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 中。

不确定这是否就是全部,但目前看起来是这样……

相关内容