我在 Matplotlib 中的 Latex 中使用 Stix two math 字体来绘制图表。目前我只能使用 Stix two math,以匹配 ms-Word 中的公式字体。
我在此处展示的测试使用 overleaf.com 中的 tex 引擎。后来我在 matplotlib 中应用了相同的前言。(因此这不是 matplotlib 问题)。
我需要用正体(常规)希腊字母来计算数学方程式。读这个回答,我认为简单地使用\mathrm{\greeksymbol}
应该没问题。但它不起作用。它显示相同的斜体希腊字母,有或没有\mathrm
(参见测试图像上的第 2 行和第 3 行)。我尝试使用包\usepackage{upgreek}
,但它似乎使用不同的字体(见最后一行),我将它与标准 stix two math regular(第一行)进行了比较。
这是我的代码:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{stix2}
\usepackage{upgreek}
\begin{document}
$\tau,\omega,\pi$
$\mathrm{\tau},\mathrm{\omega},\mathrm{\pi}$
$\uptau,\upomega,\uppi$
\end{document}
我犯了错误吗?为什么 mathrm 不起作用?抱歉,我对 latex 还只是个初学者。
多谢!
文本引擎:overleaf.com
答案1
更新:简单的解决方案
尽管stix2
中有小写希腊字母\mathrm
,但 LaTeX 的 等默认定义会忽略当前的数学字母表\alpha
。\beta
有一个包选项可以覆盖此设置,[lcgreekalpha]
。
\documentclass{article}
\usepackage{amsmath}
\usepackage[lcgreekalpha]{stix2}
\begin{document}
\begin{equation*}
\begin{split}
&\sin^2 \mathrm{\theta} \cos^2 \mathrm{\phi}\\
+ &\cos^2 \mathrm{\theta} \cos^2 \mathrm{\phi}
\end{split}
\end{equation*}
\end{document}
笔记:尽管stix2
不提供upgreek
诸如 之类的 -style 命令,\upalpha
但您可能希望添加它们以兼容其他软件包。这将使更改论文的字体变得更加简单。您应该删除upgreek
,因为它与 不兼容stix2
。
如果尚未定义,则将设置\upalpha
为以下内容,但如果存在,则不会更改现有定义,这应该可以安全地用于任何文档类:\mathrm{\alpha}
\providecommand\upalpha{\mathrm{\alpha}}
使用现代字体
在 LuaLaTeX 或 XeLaTeX 中,您可以使用 来获取直立的希腊字母unicode-math
。每个 Unicode 数学字体都有它们。但是,\mathrm
不是获取它们的命令(至少不是开箱即用的)。
至少有四种方法:
- 改成
\mathrm{\omega}
\symup{\omega}
unicode-math
使用包选项加载[mathrm=sym]
,为 创建\mathrm
一个别名\symup
。如果您在数学模式下需要单词,请使用\textnormal
或\textup
代替。- 使用支持的
upgreek
-style命令unicode-math
。 - 不要解决实际问题,而是将
\mathrm
字体更改为包含希腊字母的字体。只有在您实际上要在数学模式下输入希腊字母时才应该这样做,例如\mathbf{εὕρηκα!}
。在这种情况下,您可能也想在文本模式下输入希腊字母,因此您可能已经将其设置为可以使用的字体。但是,您可以使用将其设置为不同的字体系列,例如\setmathrm{CMU Serif}
。
最后,你可能想要设置
\tracinglostchars=3
在您的序言中,让 TeX 在您请求没有该符号的字体的符号时将其视为错误。由于 1980 年代的一些技术债务,默认行为是默默地将警告打印到文件中间.log
。
\documentclass{article}
\tracinglostchars=3
\usepackage[stixtwo]{fontsetup}
\begin{document}
\begin{equation*}
\begin{split}
&\sin^2 \symup{\theta} \cos^2 \symup{\phi} \\
+ &\cos^2 \uptheta \cos^2 \upphi
\end{split}
\end{equation*}
\end{document}
使用旧字体
唯一包含所有拉丁字母和希腊字母的标准 TeX 字体编码是 OML(您可以将其视为“旧数学字母”)。但是,很少有字体系列在此编码中包含直立字母。一个包含直立字母的软件包是mathdesign
,它提供了直立的 Charter(mdbch
系列)、Garamond(mdugm
)或 Utopia(mdput
)。
因此,这里有一个非常精心设计的例子,说明如何选择带有希腊字母的直立字体(Math Design Utopia)。它将其作为字母表\mathrm
和 等运算符的字体加载\sin
,\cos
重新定义\theta
和\phi
以便它们可以与 正常工作\mathrm
,还添加了命令\uptheta
和\upphi
。它将所有这些设置为与 一起工作\mathversion{bold}
,因此它们将与\boldsymbol
或 一起工作bm
。
\documentclass{article}
\tracinglostchars=3
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\DeclareSymbolFont{upletters}{OML}{mdput}{m}{n}
\SetSymbolFont{upletters}{bold}{OML}{mdput}{b}{n}
\DeclareSymbolFontAlphabet\mathrm{upletters}
\DeclareMathSymbol{\theta}{\mathalpha}{letters}{"12}
%...
\DeclareMathSymbol{\phi}{\mathalpha}{letters}{"1E}
\DeclareRobustCommand\uptheta{\mathrm{\theta}}
\DeclareRobustCommand\upphi{\mathrm{\phi}}
\makeatletter
\def\operator@font{\mathgroup\symupletters}
\makeatother
\begin{document}
\begin{equation*}
\begin{split}
&\sin^2 \mathrm{\theta} \cos^2 \mathrm{\phi}\\
+ &\cos^2 \uptheta \cos^2 \upphi
\end{split}
\end{equation*}
\end{document}
我说“极其复杂”是因为在实际使用中,你会使用一个包来实现这一点,例如本例中的mathdesign
或,或者使用与 Computer Modern 更兼容的包。如果你只想加载支持希腊语的数学字母,这是一个灵活的包。但是,如果没有包完全满足你的要求,或者你正在编写自己的字体包,你可以使用类似的命令来设置它。fourier
upgreek
isomath
这些命令的变体也适用于任何扩展OML
为自己的自定义 8 位编码的软件包中的字体,但保留所有字母与 相同的位置OML
。这些包括eulervm
、newtxmath
和。您需要检查软件包文档以查看它是否有字体表,然后可能newpxmath
对stix2-type1
软件包本身进行逆向工程以查看它如何声明编码和系列名称。这就是可能的对于中等粗细的字母使用 Euler,而对于粗体字母则使用 Math Design Charter。
还有另一种选择:mathastext
可以选择从 8 位 LGR 编码的字体加载希腊字母,例如希腊字体协会的字体。
答案2
\alpha
我们首先假设,将所有的、\beta
、 等实例都替换为\upalpha
、 、 等并不好玩。\upbeta
一种能够自动以直立字体形状呈现小写希腊字母的方法会很有吸引力,对吧?
该unicode-math
软件包允许用户在四种预定义的数学样式中进行选择:
由于您需要以直立字体形状显示所有希腊字母(小写和大写),我认为您应该加载字体Stix Two Math
包math-style=french
- 如果小写拉丁字母应该以倾斜(“斜体”)字体形状显示 - 或者math-style=upright
- 如果小写拉丁字母应该以直立字体形状显示。
由于您在评论中写道“任何拉丁 [字母] 变量 --> 斜体”,我想您想要“法语”数学样式。要呈现常量以直立的字体形状,我建议您根据需要\symup{i}
写。\symup{e}
我建议您使用LuaLaTeX来编译您的文档,并\usepackage{stix2}
用以下两个指令替换:
\setmainfont{Stix Two Text}
\setmathfont{Stix Two Math}[math-style=french]
上表的代码如下。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Stix Two Text} % text font
%handy shortcut macro:
\newcommand{\blurb}{$a,b,c \quad A,B,C \quad \gamma,\delta,\omega \quad \Gamma,\Delta,\Omega$}
\begin{document}
\begin{tabular}{ll}
Math Style & Appearance \\[1ex]
TeX & \setmathfont{Stix Two Math}[math-style=TeX]\blurb \\
ISO & \setmathfont{Stix Two Math}[math-style=ISO]\blurb \\
french & \setmathfont{Stix Two Math}[math-style=french]\blurb \\
upright & \setmathfont{Stix Two Math}[math-style=upright]\blurb \\
\end{tabular}
\end{document}