將基本 \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)來告訴要使用哪些字形大小。然後我聲明一個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 是十六進位)(其中計數器重新初始化為零以定義字體中的符號)operatorsletterssymbolslargesymbols19symbols

\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}

相關內容