Usando o símbolo básico \approx com MnSymbol

Usando o símbolo básico \approx com MnSymbol

Quero usar MnSymbol (para obter vários tipos de setas para baixo), mas não gosto do símbolo \approx. Eu gostaria de usar o básico. Tentei usar savesym (como abaixo), mas ainda gera a versão mnsymbol. Alguma sugestão?

\documentclass{article}
\usepackage[english]{babel}

\usepackage{savesym}
\savesymbol{approx}

\usepackage{MnSymbol}

\restoresymbol{approx}{amssymb}

\begin{document}

$\approx$

\end{document}

Editar - Pergunta Adicional

A resposta de @Steven B. Segletes funciona perfeitamente para o problema que eu perguntei. Mas descobri que há vários outros símbolos que gostaria de evitar que MnSymbol mudasse. Então, eu me pergunto se pode haver uma solução vinda de outra direção: podemos evitar que MnSymbol introduza quaisquer novas definições, exceto para os símbolos específicos que queremos adicionar? (Os que eu quero especificamente são \ndownarrow, \ndasheddownarrow e \dasheddownarrow.)

... Agora vejo que @Steven B. Segletes já respondeu isso (Operador AMS-Sum padrão usando MnSymbols?). Mas como eu disse no comentário abaixo, sou totalmente leigo e fico com medo de ver toda essa coisa de mudança de fonte. Portanto, se alguém tiver uma solução diferente, isso seria útil.

Responder1

REVISÃO(por sugestão do GuM)

GuM, que claramente sabe mais sobre o uso de fontes LaTeX do que eu, melhora imensamente minha resposta, vinculando-se à codificação cmsyjá conhecida do LaTeX ( OMS) e, assim, evita a necessidade de declarar uma nova família e formato de fontes. GuM ainda invoca o encantamento certo para fornecer suporte ousado também.

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

insira a descrição da imagem aqui

RESPOSTA ORIGINAL

Aqui, declaro a fonte do símbolo CM ( cmsy, consulte The TeXbook, p. 431) como uma nova família de fontes com \DeclareFontFamily. Então, com \DeclareFontShape, eu digo quais tamanhos de glifos usar, com base no tamanho de ponto desejado (por exemplo, qualquer coisa maior que 12 pontos é uma versão em escala dos cmsy12glifos). Em seguida, declaro uma nova fonte de símbolo Xcmsyque usa a cmsyfamília de fontes. Finalmente, utilizo \DeclareMathSymbolextrair o glifo correto da Xcmsyfonte do símbolo e chamá-lo de \Xapprox. Certifico-me de que ele seja empregado como um \mathreltipo e use slot 25( '031octal, "19hex) daquela fonte Symbol, que corresponde ao \approxsímbolo.

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

insira a descrição da imagem aqui

Responder2

Não há como economizar \approxcom savesym.Nenhum símbolodefinido com \DeclareMathSymbolcan.

O savesympacote podeapenastrabalhar com comandos definidos com \newcommand(desde que o comando não tenha argumento opcional); isso não funcionará se o comando for definido pelos \DeclareRobustCommandmotivos descritos na documentação de letltxmacro(veja tambémhttps://tex.stackexchange.com/a/47372/4427).

Vamos ver o que acontece. Se você usar a sintaxe correta, isso é

\usepackage{savesym}

\show\approx

\savesymbol{approx}
\usepackage{MnSymbol}
\restoresymbol{mn}{approx}

\show\approx
\show\mnapprox

(as \showlinhas são apenas para depuração) você obterá, no terminal,

> \approx=\mathchar"3219.

> \approx=\mathchar"3219.

> \mnapprox=\mathchar"3704.

Em vez disso, mnvocê pode usar qualquer string de sua preferência (para comandos que funcionam com savesym, é claro, não este).

Isso significa que \approxé um símbolo de relação ( 3), da fonte no grupo matemático 2, slot "19.

Porém, quando o documento é iniciado, MnSymbolatribui \U/MnSymbolF/m/n/10a fonte no grupo matemático 2, que corresponde a MnSymbolF10. A parte relevante da tabela de fontes é mostrada aqui:

insira a descrição da imagem aqui

e de fato, seu documento será impresso

insira a descrição da imagem aqui

o que não é muito parecido com um approxsímbolo. Na verdade, MnSymbol.styencontramos

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

que substitui a declaração padrão da symbolsfonte, correspondente ao grupo matemático 2. As atribuições de operatorsao grupo matemático 0, lettersao grupo matemático 1, symbolsao grupo matemático 2 e largesymbolsao grupo matemático 3 são obrigatórias. Posteriormente, a 25ª linha (25 decimal é 19hexadecimal) após a linha 1446 (onde um contador é reinicializado em zero para definir os símbolos da symbolsfonte) foi

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

o que confirma o símbolo “inesperado” que você vê em vez de \approx. Deve ser dito que MnSymbolusa código muito obscuro. Na verdade, conforme mostrado pelo valor de \mnapprox, o símbolo “aproximado” vem MnSymbolda fonte do grupo matemático 7, slot "04.

A única maneira de seguir é com uma \DeclareSymbolFontestratégia conforme descrita na excelente resposta de Steven.

Responder3

Editar:

Eu li os comandos de savesymbol e restaure o símbolo.

Quando você salva o "aprox", então o "origapprox é criado"

Ao restaurar "aprox" pelo comando:

\restore{last}{approx}

então o "aprox" deve se tornar novamente igual ao "origapprox" que foi salvo e "lastapprox" se tornará o último valor de aprox antes da restauração.

Então, se tivermos o próximo código:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{savesym}
\savesymbol{approx}


\usepackage{MnSymbol}

\restoresymbol{UnwantedChanged}{approx}


\begin{document}

$\approx$


$\origapprox$


$\UnwantedChangedapprox$
\end{document}

estamos esperando um approx com o símbolo de MnSymbol um origapprox com o símbolo antes do carregamento de MnSymbol e um UnwantedChangedapprox com MnSymbol carregado

mas o código acima fornece o símbolo aproximado real apenas na última linha.

Ao remover a última linha de impressão e o comando de restauração, vi que o comando savesymbol já havia restaurado o símbolo e estava imprimindo como aproximadamente o antigo aproximadamente e como origaprox o último...

Isso significa que para resolver o seu problema você só precisa remover o comando de restauração... Não sei por que... pode ser que o código no savesym tenha sido alterado e seja restaurado automaticamente após carregar um novo símbolo ou pode ser que o MnSymbol faça isso truque

Resposta antiga: (para entender o primeiro comentário justo de @StevenB.Segletes)

Você escreveu o comando com argumentos opostos. Tentar:

\restoresymbol{approx}{amssymb}

informação relacionada