\mathrm 和 \mathbf 内的希腊字符会导致输出乱码

\mathrm 和 \mathbf 内的希腊字符会导致输出乱码

在一个 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,使用OMLmathrmOMLmathbf选项( mtpro2),如下所示背页

\usepackage[utopia]{mathdesign}

\usepackage{mtpro2}

\usepackage[OMLmathrm, OMLmathbf]{isomath}

相关内容