Использование базового символа \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's answer отлично подходит для проблемы, которую я задал. Но я обнаружил, что есть куча других символов, которые я хотел бы запретить MnSymbol менять. Поэтому мне интересно, может ли быть решение с другой стороны: можем ли мы запретить MnSymbol вводить какие-либо новые определения, кроме тех конкретных символов, которые мы хотим добавить? (Те, которые мне особенно нужны, это \ndownarrow, \ndasheddownarrow и \dasheddownarrow.)

...Теперь я вижу, что @Steven B. Segletes уже ответил на этот вопрос (Стандартный оператор AMS-Sum с использованием MnSymbols?). Но как я уже сказал в комментарии ниже, я полный профан и мне страшно смотреть на все эти изменения шрифтов. Так что если у кого-то есть решение иного рода, это было бы полезно.

решение1

ПЕРЕСМОТР(по предложению ГУМ)

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 symbol ( cmsy, см. The TeXbook, стр. 431) как новое семейство шрифтов с \DeclareFontFamily. Затем с помощью \DeclareFontShapeя сообщаю, какие размеры глифов использовать, исходя из желаемого размера точки (например, все, что больше 12 точек, является масштабированной версией глифов cmsy12). Затем я объявляю новый шрифт symbol Xcmsy, который использует cmsyсемейство шрифтов. Наконец, я использую \DeclareMathSymbolдля извлечения правильного глифа из Xcmsyшрифта symbol и вызываю его \Xapprox. Я убеждаюсь, что он используется как \mathrelтип, и он использует слот 25( '031восьмеричный, "19шестнадцатеричный) этого шрифта Symbol, который соответствует символу \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.Нет символаопределяется с помощью \DeclareMathSymbolcan.

Пакет 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 и largesymbolsматематической группе 3 являются обязательными. Позже, 25-я строка (25 десятичная — 19шестнадцатеричная) после строки 1446 (где счетчик повторно инициализируется нулем для определения символов из symbolsшрифта) имеет

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

что подтверждает «неожиданный» символ, который вы видите вместо \approx. Надо сказать, что MnSymbolиспользует очень непонятный код. Действительно, как показывает значение \mnapprox, символ «approximates» в MnSymbolвзят из шрифта в математической группе 7, слот "04.

Единственный выход — это стратегия \DeclareSymbolFont, описанная в прекрасном ответе Стивена.

решение3

Редактировать:

Я прочитал команды сохранения символа и восстановления символа.

Когда вы сохраняете «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}

мы ожидаем approx с символом MnSymbol origapprox с символом до загрузки MnSymbol и UnwantedChangedapprox с загруженным MnSymbol

но приведенный выше код дает настоящий символ приближения только в последней строке.

Удалив последнюю строку печати и команду восстановления, я увидел, что команда savesymbol уже восстановила символ и печатает как approx старый approx и как origapprox последний...

Это значит, что для решения вашей проблемы вам нужно просто удалить команду восстановления... Я не знаю, почему... может быть, код в savesym был изменен и восстанавливается автоматически после загрузки нового символа, или, может быть, MnSymbol делает этот трюк.

Старый ответ: (чтобы понять первый -справедливый- комментарий @StevenB.Segletes)

Вы написали команду с противоположными аргументами. Попробуйте:

\restoresymbol{approx}{amssymb}

Связанный контент