mathastext 字体形状以错误的编码呈现

mathastext 字体形状以错误的编码呈现

我正在尝试使用该mathastext包将数学中的字母替换为文档中的默认字体,并将gfsdidot( udidot) 替换为希腊语。我既可以让除希腊语之外的所有相关内容正常工作,也可以让希腊语正常工作但破坏拉丁语。

我使用 pdfLaTeX,我认为我有足够的数学字母,所以这不应该是问题。我还知道 GFS Didot 具有所有所需的粗细和形状。 中的字母如何mathastext知道它仅适用于希腊语,为什么它不包含? 它与(目前同样有问题)\mathrm有什么关系?\mathnormal

\Mathrm可能看起来像一个语法错误,但它是在内部定义的mathastext.sty,虽然我不确定如何(或是否)正确使用它。

如果这对表达我想要做的事情有帮助的话:类似于unicode-range在 CSS 中,对一个字符范围使用一种字体,对另一个字符范围使用另一种字体。对于 pdfLaTeX,这似乎变得更加困难,因为字体不是 unicode,但这确实是可能的,因为mathastext对于默认的数学字母表来说,这样做是可以的。怎么做?

PDF 输出

\documentclass{article}
\usepackage[LGR,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ebgaramond}
\usepackage[LGRgreek,italic]{mathastext}

\DeclareSymbolFont{mycustom}{LGR}{udidot}{normal}{n}
\SetSymbolFont    {mycustom}{normal}{LGR}{udidot}{\rmdefault}{n}%
\DeclareSymbolFontAlphabet{\Mathrm}{mycustom}%%% disable this to break greek but fix latin

\MTgreekfont{udidot}
\MTitgreek
\MTitGreek
\Mathastext

\newcommand*{\GRALPH}{\alpha \beta \gamma \delta \epsilon
\zeta \eta \theta \iota \kappa \lambda \mu \nu \xi o \pi
\rho \sigma \tau \upsilon \phi \chi \psi \omega \varsigma}

\newcommand*{\gralph}{A B \Gamma \Delta E Z H \Theta I K
\Lambda M N \Xi O \Pi P \Sigma T \Upsilon \Phi X \Psi \Omega}

\begin{document}

\noindent
\( \GRALPH - \mathrm{\GRALPH} \)\\
\( \gralph - \mathrm{\gralph} \)\\
so far it looks good, but now also latin turns up as greek:\\
\( abcdefghijklmnopqrstuvwxyz - \mathrm{abcdefghijklmnopqrstuvwxyz} \)

\end{document}

答案1

我认为您想\mathrm将希腊字母竖起来。这\Mathrm是由 mathastext 定义的数学字母表,旨在使用默认形状的文本字体(已用于数学中的字母),该形状先验是竖直的。(因此,如果包收到italic选项,则这很有意义)。然后\mathrm简单地重新定义为具有含义的宏(因此,只需不执行该定义即可实现\Mathrm选项)。defaultmathalphabets

在 LaTeX NFSS 中,\mathrm表示在数学中使用文本字体。它并不意味着将事物直立。特别是,先验地期望它将希腊字母从斜体变为直立形状是没有意义的。

但是您可以定义一个数学字母表命令\upgreek,该命令将使用具有直立希腊字母的 LGR 编码中的给定字体。事实上,mathastext 确保希腊字母遵循数学字母表命令。

因此,这可能可以实现您的要求:

\documentclass{article}
\usepackage[LGR,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ebgaramond}
\usepackage[LGRgreek,italic]{mathastext}
\MTitgreek
\MTgreekfont{udidot}
\Mathastext

\DeclareSymbolFont{mycustom}{LGR}{udidot}{m}{n}
\DeclareSymbolFontAlphabet{\upgreek}{mycustom}

\newcommand*{\GRALPH}{\alpha \beta \gamma \delta \epsilon
\zeta \eta \theta \iota \kappa \lambda \mu \nu \xi o \pi
\rho \sigma \tau \upsilon \phi \chi \psi \omega \varsigma}

\newcommand*{\gralph}{A B \Gamma \Delta E Z H \Theta I K
\Lambda M N \Xi O \Pi P \Sigma T \Upsilon \Phi X \Psi \Omega}

\begin{document}

\noindent
\( \GRALPH - \upgreek{\GRALPH} \)\\
\( \gralph - \upgreek{\gralph} \)\\
so far it looks good.\\
\( abcdefghijklmnopqrstuvwxyz - \mathrm{abcdefghijklmnopqrstuvwxyz} \)

\meaning\mathrm
\end{document}

不幸的是,\mathrm{\upgreek{\alpha\beta ab}}它将不起作用,因为\upgreek将覆盖外部\mathrm。LaTeX 数学字母表不能嵌套。

如果您需要宏\uprightlatinandgreek,那么这可能是可行的,但如果您不需要,我可以休息一下;-)

在此处输入图片描述

相关内容