Espacio que desaparece en los bordes (principio/final) de una fórmula matemática

Espacio que desaparece en los bordes (principio/final) de una fórmula matemática

¿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.5mupermanece 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}

cuantificador de unicidad con y sin espacio

Aquí las primeras líneas de cada par tienen un espacio adicional 1.5mudespué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.5muespacio 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 \Rightarrowy \impliesde largo)
  • \Impliedby(entre \Leftarrowy \impliedbyde largo)
  • \Iff(entre \Leftrightarrowy \iffde 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 \mathbiny \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}

ingrese la descripción de la imagen aquí

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 \@ifnextchartragará cualquier espacio intermedio entre "mymathop" y el siguiente token).

El \egroupbloqueo permite forzar \mymathopla supresión del pre/post \kernincluso 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}

ingrese la descripción de la imagen aquí

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

información relacionada