MnSymbolで基本的な\approxシンボルを使用する

MnSymbolで基本的な\approxシンボルを使用する

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の提案により)

明らかに私よりも LaTeX フォントの使用法に詳しい GuM は、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、p. 431 を参照) を新しいフォント ファミリとして宣言します\DeclareFontFamily。次に、 を使って\DeclareFontShape、必要なポイント サイズに基づいて、使用するグリフ サイズを指定します (たとえば、12 ポイントより大きいものはすべて、グリフの拡大バージョンです)。次に、フォント ファミリを使用するcmsy12新しいシンボル フォントを宣言します。最後に、 を使用して、シンボル フォントから適切なグリフを抽出し、 と呼びます。これがタイプとして使用され、シンボルに対応するそのシンボル フォントのスロット( 8 進数、16 進数)を使用していることを確認します。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コマンドが で定義されている場合は動作しません(\DeclareRobustCommandletltxmacrohttps://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関係記号 ( ) であることを意味します。32"19

ただし、ドキュメントが開始されると、は に対応する数式グループ のフォント をMnSymbol割り当てます。フォント テーブルの関連部分を以下に示します。\U/MnSymbolF/m/n/102MnSymbolF10

ここに画像の説明を入力してください

そして実際に、あなたの文書は印刷されます

ここに画像の説明を入力してください

これはシンボルとは似ても似つかないapproxMnSymbol.sty

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

これは、フォントの標準宣言を上書きし、数式グループ2に対応します。の、数式グループ0、数式グループ1、数式グループ2、数式グループ3へsymbolsの割り当ては必須です。その後、1446行目(フォントのシンボルを定義するためにカウンタがゼロに再初期化される)の後の25行目(10進数の25は16進数)には、operatorsletterssymbolslargesymbols19symbols

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

これは、 の代わりに表示される「予期しない」記号を裏付けています\approx。 は非常にわかりにくいコードを使用していると言わざるを得ません。MnSymbol実際、 の値で示されるように\mnapprox、 の「近似」記号は、MnSymbol数式グループ 7、スロット のフォントからのものです"04

唯一の方法は、\DeclareSymbolFontSteven の素晴らしい回答に記載されている戦略を実行することです。

答え3

編集:

savesymbol と restore symbol のコマンドを読み取ります。

「approx」を保存すると、「origapprox」が作成されます

次のコマンドで「approx」を復元すると:

\restore{last}{approx}

すると、「approx」は保存された「origapprox」と同じになり、「lastapprox」は復元前の approx の最後の値になります。

したがって、次のコードがあるとします。

\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 コマンドによってすでにシンボルが復元されており、古い approx を approx として、最後の approx を origapprox として印刷していることがわかりました...

つまり、問題を解決するには、復元コマンドを削除するだけで済みます...理由はわかりません... savesym のコードが変更され、新しいシンボルをロードした後に自動的に復元されるか、MnSymbol がこのトリックを実行する可能性があります。

古い回答: (@StevenB.Segletes の最初の - 公平な - コメントを理解するため)

反対の引数でコマンドを記述しました。次を試してください:

\restoresymbol{approx}{amssymb}

関連情報