目录

目录

目录

  • 上下文
  • 问题
  • 问题

上下文

我想使用“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

相关内容