我想使用 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
是一個關係符號 ( ),來自數學組slot3
中的字體。2
"19
但是,當文件啟動時,MnSymbol
指派\U/MnSymbolF/m/n/10
給 math group 中的字體2
,該字體對應於MnSymbolF10
.字體表的相關部分如下所示:
事實上,您的文件將會列印
這不太像一個approx
符號。確實在MnSymbol.sty
我們發現
\DeclareSymbolFont{symbols}{U}{MnSymbolF}{m}{n}
它涵蓋了對應於數學組 2 的字體標準symbols
聲明。稍後,第 1446 行之後的第 25 行(十進位 25 是十六進位)(其中計數器重新初始化為零以定義字體中的符號)operators
letters
symbols
largesymbols
19
symbols
\Decl@Mn@Char\dbigdoublecurlywedge{symbols}{\mathop}
這確認了您看到的“意外”符號而不是\approx
。必須說MnSymbol
使用了非常晦澀的程式碼。事實上,如 的值所示\mnapprox
,中的「近似」符號MnSymbol
來自數學組 7 中的字體,插槽"04
。
唯一的方法是採用\DeclareSymbolFont
史蒂文的精彩答案中所描述的策略。
答案3
編輯:
我讀了savesymbol和restore symbol的指令。
當您儲存“近似值”時,就會建立“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}