使用基本 \approx 符号和 MnSymbol

使用基本 \approx 符号和 MnSymbol

我想使用 MnSymbol(以获得各种向下箭头),但我不喜欢它的 \approx 符号。我想改用基本符号。我尝试使用 savesym(如下所示),但这仍然输出 mnsymbol 版本。有什么建议吗?

\documentclass{article}
\usepackage[english]{babel}

\usepackage{savesym}
\savesymbol{approx}

\usepackage{MnSymbol}

\restoresymbol{approx}{amssymb}

\begin{document}

$\approx$

\end{document}

编辑-附加问题

@Steven B. Segletes 的答案完全可以解决我提出的问题。但是,我发现还有很多其他符号我想阻止 MnSymbol 改变。所以,我想知道是否有其他解决方案:我们能否阻止 MnSymbol 引入任何新定义,除了我们想要添加的特定符号?(我特别想要的是 \ndownarrow、\ndasheddownarrow 和 \dasheddownarrow。)

...我现在看到@Steven B. Segletes 已经回答了这个问题(使用 MnSymbols 的标准 AMS-Sum 运算符?)。但就像我在下面的评论中说的那样,我完全是个外行,看到所有这些字体变化的东西就害怕。所以如果有人有不同类型的解决方案,那将会很有帮助。

答案1

修订(根据 GuM 的建议)

GuM 显然比我更了解 LaTeX 字体的使用,他通过结合cmsyLaTeX 已知的编码 ( OMS) 极大地改进了我的答案,从而避免了声明新字体系列和形状的需要。GuM 还进一步调用正确的咒语来提供粗体支持。

\documentclass{article}
%\usepackage[english]{babel}
\usepackage{MnSymbol,bm}
\DeclareSymbolFont{Xsymbols}{OMS}{cmsy}{m}{n}
\SetSymbolFont{Xsymbols}{bold}{OMS}{cmsy}{b}{n}
\DeclareMathSymbol{\Xapprox}{\mathrel}{Xsymbols}{25}

\begin{document}
$a\Xapprox b \bm{\Xapprox} c$

$a \approx b \bm{\approx} c$
\end{document}

在此处输入图片描述

原始答案

在这里,我用 将 CM 符号字体(cmsy,参见 The TeXbook,第 431 页)声明为新的字体系列\DeclareFontFamily。然后,用\DeclareFontShape,我根据所需的点大小(例如,任何大于 12 点的都是字形的缩放版本)告诉要使用的字形大小。然后,我声明一个使用该字体系列的cmsy12新符号字体。最后,我使用从符号字体中提取正确的字形并将其命名为。我确保它被用作类型,并且它使用该符号字体的插槽(八进制、十六进制),该插槽与符号相对应。Xcmsycmsy\DeclareMathSymbolXcmsy\Xapprox\mathrel25'031"19\approx

\documentclass{article}
%\usepackage[english]{babel}
\usepackage{MnSymbol}
\DeclareFontFamily{U} {cmsy}{}

\DeclareFontShape{U}{cmsy}{m}{n}{
  <-6> cmsy5
  <6-7> cmsy6
  <7-8> cmsy7
  <8-9> cmsy8
  <9-10> cmsy9
  <10-12> cmsy10
  <12-> cmsy12}{}

\DeclareSymbolFont{Xcmsy} {U} {cmsy}{m}{n}

\DeclareMathSymbol{\Xapprox}{\mathrel}{Xcmsy}{25}
\begin{document}
$a\Xapprox b$

$a \approx b$
\end{document}

在此处输入图片描述

答案2

没有办法\approx保存savesym无符号用 can 定义\DeclareMathSymbol

savesym包可以仅有的使用定义的命令\newcommand(前提是该命令没有可选参数);如果命令定义在,则不会这样做,\DeclareRobustCommand原因在文档中进行了描述letltxmacro(另请参阅https://tex.stackexchange.com/a/47372/4427)。

让我们看看会发生什么。如果你使用正确的语法,那就是

\usepackage{savesym}

\show\approx

\savesymbol{approx}
\usepackage{MnSymbol}
\restoresymbol{mn}{approx}

\show\approx
\show\mnapprox

(这些\show行仅用于调试)你将在终端上看到,

> \approx=\mathchar"3219.

> \approx=\mathchar"3219.

> \mnapprox=\mathchar"3704.

您可以使用任何您更喜欢的字符串来代替mn(对于与 一起使用的命令savesym,当然不是这个)。

这意味着\approx是一个关系符号(3),来自数学组中的字体2,槽"19

然而,文档启动时,MnSymbol会将 分配\U/MnSymbolF/m/n/10给数学组中的字体2,该字体对应于MnSymbolF10。字体表的相关部分如下所示:

在此处输入图片描述

你的文档确实会打印出来

在此处输入图片描述

这不太像一个approx符号。事实上MnSymbol.sty我们发现

\DeclareSymbolFont{symbols}{U}{MnSymbolF}{m}{n}

它将覆盖字体的标准声明symbols,对应于数学组 2。必须将operators数学组 0、letters数学组 1、symbols数学组 2 和数学组 3 赋值。之后,第1446 行(其中计数器被重新初始化为零,用于定义字体中的符号)之后的largesymbols第 25 行(十进制的 25 是十六进制)具有19symbols

\Decl@Mn@Char\dbigdoublecurlywedge{symbols}{\mathop}

这证实了您看到的不是 而是“意外”的符号\approx。必须说MnSymbol使用了非常晦涩难懂的代码。事实上,如 的值所示\mnapprox, 中的“近似”符号MnSymbol来自数学组 7 中的字体,槽"04

唯一的办法就是采用\DeclareSymbolFont史蒂文在精彩回答中描述的策略。

答案3

编辑:

我读了 savesymbol 和 restore symbol 的命令。

当你保存“approx”时,就会创建“origapprox”

当您通过以下命令恢复“approx”时:

\restore{last}{approx}

那么“approx”必须再次变得与已保存的“origapprox”相同,并且“lastapprox”将成为恢复之前大约的最后一个值。

如果我们有下面的代码:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{savesym}
\savesymbol{approx}


\usepackage{MnSymbol}

\restoresymbol{UnwantedChanged}{approx}


\begin{document}

$\approx$


$\origapprox$


$\UnwantedChangedapprox$
\end{document}

我们期望得到一个带有 MnSymbol 符号的近似值、一个带有 MnSymbol 加载前的符号的 origapprox 和一个带有 MnSymbol 加载的 UnwantedChangedapprox

但是上面的代码只在最后一行给出了真正的近似符号。

通过删除最后一行打印和恢复命令,我看到 savesymbol 命令已经恢复了符号,并且正在以旧的近似值和最后一个的 origapprox 形式打印......

这意味着要解决您的问题,您只需删除恢复命令...我不知道为什么...可能是 savesym 中的代码已被更改并在加载新符号后自动恢复,或者可能是 MnSymbol 使用了这个技巧

旧答案:(了解@StevenB.Segletes 的第一个公平评论)

您使用相反的参数编写了命令。请尝试:

\restoresymbol{approx}{amssymb}

相关内容