Palatino 和 Arev 的组合导致数学中的括号错误

Palatino 和 Arev 的组合导致数学中的括号错误

下列的让 mathfont 尊重周围的家庭我正在尝试设置我的文档以根据文本上下文使用 Platino 和 Arev 进行数学运算。不幸的是,当使用 Arev 时,它在数学模式下给了我错误的括号:

在此处输入图片描述

该问题似乎只影响正常大小的括号;方括号和大括号以及更大的括号都可以正常工作。

我该如何设置正确的括号?

代码:

\documentclass{book}

\usepackage{parskip}

\usepackage[scaled=1.15]{newpxtext}
\usepackage[varg,scaled=1.15,cmintegrals]{newpxmath}
\usepackage{letltxmacro}

\usepackage{siunitx}
   \sisetup{detect-all}

\renewcommand{\sfdefault}{fav}

\DeclareMathVersion{arev}

\SetSymbolFont {operators}    {arev} {OT1} {zavm}  {m} {n}
\SetSymbolFont {letters}      {arev} {OML} {zavm}  {m} {it}
\SetSymbolFont {symbols}      {arev} {OMS} {zavm}  {m} {n}
\SetSymbolFont {largesymbols} {arev} {OMX} {mdbch} {m} {n}

\SetMathAlphabet {\mathrm} {arev} {OT1} {zavm} {m} {n}
\SetMathAlphabet {\mathsf} {arev} {OT1} {zavm} {m} {n}
\SetMathAlphabet {\mathit} {arev} {OT1} {zavm} {m} {it}
\SetMathAlphabet {\mathbf} {arev} {OT1} {zavm} {b} {n}
\SetMathAlphabet {\mathtt} {arev} {T1}  {fvm}  {m} {n}

\newif\IfInSansMode
\LetLtxMacro\oldsf\sffamily
\renewcommand*{\sffamily}{\oldsf\mathversion{arev}\InSansModetrue}
\LetLtxMacro\oldrm\rmfamily
\renewcommand*{\rmfamily}{\oldrm\InSansModefalse\mathversion{normal}}

\newcommand{\TestText}{%
   $\{[(a+b)]\} = \left(\frac{c-d}{e+f}\right)$ (Text-Mode)
}

\begin{document}
\TestText

\sffamily
\TestText
\end{document}

答案1

newtxmath 重新定义分隔符:

\DeclareMathDelimiter{(}{\mathopen}{lettersA}{125}{largesymbols}{0}
\DeclareMathDelimiter{)}{\mathclose}{lettersA}{126}{largesymbols}{1}

因此您对操作员/字母字体的更改不会影响它们。

您可以重置它们,但只能全局重置,因为\DeclareMathDelimiter只能在序言中使用。如果您想使用文本字体中的括号,可以尝试\SetSymbolFont {operators} {arev} {T1} {fav} {m} {n}

\documentclass{book}

\usepackage{parskip}

\usepackage[scaled=1.15]{newpxtext}
\usepackage[varg,scaled=1.15,cmintegrals]{newpxmath}

\renewcommand{\sfdefault}{fav}

\DeclareMathVersion{arev}

\SetSymbolFont {operators}    {arev} {OT1} {zavm}  {m} {n}
\SetSymbolFont {letters}      {arev} {OML} {zavm}  {m} {it}
\SetSymbolFont {symbols}      {arev} {OMS} {zavm}  {m} {n}
\SetSymbolFont {largesymbols} {arev} {OMX} {mdbch} {m} {n}

\DeclareMathDelimiter{(}{\mathopen} {operators}{"28}{largesymbols}{"00}
\DeclareMathDelimiter{)}{\mathclose}{operators}{"29}{largesymbols}{"01}

\begin{document}

\sffamily 
$\bigg ((a+b)$ (Text-mode)

\mathversion{arev}
$\bigg ((a+b)$ (Text-mode)
\end{document}

在此处输入图片描述

答案2

数学arev字体使用标准 LaTeX 数学代码,但newpxmath更改了其中一些。

我按照括号操作,您可能希望以类似的方式添加其他代码。我还习惯于xpatch简化修补\rmfamily\sffamily

\documentclass{book}

% store the necessary standard codes
\edef\latexmathcodelparen{\the\mathcode`(\relax}
\edef\latexdelcodelparen{\the\delcode`(\relax}
\edef\latexmathcoderparen{\the\mathcode`)\relax}
\edef\latexdelcoderparen{\the\delcode`)\relax}

\usepackage[scaled=1.15]{newpxtext}
\usepackage[varg,scaled=1.15,cmintegrals]{newpxmath}
\usepackage{letltxmacro,xpatch}

\usepackage{siunitx}
   \sisetup{detect-all}

\renewcommand{\sfdefault}{fav}

% store the codes from newpxmath
\edef\pxmathcodelparen{\the\mathcode`(\relax}
\edef\pxmathcoderparen{\the\mathcode`)\relax}
\edef\pxdelcodelparen{\the\delcode`(\relax}
\edef\pxdelcoderparen{\the\delcode`)\relax}

\DeclareMathVersion{arev}

\SetSymbolFont {operators}    {arev} {OT1} {zavm}  {m} {n}
\SetSymbolFont {letters}      {arev} {OML} {zavm}  {m} {it}
\SetSymbolFont {symbols}      {arev} {OMS} {zavm}  {m} {n}
\SetSymbolFont {largesymbols} {arev} {OMX} {mdbch} {m} {n}

\SetMathAlphabet {\mathsf} {arev} {OT1} {zavm} {m} {n}
\SetMathAlphabet {\mathit} {arev} {OT1} {zavm} {m} {it}
\SetMathAlphabet {\mathbf} {arev} {OT1} {zavm} {b} {n}
\SetMathAlphabet {\mathtt} {arev} {T1}  {fvm}  {m} {n}

\newif\IfInSansMode
\xapptocmd\sffamily{%
  \mathversion{arev}%
  \InSansModetrue
  % restore the standard codes
  \mathcode`(=\latexmathcodelparen
  \mathcode`)=\latexmathcoderparen
  \delcode`(=\latexdelcodelparen
  \delcode`)=\latexdelcoderparen
}{}{}
\xapptocmd\rmfamily{%
  \InSansModefalse
  \mathversion{normal}%
  % restore the newpxmath codes
  \mathcode`(=\pxmathcodelparen
  \mathcode`)=\pxmathcoderparen
  \delcode`(=\pxmathcodelparen
  \delcode`)=\pxmathcoderparen
}{}{}

\newcommand{\TestText}{%
   $\{[(a+b)]\} = \left(\frac{c-d}{e+f}\right)$ (Text-Mode)
}

\begin{document}
\TestText

\sffamily
\TestText
\end{document}

在此处输入图片描述

这是一份支票文件

\documentclass{article}
\usepackage{arevtext,arevmath}
\begin{document}

$\{[(a+b)]\} = \left(\frac{c-d}{e+f}\right)$ (Text-Mode)

\end{document}

在此处输入图片描述

相关内容