这是关于以下内容的后续问题:使用 \usepackage[greek]{babel} 时以希腊文脚本设置的 ASCII 文本
当我们有如下 MWE 时:
\documentclass[twoside]{book}
\usepackage{fontspec}
\usepackage[greek]{babel}
\usepackage{alphabeta}
\setmainfont{Libertinus Serif}
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
{My Project }
{Δημιουργήθηκε από Doxygen 1.8.19}
\end{document}
我们得到:
我们看到这里第二行的一部分缺失了,我们预期:
这个结果是通过注释掉该行获得的:\renewcommand{\familydefault}{\sfdefault}
所以一个简单的解决方案是在生产代码中也这样做,但我很犹豫,因为这行是在 2013 年添加的,而且不知道为什么添加它(doxygen 当时还没有在 git 中,所以单独的提交也没有注册)。
为了提供一些附加信息,看起来同时还添加了以下几行:
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{courier}
\usepackage{amssymb}
\usepackage{sectsty}
\renewcommand{\familydefault}{\sfdefault}
\allsectionsfont{%
\fontseries{bc}\selectfont%
\color{darkgray}%
}
- 知道为什么
\renewcommand{\familydefault}{\sfdefault}
要添加这样一行吗? - 有什么建议可以改进这条线路
\renewcommand{\familydefault}{\sfdefault}
,以便保留功能但副作用消失?
答案1
您似乎想要一个默认使用无衬线字体的文档:
\documentclass[twoside]{book}
\usepackage{fontspec}
\usepackage[greek]{babel}
%\usepackage{alphabeta} % why?
\setmainfont{Libertinus Sans}
\begin{document}
My Project
Δημιουργήθηκε από Doxygen 1.8.19
\end{document}
使用您最喜欢的字体,只要它支持希腊语。
在您的代码中,您将衬线字体设置为 Libertinus Serif,但由于您未指定无衬线字体系列,因此重新定义\familydefault
将\sffamily
选择默认值,即不支持希腊语的 Latin Modern Sans。
我认为没有alphabeta
必要。
答案2
Computer Modern Unicode 字体是 Knuth 的 Computer Modern 的克隆,就像 Latin Modern 一样,包含希腊语。因此,您可以使用
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
解决此类错误的一个好方法是将其添加\tracinglostchars=2
到文件顶部。然后 TeX 会告诉您所选字体是否不包含您正在使用的字符。默认情况下,它会默默地将警告消息记录到文件中.log
。