数式の端(始まり/終わり)で消えるスペース

数式の端(始まり/終わり)で消えるスペース

数式の最初または最後に消えるスペースを作成する方法はありますか?

アイデア:数式の最後のケースでは、先を見通すか、必須の引数を取るものから始めるとよいでしょう。必須の引数が数式の終わりで終了するコマンドには、空の引数が渡されることを覚えています。

実際の例をいくつか挙げます。


例1

一意性を表す量指定子 (「正確に 1 つ存在する」) は、多くの場合「∃!」と表記されます。

見た目を考慮して、次の変数を感嘆符から少し離して配置し、「∃!」が単一のトークン (ここでの「トークン」はプログラミング言語での解析の意味で) と見なされることを明確にしたいと思います。 のようなものを定義できますが、記号を単独で使用すると の\newcommand*{\existsunique}{\exists!\mskip1.5mu\relax}スペースが残ります。1.5mu

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

スペースの有無にかかわらず一意性量指定子

ここで、各ペアの最初の行1.5muには、一意性量指定子「∃!」の後に の追加のスペースがありますが、各ペアの 2 番目の行にはスペースがありません。最初のペアでは、追加されたスペースは希望どおりですが、2 番目のペアでは見栄えがよくありません。

この例では、数式の最後にスペースが消えるようにしたいのです1.5muが、同じマクロで上記の 1 行目と 4 行目が生成されるはずです。おそらく「∃!」には別のアプローチがあるかもしれませんが、これは上記の一般的な質問に対する 1 つの実用的な例として役立ちます。


例2

ハイコ・オベルディークの中型矢の場合

  • \Implies(長さは\Rightarrow\impliesの間)
  • \Impliedby(長さは\Leftarrow\impliedbyの間)
  • \Iff(長さは\Leftrightarrow\iffの間)

ここで定義文脈に応じて両側にスペースを削除することが望ましいです。

答え1

この修正された回答は、egregの回答を見て生まれました。\mathop、\operatorname、\DeclareMathOperator の違いは何ですか?、彼はこの構成について言及しました:\newcommand{\diff}{\mathop{}\!d}

上記の OP の質問では、Werner と egreg が\mathbinと を使用することを提案しました\mathopが、OP は「 も検討しました\mathopが、間隔を狭くしたいです」と返信しました。

そこで、 と似た方法を採用して\diff、次のような結論に至りました。

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

ここに画像の説明を入力してください

実際の\!カーンは OP の好みとは異なるかもしれませんが、おそらくこのアプローチは彼が選択したカーンに適応できるでしょう。


独自のアプローチ:

このソリューションは、アプリケーションに適したものになる可能性があります (または、そうでない可能性があります)。マクロを紹介します\mymathop{op-name}{op-definition}{pre-kern}{post-kern}

これは、新しい「mymathop」に続くトークン(この場合は )を調べます。 、 、または\existsuniqueが続く場合は、「op 定義」を単独で出力します。それ以外の場合は、「op 定義」の前後にカーニングを追加します(補足として、 を使用すると、「mymathop」と次のトークンの間にあるスペースがすべて吸収されます)。$\)\egroup\@ifnextchar

このキャッチは、式の途中であっても括弧で囲むことで前置詞/後置詞を\egroup強制的に抑制することを可能にする。\mymathop\kern

以下の MWE は、数式内で 2 つの区切り文字スタイルでそれ自体が fbox 化され、数式内で独自の中括弧セットで分離されたものを示しています。

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

ここに画像の説明を入力してください

答え2

私は思う

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

あなたが望むことをします。

より良い解決策は

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

関連情報