\documentclass{report}
\usepackage{savesym}
\savesymbol{bot}
\usepackage{MnSymbol}
\restoresymbol{MN}{bot}
\begin{document}
sda $\bot$
\end{document}
这产生了
而不是(评论时\usepackage{MnSymbol}
)
我很困惑。我的目标是使用标准\bot
符号,同时也使用 中的几个符号MnSymbol
。
然而:\MNbot
正确显示了来自的机器人符号MnSymbol
。
\origbot
然而显示了相同但错误的符号\bot
编辑/对答案进行评论:对于像我这样的新手来说,@egreg 和 @cfr 的答案之间的主要区别在于,@egreg 的答案使用所有标准符号加上\bot
来自的符号MnSymbol
,而 @cfr 的答案使用来自的所有符号MnSymbol
加上标准\bot
符号。根据您的使用情况,两者都能很好地工作。
答案1
让我们看看\savesymbol{bot}
该做什么\restoresymbol{MN}{bot}
。
前者本质上是先定义\let\origbot=\bot
,然后取消定义\bot
。后者
\global\let\MNbot=\bot
\global\let\bot=\origbot
这可能有时有效,但绝对不行MnSymbol
,抱歉。为什么?如果你尝试
\show\bot
\show\MNbot
重新定义后,你会看到
> \bot=\mathchar"23F.
> \MNbot=\mathchar"696.
您\bot
可以获得数学系列 2 中字体插槽中的任何字符"3F
,但该字符恰好不是预期的符号:
MnSymbol
不使用符号的标准编码;MnSymbol
变化每一个数学符号。
通过您的设置您可以获得全部来自的数学符号MnSymbol
,除了\bot
显示错误的符号(和来自的MnSymbol
)。
我们来看一个例子:
\documentclass{report}
\usepackage{savesym}
\savesymbol{bot}
\usepackage{MnSymbol}
\restoresymbol{MN}{bot}
\begin{document}
sda $\bot$
Arrow $\rightarrow$ and integral $\int$
\end{document}
如果删除第 2 至第 5 行,输出将是
所以你的目标是“使用标准\bot
符号,同时也使用来自 MnSymbol 的几个符号”肯定是无法实现的。
假设你想使用 中的“底部”符号MnSymbol
。查看内部MnSymbol.sty
我们发现
\Decl@Mn@Char\bot {MnSyC}{\mathord}
这很神秘,因为它没有告诉我们符号位于哪个位置。但我们可以通过运行
\documentclass{article}
\usepackage{MnSymbol}
\ShowCommand{\bot}
\stop
将会显示
> \bot=\mathchar"696.
我们对最后两位数字感兴趣。现在我们必须寻找MnSyC
:
\DeclareSymbolFont{MnSyC} {U} {MnSymbolC}{m}{n}
\SetSymbolFont{MnSyC} {bold}{U} {MnSymbolC}{b}{n}
我们回去寻找MnSymbolC
,得到
\DeclareFontFamily{U} {MnSymbolC}{}
\DeclareFontShape{U}{MnSymbolC}{m}{n}{
<-6> MnSymbolC5
<6-7> MnSymbolC6
<7-8> MnSymbolC7
<8-9> MnSymbolC8
<9-10> MnSymbolC9
<10-12> MnSymbolC10
<12-> MnSymbolC12}{}
\DeclareFontShape{U}{MnSymbolC}{b}{n}{
<-6> MnSymbolC-Bold5
<6-7> MnSymbolC-Bold6
<7-8> MnSymbolC-Bold7
<8-9> MnSymbolC-Bold8
<9-10> MnSymbolC-Bold9
<10-12> MnSymbolC-Bold10
<12-> MnSymbolC-Bold12}{}
因此,如果您想使用“底部”符号MnSymbol
以及标准符号,您需要
\documentclass{report}
\DeclareFontFamily{U}{MnSymbolC}{}
\DeclareFontShape{U}{MnSymbolC}{m}{n}{
<-6> MnSymbolC5
<6-7> MnSymbolC6
<7-8> MnSymbolC7
<8-9> MnSymbolC8
<9-10> MnSymbolC9
<10-12> MnSymbolC10
<12-> MnSymbolC12}{}
\DeclareFontShape{U}{MnSymbolC}{b}{n}{
<-6> MnSymbolC-Bold5
<6-7> MnSymbolC-Bold6
<7-8> MnSymbolC-Bold7
<8-9> MnSymbolC-Bold8
<9-10> MnSymbolC-Bold9
<10-12> MnSymbolC-Bold10
<12-> MnSymbolC-Bold12}{}
\DeclareSymbolFont{MnSyC}{U}{MnSymbolC}{m}{n}
\SetSymbolFont{MnSyC}{bold}{U}{MnSymbolC}{b}{n}
\DeclareMathSymbol{\MNbot}{\mathord}{MnSyC}{"96}
\begin{document}
Standard $\bot$ and MnSymbol $\MNbot$
Arrow $\rightarrow$ and integral $\int$
\end{document}
是的,不会少于这个。请注意,最后一张图中的其他符号是标准符号(如上面第二张图所示)。
答案2
它节省了符号的字符位置,因此如果字体编码和字体系列相同,\bot
将产生原始符号。但是,当然,加载MnSymbols
会改变数学字体配置,因此系列会不一样。此外,在这种情况下,编码也不相同。因此,您不仅会从错误的字体系列中获得字符,还会从错误的字体系列中获得错误的字符。
但是,您可以进行设置,以便使用您喜欢的命令访问这两个符号。例如,
\documentclass{report}
\usepackage{MnSymbol}
\let\MNbot\bot
\DeclareSymbolFont{origsymbols} {OMS}{cmsy}{m}{n}
\DeclareMathSymbol{\bot}{\mathord}{origsymbols}{"3F}
\begin{document}
sda $\bot \MNbot$
\end{document}
输出图像:
[如果有人有他们喜欢的堆叠窗口管理器,最好是基于 QT 的,但不是kwin
,请告诉我。我已经受够了 KDE - 而且我已经使用 KDE 十多年了。]