上付き/下付き文字の算術演算子の周りのスペース

上付き/下付き文字の算術演算子の周りのスペース

次の点を考慮してください。

\documentclass{article}

\begin{document}

What I have:
\[x^{1+1}\]

What I would like:
\[x^{1\,+\,1}\]

That is, I will like to have spacing around the operator as in `$1+1$'.\\[\baselineskip]
\textsf{Question:} How do I get the above throughout my document without having to add \verb|\,| on each side of the operator every time?

\end{document}

出力

答え1

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

Luatex には、各数式スタイルの各クラス間に追加されるスペースを制御するプリミティブがあるため、スクリプト スタイルで mathord と mathbin 間のスペースを制御するには、次のようにします。

\documentclass{article}

\begin{document}
$a+b x^{a+b}$

\Umathordbinspacing\scriptstyle=10mu
\Umathbinordspacing\scriptstyle=10mu

$a+b x^{a+b}$

\end{document}

従来のTeXエンジンでは次のようにできます

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

\documentclass{article}
\DeclareMathSymbol{\realplus}{\mathbin}{operators}{"2B}
\begin{document}
$a+b x^{a+b} +cx^{+c}$

%\Umathordbinspacing\scriptstyle=10mu
%\Umathbinordspacing\scriptstyle=10mu


\def\z{{\mskip\medmuskip{\realplus}\mskip\medmuskip}}

$a\z b x^{a \z b} \z  cx^{\z c}$

\catcode`\+\active\let+\z
\catcode`\+12
\mathcode`\+="8000

$a+b x^{a+b} +cx^{+c}$

\end{document}

しかし、これはあまり良くありません。常にスペースが追加されるため、2 つ+の数学原子間の二項演算子として使用される場合にのみ機能します。最後の+c項の最後のプレフィックスは広いスペースを取得しますが、これは実際には必要なことではないことに注意してください。プレフィックスにアクセスするには別のコマンドが必要になります+

コメントでリンクされた回答では、\nonscriptより複雑に見える を使用した構成を提案しましたが、実際には同じ欠陥があると思います。

egreg が提案したバージョンでは、\textスペースは正しく使用されますが、スペースを追加するだけでなく、より多くのマークアップが必要になります (もちろん、\spこの構造を使用して上付き文字を作成する独自のバリアント コマンドを定義することもできます)。

答え2

いいえ、それは望ましくありません。数学的空間の規則は、長い期間にわたって作成された数学的内容を含むいくつかの文書を調べることによって、クヌースによって研究されました。

おそらく、一部の国の印刷の伝統では、上付き文字や下付き文字でも演算記号や関係記号を間隔をあけて配置している。これは良いことではない。間隔が狭いのだ。全体的には良い。たまに起こるミスは手で直せる。美しい文書を作りたいなら、努力しなければならない。ミケランジェロは有名な作品を作るのにハンマーとノミだけを使ったわけではない。ピエタ

これは、カール・ヴァイエルシュトラス著『アーベルの機能理論:最初の重み』(1856年)に掲載された画像です。Googleブックスで見る

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

上付き文字の合計は厳密に設定されていることがわかりますが、通常のタイプの合計の場合はそうではありません。


以下は、バーバラ・ビートンが使っていたと記憶しているトリックです。

\documentclass{article}
\usepackage{amsmath}

\catcode`^=12
\catcode`_=12

\begingroup\lccode`~=`^\lowercase{\endgroup\def~}{\SPACED\sp}
\begingroup\lccode`~=`_\lowercase{\endgroup\def~}{\SPACED\sb}
\AtBeginDocument{\mathcode`^="8000 \mathcode`_="8000 }

\makeatletter
\def\SPACED#1#2{#1{\text{$\m@th#2$}}}
\makeatother

\begin{document}
$\displaystyle x^{1+1}+\sum_{1\le k\le n}k^2$

The original: {\catcode`^=7 \catcode`_=8
  $\displaystyle x^{1+1}+\sum_{1\le k\le n}k^2$}
\end{document}

これは\displaystyle単なる例です。

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

どのバージョンを選択するかについては、何の疑問もありません。

関連情報