Espaço que desaparece nas bordas (início/fim) de uma fórmula matemática

Espaço que desaparece nas bordas (início/fim) de uma fórmula matemática

Existe uma maneira de produzir um espaço que desapareça no início ou no final de uma fórmula matemática?

Ideia:Para o caso da fórmula final, algo que olhe para frente ou tenha um argumento obrigatório pode ser um começo. Lembro que comandos cujos argumentos obrigatórios terminam no final de uma fórmula matemática serão alimentados com argumentos vazios.

Alguns exemplos práticos:


Exemplo 1

O quantificador de exclusividade ("existe exatamente um") é frequentemente escrito "∃!".

Por considerações visuais, gostaria que a variável a seguir ficasse um pouco distante do ponto de exclamação, para deixar mais claro que "∃!" é considerado um único token ("token" aqui no sentido de análise em uma linguagem de programação). Posso definir algo como \newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}, mas o espaço de 1.5mupermanece se o símbolo for usado sozinho:

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

quantificador de exclusividade com e sem espaçamento

Aqui, as primeiras linhas de cada par têm espaçamento adicional 1.5muapós o quantificador de exclusividade "∃!", enquanto as segundas linhas de cada par não. Para o primeiro par, o espaçamento adicionado é o desejado; para o segundo par, não parece bom.

Neste exemplo, gostaria de um 1.5muespaço que desaparecesse no final de uma fórmula: a mesma macro deveria produzir as linhas 1 e 4 acima. Talvez exista uma abordagem diferente para "∃!", mas isso serve como um exemplo prático para minha pergunta geral acima.


Exemplo 2

Para as flechas de comprimento intermediário de Heiko Oberdiek

  • \Implies(entre \Rightarrowe \impliesem comprimento)
  • \Impliedby(entre \Leftarrowe \impliedbyem comprimento)
  • \Iff(entre \Leftrightarrowe \iffem comprimento)

definido aqui, a exclusão contextual do espaçamento é desejável em ambos os lados.

Responder1

Esta resposta revisada surgiu ao ver a resposta de egreg emQual é a diferença entre \mathop, \operatorname e \DeclareMathOperator?, onde ele mencionou esta construção:\newcommand{\diff}{\mathop{}\!d}

Na pergunta do OP acima, Werner e egreg fizeram sugestões usando \mathbine \mathop, mas o OP respondeu "Eu também considerei \mathop, mas gostaria de um espaçamento mais estreito."

Então, adotando uma abordagem semelhante a \diff, descobri o seguinte:

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

insira a descrição da imagem aqui

Embora os kerns reais \!possam ser diferentes dos gostos do OP, talvez a abordagem possa ser adaptada aos kerns de sua escolha.


ABORDAGEM ORIGINAL:

Esta solução pode (ou não) fornecer algo que funcione para sua aplicação. Eu apresento a macro \mymathop{op-name}{op-definition}{pre-kern}{post-kern}.

O que ele faz é ver qual token segue o novo "mymathop", no seu caso, \existsunique. Se o que se segue for $, \), ou \egroup, ele imprime a "definição operacional" por si só; caso contrário, ele adiciona o pré e o pós-kern sobre a "op-definição" (como observação lateral, o uso de \@ifnextcharirá engolir quaisquer espaços intermediários entre o "mymathop" e o próximo token).

A \egroupcaptura permite forçar \mymathopa supressão do pré/pós- \kernmesmo no meio de uma fórmula, colocando-a entre colchetes

O MWE abaixo mostra isso em uma fórmula, isolada por si só com dois dos estilos de delimitador, e depois dentro de uma fórmula, isolada, com seu próprio conjunto de colchetes.

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

insira a descrição da imagem aqui

Responder2

Eu penso

\newcommand*{\existsunique}{\thinmuskip=1.5mu\mathop{\exists!}\relax}

faz o que você quer.

Acho que uma solução melhor é

    \makeatletter
     \newcommand*{\existsuniquenew}{\@ifnextchar{\)}{\@end}{%
       \@ifnextchar{$}{\@end}{\not@end}}}
     \def\@end{\exists!\relax}%
     \def\not@end{\exists!\mskip1.5mu\relax}
    \makeatother

informação relacionada