Leerzeichen, die an den Rändern (Anfang/Ende) einer mathematischen Formel verschwinden

Leerzeichen, die an den Rändern (Anfang/Ende) einer mathematischen Formel verschwinden

Gibt es eine Möglichkeit, ein Leerzeichen zu erzeugen, das am Anfang oder Ende einer mathematischen Formel verschwindet?

Idee:Für den Fall, dass die Formel endet, könnte etwas, das vorausschaut oder ein obligatorisches Argument annimmt, ein Anfang sein. Ich erinnere mich, dass Befehle, deren obligatorische Argumente am Ende einer mathematischen Formel enden, mit leeren Argumenten gefüttert werden.

Einige praktische Beispiele:


Beispiel 1

Der Eindeutigkeitsquantifikator („es gibt genau einen“) wird oft „∃!“ geschrieben.

Aus optischen Gründen möchte ich die folgende Variable etwas vom Ausrufezeichen entfernt haben, um deutlicher zu machen, dass "∃!" als einzelnes Token betrachtet wird (wobei "Token" hier im Sinne der Analyse in einer Programmiersprache verwendet wird). Ich kann etwas wie definieren \newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}, aber das Leerzeichen von 1.5mubleibt erhalten, wenn das Symbol allein verwendet wird:

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

Eindeutigkeitsquantifikator mit und ohne Leerzeichen

Hier haben die ersten Zeilen jedes Paares nach dem Eindeutigkeitsquantifikator „∃!“ zusätzlichen Abstand 1.5mu, während die zweiten Zeilen jedes Paares keinen haben. Beim ersten Paar ist der zusätzliche Abstand wie gewünscht; beim zweiten Paar sieht er nicht gut aus.

In diesem Beispiel hätte ich gerne ein 1.5muLeerzeichen, das am Ende einer Formel verschwindet: Das gleiche Makro sollte die Zeilen 1 und 4 oben erzeugen. Vielleicht gibt es einen anderen Ansatz für „∃!“, aber dies dient als praktisches Beispiel für meine allgemeine Frage oben.


Beispiel 2

Für Heiko Oberdieks Pfeile mittlerer Länge

  • \Implies(zwischen \Rightarrowund \impliesin der Länge)
  • \Impliedby(zwischen \Leftarrowund \impliedbyin der Länge)
  • \Iff(zwischen \Leftrightarrowund \iffin der Länge)

hier definiert, kontextuelle Löschung von Leerzeichen ist auf beiden Seiten wünschenswert.

Antwort1

Diese überarbeitete Antwort entstand aus der Betrachtung von egregs Antwort unterWas ist der Unterschied zwischen \mathop, \operatorname und \DeclareMathOperator?, wo er dieses Konstrukt erwähnte:\newcommand{\diff}{\mathop{}\!d}

In der obigen Frage des OP machten Werner und egreg Vorschläge zur Verwendung von \mathbinund \mathop, aber der OP antwortete: „Ich habe auch überlegt \mathop, aber ich hätte gerne einen engeren Abstand.“

Ich habe also einen ähnlichen Ansatz gewählt wie \diffund bin auf Folgendes gekommen:

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

Bildbeschreibung hier eingeben

Auch wenn die tatsächlichen \!Kerne vom Geschmack des OP abweichen können, könnte der Ansatz vielleicht an Kerne seiner Wahl angepasst werden.


URSPRÜNGLICHER ANSATZ:

Diese Lösung kann (muss aber nicht) zu etwas führen, das für Ihre Anwendung funktioniert. Ich stelle das Makro vor \mymathop{op-name}{op-definition}{pre-kern}{post-kern}.

Es prüft, welches Token auf den neuen „Mymathop“ folgt, in Ihrem Fall also \existsunique. Wenn ein $, \), oder folgt \egroup, gibt es die „Op-Definition“ selbst aus; andernfalls fügt es den Pre- und Post-Kern um die „Op-Definition“ hinzu (nebenbei bemerkt: Die Verwendung von \@ifnextcharverschluckt alle dazwischenliegenden Leerzeichen zwischen dem „Mymathop“ und dem nächsten Token).

Mit dem \egroupCatch kann man \mymathopdas Prä-/Post- \kernsogar mitten in einer Formel unterdrücken, indem man es in Klammern einschließt.

Das MWE unten zeigt es in einer Formel, die mit zwei der Trennzeichenstile in einer eigenen Fbox zusammengefasst ist, und dann innerhalb einer Formel, isoliert, mit einem eigenen Satz Klammern.

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

Bildbeschreibung hier eingeben

Antwort2

Ich finde

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

macht was du willst.

Ich denke, eine bessere Lösung ist

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

verwandte Informationen