我想使用 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 字体的使用,他通过结合cmsy
LaTeX 已知的编码 ( 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
新符号字体。最后,我使用从符号字体中提取正确的字形并将其命名为。我确保它被用作类型,并且它使用该符号字体的插槽(八进制、十六进制),该插槽与符号相对应。Xcmsy
cmsy
\DeclareMathSymbol
Xcmsy
\Xapprox
\mathrel
25
'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 是十六进制)具有19
symbols
\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}