下列的让 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}