![\mathrm 和 \mathbf 内的希腊字符会导致输出乱码](https://linux22.com/image/377436/%5Cmathrm%20%E5%92%8C%20%5Cmathbf%20%E5%86%85%E7%9A%84%E5%B8%8C%E8%85%8A%E5%AD%97%E7%AC%A6%E4%BC%9A%E5%AF%BC%E8%87%B4%E8%BE%93%E5%87%BA%E4%B9%B1%E7%A0%81.png)
在一个 TeX 文件中,作者对 和 内的希腊字符进行了编码\mathrm
,\mathbf
如下所示:
$\mathrm{4 km\cdot (0,157+j 0,072)\omega/km}$
当我使用该mtpro2
包时,我获得了以下希腊字符的乱码输出:
是否可以获得正确的渲染输出?
平均能量损失
\documentclass[numbers]{book}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage{mtpro2}
\begin{document}
without \verb+\mathrm -->+
$\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu$ \bigskip
with \verb+ \mathrm -->+
$\mathrm{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$\bigskip
with \verb+ \mathbf -->+
$\mathbf{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$
\end{document}
答案1
我无法测试,因为我没有 mtpro2.sty,但也许这会有所帮助
\documentclass[numbers]{book}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage{mtpro2}
\makeatletter
\@tfor\x:=\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu
\do{\count@\numexpr\x-"7000\relax
\expandafter\mathchardef\x=\count@}
\makeatother
\begin{document}
without \verb+\mathrm -->+
$\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu$ \bigskip
with \verb+ \mathrm -->+
$\mathrm{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$\bigskip
with \verb+ \mathbf -->+
$\mathbf{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$
\end{document}
更新。这是带有智能希腊字母的版本。我无法测试带有粗体数学的 mtpro2。我可以在 overleaf 上测试精简版。
对于完整版本,请取消注释中注释掉的部分\expandafter\edef\x...
。
\documentclass{book}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage[lite]{mtpro2}
\AtBeginDocument{\setbox0\hbox{$\mathrm{\xdef\MATHRMFAM{\the\fam}}%
\mathbf{\xdef\MATHBFFAM{\the\fam}}$}}
\makeatletter
\@tfor\x:=\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu
\do{\edef\y{\expandafter\expandafter\expandafter
\@gobble\expandafter\string\x}%
\expandafter\let\csname ORIG\y\expandafter\endcsname\x
\expandafter\edef\x{\noexpand\ifnum\noexpand\fam=\noexpand\MATHRMFAM\space
\expandafter\noexpand\csname up\y\endcsname
%\noexpand\else
%\noexpand\ifnum\noexpand\fam=\noexpand\MATHBFFAM\space
%\expandafter\noexpand\csname bmup\y\endcsname
\noexpand\else
\expandafter\noexpand\csname ORIG\y\endcsname
\noexpand\fi
%\noexpand\fi
}%
}%
\makeatother
\begin{document}
without \verb+\mathrm -->+
$\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu$ \bigskip
with \verb+ \mathrm -->+
$\mathrm{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$\bigskip
with \verb+ \mathbf -->+
$\mathbf{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}$\bigskip
with \verb+ \mathit -->+
$\mathit{\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\vartheta\iota\kappa\lambda\mu\nu}
\end{document}
在 overleaf 上生成(我甚至没有在我的磁盘上安装 mtpro 的精简版)
测试\mathit
是为了比较。使用完整的 mtpro 并取消注释注释掉的行,您应该可以看到(如果我相信文档中有关宏名称的信息)直立大胆的使用时使用希腊字母\mathbf
。
答案2
这与软件包加载的默认字符集中缺少定义的直立和粗体希腊符号有关mtpro2
。这在相关问题,并提供了解决方案的提示其他。
虽然可能还有其他方法可以解决这个问题,但一种可能的方法是确保有效的直立和粗体希腊字符集都可用,以允许\mathrm
并按\mathbf
预期运行。
实现此目的的一种方法是加载mathdesign
(前 mtpro2
) 和isomath
,使用OMLmathrm
和OMLmathbf
选项(后 mtpro2
),如下所示背页:
\usepackage[utopia]{mathdesign}
\usepackage{mtpro2}
\usepackage[OMLmathrm, OMLmathbf]{isomath}