这个话题已经讨论过几次了,但是在所有的答案中,我找不到任何适合我需要的答案。
我正在寻找一种以与使用普通字母相同的方式使用希腊字母的方法,这意味着大写字母和小写字母应该默认为斜体并响应命令\mathrm
。
对于大写的希腊字母,这个问题很容易解决,一方面我可以使用包isomath
,但是它完全破坏了类似\mathrm{delta}
(菲被打印),另一方面,这pxgreeks
是 -font 包独有的pxfonts
,这是我想避免的要求。\mathrm{delta}
在这种情况下仍然打印斜体增量
在这两种情况下一切正常大写希腊字母很好, 但它不适用于小写希腊字母。
那么有什么方法可以使我的 MWE 中的第一行与第二行完全一样吗?
(我接受“不”作为答案。)
我之前使用过 unicode-math,它可以开箱即用,但由于我使用的字体是非 unicode 字体,所以我不想再使用缓慢的 unicode-math/fontspec 了。
我尝试避免使用upgreek
提供类似updelta
或 pxfonts 的宏的包deltaup
,因为我在不同的文档类(article、scrbook、beamer、IEEEtran)中交叉使用我的代码,并且使用不同的字体,我总是面临不兼容的问题。
尽管需要通用的解决方案,但特定于 pxfont 的解决方案也会对我有所帮助。
谢谢。
平均能量损失
\documentclass{article}
\usepackage[utf8x]{luainputenc}
\usepackage[T1]{fontenc}
\usepackage{pxfonts}
\usepackage{siunitx}
%\usepackage{isomath}
%\usepackage[ISO]{pxgreeks}
\begin{document}
\begin{equation}
\Phi_{\mathrm{\delta}} = \SI{42}{\micro\Omega} \cdot \delta_{\mathrm{\Phi}}
\end{equation}
\begin{equation}
P_{\mathrm{d}} = \SI{42}{\nano\ampere} \cdot d_{\mathrm{P}}
\end{equation}
\end{document}
答案1
我认为在旧版 tex 中不可能找到通用解决方案。数学字体包之间总是存在一些细微的差异。
关于 pxfonts 特定的解决方案:在我看来,这并非不可能,但设置起来会很耗时。在旧版 tex 中,希腊符号分散在各处:OT1 中有一些大写直立希腊字符,OML 中有一些斜体大写 + 小写,其余的可能必须从 LGR 中提取,对于 pxfonts,则从包提供的特殊字体中提取。如果您真的只关心\mathrm
您可能可以做这样的事情:
\documentclass{article}
\usepackage{amsmath}
\usepackage{pxfonts}
\let\deltait\delta
\makeatletter
\renewcommand\delta
{%
\ifnum\fam=0 \deltaup\else \deltait\fi
}
\begin{document}
\begin{equation}
\delta \mathrm{\delta}
\end{equation}
\end{document}
但它不会扩展\mathbf
,所以我不认为它是一个真正的解决方案。
但是使用 xelatex/lualatex 和 unicode-math,您的示例可以正常工作(我在 -argument 中将\Omega
其更改为):\ohm
\SI
\documentclass{article}
\usepackage[math-style=ISO]{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\usepackage{siunitx}
\begin{document}
\begin{equation}
\Phi_{\symrm{\delta}} = \SI{42}{\micro\ohm} \cdot \delta_{\symrm{\Phi}}
\end{equation}
\begin{equation}
P_{\symrm{d}} = \SI{42}{\nano\ampere} \cdot d_{\symrm{P}}
\end{equation}
\end{document}
答案2
您提到使用pxfonts
并尝试过pxgreeks
。唯一缺少的是pxgreeks
将小写希腊字母保留mathord
为包完成的pxfonts
类型。大写希腊字母已经是变量类型,您只需使用字母表\mathfrak
(原文如此)即可获得直立变体。
因此,只需将小写希腊字母的数学代码修改为变量系列即可。以下是针对旧版引擎的操作方法pdftex
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{pxfonts}
\usepackage[ISO]{pxgreeks}
\usepackage{siunitx}
% make all lowercase Greek of "variable family"
% pdftex engine only.
% uppercase Greek are already of "variable family"
% from pxgreeks package.
\makeatletter
\@tfor\@tempa:=
\alpha \beta \gamma \delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu
\nu \xi \pi \rho \sigma \tau \upsilon \phi \chi \psi \omega \varepsilon
\vartheta \varpi \varrho \varsigma \varphi
\do {% for some reason, must proceed in two steps
\count255 \numexpr\@tempa+"7000\relax
\expandafter\mathchardef\@tempa \count255 }
\makeatother
\begin{document}\thispagestyle{empty}
% slanted lowercase and uppercase Greek
\begin{equation}
\Phi_{\delta} = \SI{42}{\micro\ohm} \cdot \delta_{\Phi}
\end{equation}
% use \mathfrak (sic) to get uppercase Greek...
\begin{equation}
\Phi_{\mathfrak{\delta}} = \SI{42}{\micro\Omega} \cdot \delta_{\mathfrak{\Phi}}
\end{equation}
\begin{equation}
P_{\mathrm{d}} = \SI{42}{\nano\ampere} \cdot d_{\mathrm{P}}
\end{equation}
Use \string\mathfrak\space to get uppercase Greek !
$\Gamma \Delta
\Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega \alpha \beta \gamma
\delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu \nu \xi \pi \rho
\sigma \tau \upsilon \phi \chi \psi \omega \varepsilon \vartheta \varpi
\varrho \varsigma \varphi $
$\mathfrak {\Gamma \Delta
\Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega \alpha \beta \gamma
\delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu \nu \xi \pi \rho
\sigma \tau \upsilon \phi \chi \psi \omega \varepsilon \vartheta \varpi
\varrho \varsigma \varphi }$
\end{document}
结果: