在数学模式下使用 Alegreya 字体的数字和希腊斜体时出现问题

在数学模式下使用 Alegreya 字体的数字和希腊斜体时出现问题

我开始设置一个带有Alegreya字体的模板文档,该字体应该可以在所有三个引擎(PDFLaTeX、XeLaTeX 和 LuaLaTeX)上编译。为了设置Alegreya为数学字体,我选择了mathastext包,因为它适用于所有三个引擎。但我无法从字体中获取数学模式中的数字和希腊符号。我尝试了几种方法,这是我目前所拥有的:

(请注意,我想要全部数学中的希腊字母以斜体显示。我只是\mathit为了演示目的而使用的。

最大能量损失 1:使用Alegreya

\documentclass{scrbook}  
\usepackage{Alegreya}
\usepackage[
    LGRgreek,% use greek letters from main font
    italic,
    itgreek,
]{mathastext}

\begin{document}
abcdef + αβγδεζ + 12345\\
\textit{abcdef + αβγδεζ + 12345}\\ 
$abcdef + \alpha\beta\gamma\delta\zeta + 12345$\\
$\mathit{abcdef + \alpha\beta\gamma\delta\zeta} + 12345$
\end{document}
  • PDFLaTeX:
    • 文本:希腊语:是
    • 数学:数字:是,直立希腊文:是*,斜体希腊文:否*
  • LuaLaTeX 和 XeLaTeX:
    • 文本:希腊语:是
    • 数学:数字:否,直立希腊文:是*,斜体希腊文:否*

*文档中的第 3 行给出了 upgright greek,它看起来不像默认字体,但与 upright text greek 不同。第 4 行给出了拉丁字母。

最大能量损失 2:使用fontspec包至少与 Lua/XeLaTeX 一起编译

\documentclass{scrbook}  
\usepackage[no-math]{fontspec}
\setmainfont[
    %Path={Fonts/Alegreya/},% required to get italic text greek in XeLaTeX
    %Extension = .otf,% .ttf,% no difference
    Ligatures=TeX,
    UprightFont = *-Regular,
    ItalicFont = *-Italic,
    BoldFont = *-Bold,
    BoldItalicFont = *-BoldItalic,
]{Alegreya}

\usepackage[
    LGRgreek,% use greek letters from main font
    italic,
    itgreek,
]{mathastext}

\begin{document}
abcdef + αβγδεζ + 12345\\
\textit{abcdef + αβγδεζ + 12345}\\ 
$abcdef + \alpha\beta\gamma\delta\zeta + 12345$\\
$\mathit{abcdef + \alpha\beta\gamma\delta\zeta} + 12345$
\end{document}
  • LuaLaTeX:与 MWE 1 相同,现在数学数字正确。
  • XeLaTeX:与 MWE 1 相同,数字正确,但文本模式中缺少斜体希腊字母。虽然我的系统上安装了字体,但需要在我的目录中定义字体文件的路径才能在文本中显示斜体希腊字母。

在安装之前,我检查了字体是否包含希腊字母。我尝试了 true type 和 open type 字体版本,并尝试指定扩展名。但这对输出没有任何影响。

最大能量损失 3:使用unicode-math而不是mathastext

\usepackage[...]{mathastext}在 MWE 2 中将其更改为:

\usepackage{unicode-math}
\setmathfont{Alegreya} 

这当然是行不通的,输出的是默认字体的数学公式,里面缺少希腊字母的符号\mathit。因此,我将unicode-math部分内容改为:

最大能量损失 4: 修改的unicode-math解决方案

\usepackage[math-style=TeX]{unicode-math}
\setmathfont{latinmodern-math}
\setmathfont[range=\mathit/{latin,Latin,greek,Greek,Digits},Numbers={Lining}]{Alegreya-Italic}
\setmathfont[range=\mathup/{latin,Latin,greek,Greek,Digits},Numbers={Lining}]{Alegreya}
  • LuaLaTeX:
    • textgreek 和 mathgreek:是
    • 数字:无
  • XeLaTeX:与 MWE 3 相同。

我确实知道这是可能的使用 XeLaTeX 进行Alegreya数学运算mathspec。但由于我的文档计划作为所有三个引擎的模板,因此最好有一个更通用的解决方案。如果这不可能,我至少希望让数字适用于 LuaLaTeX 和 MWE 4。不知何故,似乎我只能得到正确的希腊字母或正确的数字,但不能同时得到两者。

可能相关:

字体可以下载这里。选择后,可以定制字体形状和希腊字母。

答案1

你遇到的一个问题是 TeX Live 目前附带的 Alegreya 旧版本不包含任何希腊字母。如果你下载并安装较新版本的 OTF 文件,您将能够通过文件名在 XeLaTeX 或 LuaLaTeX 中加载它们。(如果您的 TeX 发行版更新了其字体版本,这应该仍然有效。)

此外,您用来加载部分数学字体的命令unicode-math0.8l 版本中似乎不正确。您可能需要确保您已最新文档

这是针对直立、斜体、粗体和粗体斜体字母表中的希腊字母和拉丁字母以及直立和粗体数字(斜体数字符号不在 Unicode 10.0 中)的解决方案。

\RequirePackage{luatex85} % Workaround for standalone 1.2 and LuaTeX.
\documentclass[preview,varwidth]{standalone}

\usepackage{unicode-math}

\defaultfontfeatures{Scale=MatchLowercase,Ligatures={Common,TeX},Numbers=Lining}
\setmathfont{Alegreya-Italic.otf}[range=it/{latin,Latin,greek,Greek}]
\setmathfont{Alegreya-Regular.otf}[range=up/{latin,Latin,greek,Greek,num}]
\setmathfont{Alegreya-BoldItalic.otf}[range=bfit/{latin,Latin,greek,Greek}]
\setmathfont{Alegreya-Bold.otf}[range=bfup/{latin,Latin,greek,Greek,num}]
\newfontfamily\Alegreya{Alegreya-Regular.otf}[
  BoldFont=Alegreya-Bold.otf,
  ItalicFont=Alegreya-Italic.otf,
  BoldItalicFont=Alegreya-BoldItalic.otf]

\begin{document}
{\Alegreya Alegreya: abcxyzαβγδ123 \textit{abcxyzαβγδ} \textbf{abcxyzαβγδ123} \textbf{\textit{abcxyzαβγδ}}}

\[\symup{abcxyzαβγδ123}\,\symit{abcxyzαβγδ}\,\symbfup{abcxyzαβγδ123}\,\symbfit{abcxyzαβγδ}\]
\end{document}

Alegreya test

这定义了\Alegreya与软件包的兼容性。它没有完全设置字体系列,例如不同的粗细、小型大写字母、无衬线字体或无衬线数学字母,但unicode-math如果您需要,文档将展示如何执行这些操作。

如果您有一个适用于 PDFLaTeX 的大致可用的前言,那么制作可在 PDFLaTeX、XeLaTeX 或 LuaLaTeX 中使用的模板的方法是使用该包iftex来检测您的 TeX 引擎并将后备版本包装在条件块中。所以,\ifPDFLaTeX...... \else... \fi

更新

截至 2019 年 3 月,alegreya已更新,现在一切都变得更容易。

如果您使用 PDFLaTeX 进行编译或加载选项,它支持 LGR 编码[type1]。这意味着您现在可以加载\usepackage[LGR, T1]{fontenc}、 ,并使用或\usepackage[type1]{alegreya}将其 LGR 编码用于您的希腊数学字母。mathastextisomath

如果使用 LuaLaTeX 或 XeLaTeX 编译,该包将设置fontspec。您仍然可以使用上述技术unicode-math(我推荐),或者在 LuaLaTeX 或 XeLaTeX 中加载alegreyamathastext或者mathspec在 XeLaTeX 中使用。

原始答案的其余部分

Alegreya根据文档,该包无法像您希望的那样支持希腊字母,因为在 NFSS 下,希腊文本字母采用 LGR 编码,并且您被告知mathastext从中获取其数学符号。但是,Alegreya仅支持 OT1、T1、TS1 和 LY1 编码。

以下序言大多适用于加载另一种支持希腊语的字体,GFS Bodoni:(它不包含斜体字体,但可以用另一种字体替代。)

\RequirePackage{luatex85} % Workaround for standalone 1.2 and LuaTeX.
\documentclass[preview,varwidth]{standalone}

\usepackage[LGR,T1]{fontenc}
%\usepackage[english,greek]{babel} % Use this if you are writing in Greek.
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
%\usepackage{amsmath}
\usepackage{alphabeta}
\usepackage{gfsbodoni}
\usepackage[italic, LGRgreek, itgreek]{mathastext} % or upgreek, or upGreek.

\DeclareSymbolFont{bodoniup}{LGR}{bodoni}{m}{n}
\DeclareSymbolFontAlphabet{\greekup}{bodoniup}
\DeclareSymbolFont{bodonibf}{LGR}{bodoni}{b}{n}
\DeclareSymbolFontAlphabet{\greekbf}{bodonibf}

\DeclareRobustCommand\mathup[1]{\mathrm{#1}}

\begin{document}
{abcxyzαβγδ123 \textit{abcxyzαβγδ} \textbf{abcxyzαβγδ123} \textit{\textbf{abcxyzαβγδ}}}

\[ abcxyzαβγδ123 \quad
  \mathup{abcxyz}\greekup{αβγδ}\mathup{123} \quad
  \mathbf{abcxyz}\greekbf{αβγδ}\mathbf{123}
\]
\end{document}

enter image description here

唯一会破坏的是 中的希腊字母\mathit\mathbf其他数学字母。使用mathastext和传统的 T1 和 LGR 字体编码,这些会将字母设置为 T1 编码,而不是 LGR 编码。因此,\mathit{α}将变成A\mathrm{γ}将变成 g,并将\mathbf{δ}变成d。如果您需要在同一文档中使用多种样式的希腊数学符号,或者您想按照 ISO 样式使用 µ 和 π,则需要使用变通方法。 这是受到此处 jfbu 的回答的启发。

还请注意,这对于 ISO 样式来说是正确的,但要获得 TeX 的默认行为(倾斜的小写和直立的大写希腊文),请使用该upGreek选项。

相关内容