目录
- 上下文
- 问题
- 问题
上下文
我想使用“Noto Sans Mono CJK SC”字体来显示中文字符。该字体可在以下网址下载:Github 上的这个链接。
我知道可以使用包\setCJKmainfont{...}
中的字体来设置中文字符的字体xeCJK
。请参阅下面的最小工作示例。
\documentclass{article}
\usepackage{xeCJK}
\usepackage{lipsum}
\setCJKmainfont{FandolKai}
\begin{document}
\par \lipsum[1][1-3]
\par 你好!
\par \lipsum[1][1-3]
\end{document}
通过更改 中的字体名称setCJKmainfont
,我还可以使用NotoSansMonoCJKsc-Bold
。请参阅下面的最小工作示例。
\documentclass{article}
\usepackage{xeCJK}
\usepackage{lipsum}
\setCJKmainfont{NotoSansMonoCJKsc-Bold}
\begin{document}
\par \lipsum[1][1-3]
\par 你好!
\par \lipsum[1][1-3]
\end{document}
问题
当我尝试使用字体时NotoSansMonoCJKsc-Regular
,出现错误xdvipdfmx:fatal: Invalid font: -1 (0)
。
xelatex
下面的第二和第三个代码块显示了编译文档时的输出。请注意退出代码为1
。
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{NotoSansMonoCJKsc-Regular}
\begin{document}
你好!
\end{document}
xelatex main.tex
echo "+++ Exit code: $?"
This is XeTeX, Version 3.141592653-2.6-0.999993 (TeX Live 2021/GNU Guix) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(./main.tex
LaTeX2e <2020-10-01> patch level 4
L3 programming layer <2021-02-18>
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/base/article.cls
Document Class: article 2020/04/10 v1.4m Standard LaTeX document class
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/base/size10.clo))
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/xelatex/xecjk/xeCJK.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3kernel/expl3.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3backend/l3backend-xetex.def (|extractbb --version)))
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty)
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3packages/xtemplate/xtemplate.sty)
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3packages/xparse/xparse.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/l3packages/xparse/xparse-generic.tex)))
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/ctex/ctexhook.sty)
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/fontspec/fontspec.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/fontspec/fontspec-xetex.sty
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/base/fontenc.sty)
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/fontspec/fontspec.cfg)))
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/xelatex/xecjk/xeCJK.cfg)) (./main.aux)
(/gnu/store/4rv29ip0aa5729kmm41mx0n7kszfvlfd-texlive-texmf-20210325/share/texmf
-dist/tex/latex/base/ts1cmr.fd) [1] (./main.aux)
xdvipdfmx:fatal: Invalid font: -1 (0)
No output PDF file written.
)
Error 256 (driver return code) generating output;
file main.pdf may not be valid.
Transcript written on main.log.
+++ Exit code: 1
问题
NotoSansMonoCJKsc-Bold
使用时可以编译文档setCJKmainfont
,但使用 时却不能NotoSansMonoCJKsc-Regular
。为什么会出现这种情况?
两种字体NotoSansMonoCJKsc-Regular.otf
均已NotoSansMonoCJKsc-Bold.otf
安装(见下文)。
fc-list | grep '/\.fonts/' | sort
/home/rdrg/.fonts/FandolKai-Regular.otf: FandolKai:style=Regular
/home/rdrg/.fonts/NotoSansMonoCJKsc-Bold.otf: Noto Sans Mono CJK SC:style=Bold
/home/rdrg/.fonts/NotoSansMonoCJKsc-Regular.otf: Noto Sans Mono CJK SC:style=Regular
答案1
我通过指定字体的完整路径解决了这个问题(感谢此评论(大卫·卡莱尔)
\documentclass{article}
\usepackage{xeCJK}
\usepackage{lipsum}
\setCJKmainfont[
Path = {\string~/.fonts/},
Extension = .otf
]{NotoSansMonoCJKsc-Regular}
\begin{document}
\par \lipsum[1][1-3]
\par 你好!
\par \lipsum[1][1-3]
\end{document}
我仍然想知道为什么如果我不指定字体的完整路径,编译就会失败。XeLaTeX 似乎无法在我的系统中找到其他格式。从strace
尝试编译导致错误的文档时的输出可以看出。
\documentclass{article}
\usepackage{xeCJK}
\usepackage{lipsum}
\setCJKmainfont{NotoSansMonoCJKsc-Regular}
\begin{document}
\par \lipsum[1][1-3]
\par 你好!
\par \lipsum[1][1-3]
\end{document}
$ strace --trace=openat xelatex main.tex 2>&1 | grep -v "= -1 ENOENT [(]No such file or directory[)]$" | grep -i 'notosansmonocjksc-regular'
openat(AT_FDCWD, "/home/rdrg/.guix-home/profile/share/fonts/opentype/NotoSansMonoCJKsc-Regular.otf", O_RDONLY) = 5
openat(AT_FDCWD, "/home/rdrg/.fonts/NotoSansMonoCJKsc-Regular.otf", O_RDONLY) = 5