Quiero usar MnSymbol (para obtener varios tipos de flechas hacia abajo), pero no me gusta su símbolo \approx. Me gustaría usar el básico en su lugar. Intenté usar savesym (como se muestra a continuación), pero aún genera la versión mnsymbol. ¿Alguna sugerencia?
\documentclass{article}
\usepackage[english]{babel}
\usepackage{savesym}
\savesymbol{approx}
\usepackage{MnSymbol}
\restoresymbol{approx}{amssymb}
\begin{document}
$\approx$
\end{document}
Editar - Pregunta adicional
La respuesta de @Steven B. Segletes funciona perfectamente para el problema tal como lo pregunté. Pero descubrí que hay muchos otros símbolos que me gustaría evitar que MnSymbol cambie. Entonces, me pregunto si podría haber una solución proveniente de la otra dirección: ¿podemos evitar que MnSymbol introduzca nuevas definiciones excepto los símbolos específicos que queremos agregar? (Los que quiero específicamente son \ndownarrow, \ndasheddownarrow y \dasheddownarrow).
...Ahora veo que @Steven B. Segletes ya respondió esto (¿Operador estándar AMS-Sum que utiliza MnSymbols?). Pero como dije en un comentario a continuación, soy un completo profano y me asusta ver todo este cambio de fuente. Entonces, si alguien tiene una solución de otro tipo, sería útil.
Respuesta1
REVISIÓN(por sugerencia de GuM)
GuM, que claramente sabe más que yo sobre el uso de fuentes LaTeX, mejora enormemente mi respuesta al vincularla a la codificación cmsy
ya conocida por LaTeX ( OMS
) y así evita la necesidad de declarar una nueva familia de fuentes y forma. GuM también menciona el encantamiento correcto para brindar un apoyo audaz.
\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}
RESPUESTA ORIGINAL
Aquí, declaro la fuente del símbolo CM ( cmsy
, ver The TeXbook, p. 431) como una nueva familia de fuentes con \DeclareFontFamily
. Luego, con \DeclareFontShape
, digo qué tamaños de glifo usar, según el tamaño de punto deseado (por ejemplo, cualquier cosa mayor que 12 puntos es una versión escalada de los cmsy12
glifos). Luego declaro una nueva fuente de símbolo Xcmsy
que utiliza la cmsy
familia de fuentes. Finalmente, utilizo \DeclareMathSymbol
para extraer el glifo correcto de la Xcmsy
fuente del símbolo y lo llamo \Xapprox
. Me aseguro de que se emplee como \mathrel
tipo y que utilice la ranura 25
( '031
octal, "19
hexadecimal) de esa fuente de símbolo, que corresponde al \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}
Respuesta2
No hay forma de ahorrar \approx
consavesym
.Sin símbolodefinido con \DeclareMathSymbol
lata.
Elsavesym
paquete puedesolotrabajar con comandos definidos con \newcommand
(siempre que el comando no tenga un argumento opcional); no funcionará si el comando está definido \DeclareRobustCommand
por los motivos descritos en la documentación de letltxmacro
(ver tambiénhttps://tex.stackexchange.com/a/47372/4427).
Veamos qué pasa. Si utiliza la sintaxis correcta, es decir
\usepackage{savesym}
\show\approx
\savesymbol{approx}
\usepackage{MnSymbol}
\restoresymbol{mn}{approx}
\show\approx
\show\mnapprox
(las \show
líneas son solo para depurar) obtendrá, en la terminal,
> \approx=\mathchar"3219.
> \approx=\mathchar"3219.
> \mnapprox=\mathchar"3704.
En su lugar, mn
puede usar cualquier cadena que le guste más (para comandos que funcionan con savesym
, por supuesto, no con esta).
Esto significa que \approx
es un símbolo de relación ( 3
), de la fuente del grupo matemático 2
, slot "19
.
Sin embargo, cuando se inicia el documento, MnSymbol
se asigna \U/MnSymbolF/m/n/10
a la fuente en el grupo matemático 2
, que corresponde a MnSymbolF10
. La parte relevante de la tabla de fuentes se muestra aquí:
y de hecho, su documento se imprimirá
que no se parece mucho a un approx
símbolo. De hecho en MnSymbol.sty
encontramos
\DeclareSymbolFont{symbols}{U}{MnSymbolF}{m}{n}
que anula la declaración estándar para la symbols
fuente, correspondiente al grupo matemático 2. Las asignaciones del operators
grupo matemático 0, letters
al grupo matemático 1, symbols
al grupo matemático 2 y largesymbols
al grupo matemático 3 son obligatorias. Más adelante, la línea 25 (25 decimal es 19
hexadecimal) después de la línea 1446 (donde un contador se reinicia a cero para definir los símbolos de la symbols
fuente) tiene
\Decl@Mn@Char\dbigdoublecurlywedge{symbols}{\mathop}
lo que confirma el símbolo "inesperado" que ves en lugar de \approx
. Hay que decir que MnSymbol
utiliza un código muy oscuro. De hecho, como lo muestra el valor de \mnapprox
, el símbolo "aproximado" proviene MnSymbol
de la fuente del grupo matemático 7, ranura "04
.
El único camino a seguir es con una \DeclareSymbolFont
estrategia como la que se describe en la excelente respuesta de Steven.
Respuesta3
Editar:
Leí los comandos de savesymbol y restaurar símbolo.
Cuando guarda el "aprox", se crea el "origapprox"
Cuando restaura "aprox" con el comando:
\restore{last}{approx}
entonces "approx" debe volver a ser el mismo que "origapprox" que se guardó y "lastapprox" se convertirá en el último valor de approx antes de restaurar.
Entonces si tenemos el siguiente 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 un approx con el símbolo de MnSymbol un origapprox con el símbolo antes de la carga de MnSymbol y un UnwantedChangedapprox con MnSymbol cargado
pero el código anterior proporciona el símbolo aproximado real solo en la última fila.
Al eliminar la última línea de impresión y el comando de restauración, vi que el comando savesymbol ya había restaurado el símbolo y estaba imprimiendo como aprox el antiguo approx y como origapprox el último...
Esto significa que para resolver tu problema solo tienes que eliminar el comando de restauración... No sé por qué... puede ser que el código en savesym haya sido cambiado y se restaure automáticamente después de cargar un nuevo símbolo o puede ser que MnSymbol haga esto truco
Respuesta anterior: (para entender el primer comentario -justo- de @ StevenB.Segletes)
Escribiste el comando con argumentos opuestos. Intentar:
\restoresymbol{approx}{amssymb}