我正在尝试使用该mathastext
包将数学中的字母替换为文档中的默认字体,并将gfsdidot
( udidot
) 替换为希腊语。我既可以让除希腊语之外的所有相关内容正常工作,也可以让希腊语正常工作但破坏拉丁语。
我使用 pdfLaTeX,我认为我有足够的数学字母,所以这不应该是问题。我还知道 GFS Didot 具有所有所需的粗细和形状。 中的字母如何mathastext
知道它仅适用于希腊语,为什么它不包含? 它与(目前同样有问题)\mathrm
有什么关系?\mathnormal
\Mathrm
可能看起来像一个语法错误,但它是在内部定义的mathastext.sty
,虽然我不确定如何(或是否)正确使用它。
如果这对表达我想要做的事情有帮助的话:类似于unicode-range
在 CSS 中,对一个字符范围使用一种字体,对另一个字符范围使用另一种字体。对于 pdfLaTeX,这似乎变得更加困难,因为字体不是 unicode,但这确实是可能的,因为mathastext
对于默认的数学字母表来说,这样做是可以的。怎么做?
\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
,那么这可能是可行的,但如果您不需要,我可以休息一下;-)
。