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 cmsy
já 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}
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 cmsy12
glifos). Em seguida, declaro uma nova fonte de símbolo Xcmsy
que usa a cmsy
família de fontes. Finalmente, utilizo \DeclareMathSymbol
extrair o glifo correto da Xcmsy
fonte do símbolo e chamá-lo de \Xapprox
. Certifico-me de que ele seja empregado como um \mathrel
tipo e use slot 25
( '031
octal, "19
hex) daquela fonte Symbol, que corresponde ao \approx
sí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}
Responder2
Não há como economizar \approx
com savesym
.Nenhum símbolodefinido com \DeclareMathSymbol
can.
O savesym
pacote 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 \DeclareRobustCommand
motivos 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 \show
linhas são apenas para depuração) você obterá, no terminal,
> \approx=\mathchar"3219.
> \approx=\mathchar"3219.
> \mnapprox=\mathchar"3704.
Em vez disso, mn
você 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, MnSymbol
atribui \U/MnSymbolF/m/n/10
a fonte no grupo matemático 2
, que corresponde a MnSymbolF10
. A parte relevante da tabela de fontes é mostrada aqui:
e de fato, seu documento será impresso
o que não é muito parecido com um approx
símbolo. Na verdade, MnSymbol.sty
encontramos
\DeclareSymbolFont{symbols}{U}{MnSymbolF}{m}{n}
que substitui a declaração padrão da symbols
fonte, correspondente ao grupo matemático 2. As atribuições de operators
ao grupo matemático 0, letters
ao grupo matemático 1, symbols
ao grupo matemático 2 e largesymbols
ao grupo matemático 3 são obrigatórias. Posteriormente, a 25ª linha (25 decimal é 19
hexadecimal) após a linha 1446 (onde um contador é reinicializado em zero para definir os símbolos da symbols
fonte) 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 MnSymbol
usa código muito obscuro. Na verdade, conforme mostrado pelo valor de \mnapprox
, o símbolo “aproximado” vem MnSymbol
da fonte do grupo matemático 7, slot "04
.
A única maneira de seguir é com uma \DeclareSymbolFont
estraté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}