%20de%20uma%20f%C3%B3rmula%20matem%C3%A1tica.png)
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.5mu
permanece 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}
Aqui, as primeiras linhas de cada par têm espaçamento adicional 1.5mu
apó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.5mu
espaç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\Rightarrow
e\implies
em comprimento)\Impliedby
(entre\Leftarrow
e\impliedby
em comprimento)\Iff
(entre\Leftrightarrow
e\iff
em 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 \mathbin
e \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}
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 \@ifnextchar
irá engolir quaisquer espaços intermediários entre o "mymathop" e o próximo token).
A \egroup
captura permite forçar \mymathop
a supressão do pré/pós- \kern
mesmo 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}
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