%20de%20una%20f%C3%B3rmula%20matem%C3%A1tica.png)
¿Hay alguna manera de producir un espacio que desaparezca al principio o al final de una fórmula matemática?
Idea:Para el caso de la fórmula final, algo que mire hacia el futuro o adopte un argumento obligatorio podría ser un comienzo. Recuerdo que los comandos cuyos argumentos obligatorios terminan al final de una fórmula matemática recibirán argumentos vacíos.
Algunos ejemplos prácticos:
Ejemplo 1
El cuantificador de unicidad ("existe exactamente uno") a menudo se escribe "¡∃!".
Por consideraciones visuales, me gustaría que la siguiente variable estuviera un poco alejada del signo de exclamación, para que quede más claro que "∃!" se considera un token único ("token" aquí en el sentido de análisis en un lenguaje de programación). Puedo definir algo como \newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}
, pero el espacio de 1.5mu
permanece si el símbolo se usa solo:
\documentclass{article}
\usepackage{amsmath} % better spacing behavior for \colon
\usepackage{dsfont}
\newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}
\begin{document}
% spacing (1.5mu) as desired
\(\forall x \in \mathds{R}^{+}_{0} \colon
\existsunique y \in \mathds{R}^{+}_{0} \colon
y^2 = x\)
% spacing (0mu) too tight
\(\forall x \in \mathds{R}^{+}_{0} \colon
\exists! y \in \mathds{R}^{+}_{0} \colon
y^2 = x\)
% spacing (1.5mu) superfluous
The quantifier \(\existsunique\) means ``there is exactly one''.
% spacing (0mu) as desired
The quantifier \(\exists!\) means ``there is exactly one''.
\end{document}
Aquí las primeras líneas de cada par tienen un espacio adicional 1.5mu
después del cuantificador de unicidad "∃!", mientras que las segundas líneas de cada par no. Para el primer par, el espacio agregado es el deseado; Para el segundo par, no se ve bien.
En este ejemplo, me gustaría que un 1.5mu
espacio desapareciera al final de una fórmula: la misma macro debería producir las líneas 1 y 4 anteriores. Quizás haya un enfoque diferente para "∃!", pero esto sirve como un ejemplo práctico de mi pregunta general anterior.
Ejemplo 2
Para las flechas de longitud intermedia de Heiko Oberdiek
\Implies
(entre\Rightarrow
y\implies
de largo)\Impliedby
(entre\Leftarrow
y\impliedby
de largo)\Iff
(entre\Leftrightarrow
y\iff
de largo)
definido aquí, es deseable la eliminación contextual del espaciado en ambos lados.
Respuesta1
Esta respuesta revisada surgió al ver la respuesta de egreg en¿Cuál es la diferencia entre \mathop, \operatorname y \DeclareMathOperator?, donde mencionó esta construcción:\newcommand{\diff}{\mathop{}\!d}
En la pregunta anterior del OP, Werner y egreg hicieron sugerencias usando \mathbin
y \mathop
, pero el OP respondió "También lo consideré \mathop
, pero me gustaría un espacio más estrecho".
Entonces, tomando un rumbo similar a \diff
, se me ocurrió esto:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{dsfont}
\usepackage[usestackEOL]{stackengine}
\def\stackalignment{l}
\def\showall{~\fbox{\Longstack{
\text{\detokenize\expandafter{\existsunique}}\\
A \colon \existsunique y \\
\fboxsep0pt\fbox{$\existsunique$}\\
A \colon {\existsunique} y
}~}\par}
\begin{document}
\savestack{\Header}{\Longstack{Definition:\\within math:\\boxed:\\brace-isolated:}}
\stackMath
\Header\def\existsunique{\exists!}\showall
\Header\def\existsunique{\exists!\mathop{}\!}\showall
\Header\def\existsunique{\mathop{}\!\exists!\mathop{}\!}\showall
\end{document}
Si bien los kerns reales \!
pueden ser diferentes a los gustos del OP, tal vez el enfoque podría adaptarse a los kerns de su elección.
ENFOQUE ORIGINAL:
Esta solución puede (o no) brindarle algo que funcione para su aplicación. Les presento la macro \mymathop{op-name}{op-definition}{pre-kern}{post-kern}
.
Lo que hace es mirar qué token sigue al nuevo "mymathop", en tu caso, \existsunique
. Si lo que sigue es $
, \)
o \egroup
, imprime la "definición de operación" por sí mismo; de lo contrario, agrega el kern previo y posterior sobre la "definición de operación" (como nota al margen, el uso de \@ifnextchar
tragará cualquier espacio intermedio entre "mymathop" y el siguiente token).
El \egroup
bloqueo permite forzar \mymathop
la supresión del pre/post \kern
incluso en medio de una fórmula, encerrándolo entre llaves.
El MWE a continuación lo muestra en una fórmula, encuadrada sola con dos de los estilos de delimitador, y luego dentro de una fórmula, aislada, con su propio conjunto de llaves.
\documentclass{article}
\usepackage{amsmath}
\usepackage{dsfont}
\makeatletter
\def\mymathop#1#2#3#4{%
\def#1{\@ifnextchar${#2}{\@ifnextchar\){#2}{\@ifnextchar\egroup{#2}{\kern#3#2\kern#4}}}}
}
\makeatother
\mymathop{\existsunique}{\exists!}{0pt}{3pt}
\begin{document}
\(\forall x \in \mathds{R}^{+}_{0} \colon
\existsunique y \in \mathds{R}^{+}_{0} \colon
y^2 = x\)
\fboxsep0pt\fbox{$\existsunique $} \fbox{\(\existsunique \)}
\(\forall x \in \mathds{R}^{+}_{0} \colon
{\existsunique} y \in \mathds{R}^{+}_{0} \colon
y^2 = x\)
\end{document}
Respuesta2
Creo
\newcommand*{\existsunique}{\thinmuskip=1.5mu\mathop{\exists!}\relax}
hace lo que quieres.
Creo que una mejor solución es
\makeatletter
\newcommand*{\existsuniquenew}{\@ifnextchar{\)}{\@end}{%
\@ifnextchar{$}{\@end}{\not@end}}}
\def\@end{\exists!\relax}%
\def\not@end{\exists!\mskip1.5mu\relax}
\makeatother