为什么 XeTeX 不显示基本的 Unicode 字符?

为什么 XeTeX 不显示基本的 Unicode 字符?

我有一个这样的文档,但是当我通过调用xelatex它来呈现它时,π 字符显示为空格:

\documentclass[13pt,oneside]{scrbook}
\usepackage{fontspec} % the problem remains, whether I use this or not

\begin{document}
\mainmatter
This is a paragraph with a PI (π) in it.
\end{document}

输出中的相关错误消息似乎是:

LaTeX Font Warning: Font shape `OT1/cmr/m/n' in size <13> not available
(Font)              size <12> substituted on input line 1368.

我可以使用newunicodechar 包来解决这个问题,但是这有点笨拙(我必须定义我想要使用的每个 unicode 字符),并且不能很好地与字体兼容(当这些字符出现在等宽文本中时,它们将使用 sans 字体排版,因为它们被视为数学)。

问题似乎是我使用的字体没有定义给定的字符。在这种情况下,LaTeX 是否可能自动恢复到另一种更丰富的字体?哪种字体已知可以覆盖很多字符?(我需要一些希腊字母、数学符号、箭头和引号字符。)等宽字体怎么样?

答案1

编辑这是 egreg 的(更好的)解决方案,供将来参考,因为这个答案已经被接受了。

\RequirePackage{fix-cm}
\documentclass[fontsize=13pt,oneside]{scrbook}
\usepackage{fontspec}
\usepackage[Latin,Greek]{ucharclasses}

\newfontfamily\substitutefont{CMU Serif}
\setTransitionsForGreek{\begingroup\substitutefont}{\endgroup}

\begin{document}
\mainmatter
This is a paragraph with a PI (π) in it.
\end{document}

这是我写的原始消息,没有使用该\newfontfamily命令。

使用 ucharclasses:

\usepackage{ucharclasses}
  \setTransitionsFor{GreekAndCoptic}{\begingroup\fontspec{DejaVu Sans}[Scale=MatchLowercase]}{\endgroup}

(当然,将 DejaVu Sans 更改为系统上具有所需字符的任何字体。)

答案2

您报告的警告消息无关紧要且无害。如果您在\RequirePackage{fix-cm}\documentclass行之前,它会消失,但希腊字母 pi 也不会出现。相关消息位于文件末尾.log

Missing character: There is no π in font [lmroman12-regular]:mapping=tex-text!

Latin Modern 字体仅支持少数希腊字母。使用 CMU Serif 字体会更幸运

\RequirePackage{fix-cm} % remove the spurious warning
\documentclass[fontsize=13pt,oneside]{scrbook}
\usepackage{fontspec}

\setmainfont{CMU Serif}

\begin{document}
\mainmatter
This is a paragraph with a PI (π) in it.
\end{document}

在此处输入图片描述

注意:允许将 13pt 设置为基本尺寸的事实scrbook并不足以成为使用这种尺寸的充分理由。它要么太大(对于绝大多数人来说),要么太小(对于视障人士来说)。

答案3

我遇到了同样的错误,但在不同的环境中,是由 Pandoc Markdown 中的这一行和后台的 xelatex 引起的:

$\beta \in (0,1) $

显然,Pandoc 或 xelatex 不喜欢将空格作为方程式中的最后一个字符。

也许这会节省任何人来这里的几个小时,因为这是与此警告绑定的第一个链接[WARNING] Missing character: There is no

相关内容