添字(上付、下付)の位置を調整させるには

添字(上付、下付)の位置を調整させるには

- 清水 の投稿
返信数: 16
みなさま、はじめて投稿させていただきます。

使用しているパッケージはamsmath、amssymbを使っています。
a^{2^3}、b_{2_3}、int_2^3 など^_を使用して添字を表していますが、この中で
a^{2^3}、b_{2_3}の指数の位置を調整することはできるのでしょうか。

個別に\raseboxなどで対応するのはかなり手間なので、デフォルトの発生位置を変更したいと考えております。
a\hogesup{2}などのマクロも避けたい思います。

^_の挙動を変えるのはかなり難しいとは思いますが、ご存じか方いないでしょうか。
もしくは有能なパッケージの紹介でもありがたいです。

よろしくお願いします。
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 北見 けん の投稿
数式中の添え字の高さは、数式フォントが持っている fontdimen パラメータの値をもとに算出されます。
例えば次のようにすると変化する事が分かると思います。
どのパラメータがどのように使われるかなど、詳しくは『TeXブック』の Appendix G に載っています。
残念ながら絶版らしいのですが、大学図書館などにはあると思います。

\documentclass{article}
\nofiles

\begin{document}

\def\testtext{a^{2^3}\ b_{2_3}\ \int_2^3}

$\testtext$
\fontdimen13\textfont2=6pt
\fontdimen14\textfont2=6pt
\fontdimen15\textfont2=6pt
\fontdimen16\textfont2=6pt
\fontdimen17\textfont2=6pt
$\testtext$

\end{document}
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 本田 知亮 の投稿
https://ctan.org/tex-archive/systems/knuth/dist/tex

TeX Bookの日本語版は入手困難ですが,コンパイルはできませんけども
上にある「texbook.tex」は読めます.
24761行目からAppendix Gです.rule 18からが添え字の処理ですが,
難行苦行です.
fontdimen13から17,細かいこと言えばさらにfontdimen18と19までが必要で,
TeX Bookでは「\sigma_{17}」のように表記されています.
(LaTeXの範囲では \DeclareFontShapeの最後の引数で\fontdimenに触れますが,
\fontdimenへの代入は常に\globalだったような)

個人的には \fontdimen をいじるなら
まずは _ や ^ を再定義して対症療法でなんとかなるか考えるかもしれません.


\documentclass{article}

\usepackage{lmodern}

\begin{document}\Huge

\bgroup
\catcode`\^=\active
\catcode`\_=\active
\gdef\activeSupSub{%
\catcode`\^=\active
\catcode`\_=\active
\def^##1{\textbf{SUP##1}}
\def_##1{\texttt{sub##1}}
}
\egroup

$a^1_2$

\begin{activeSupSub}
$a^1_{2^{50}_1}$
\end{activeSupSub}

\end{document}

こんな感じで,^ と _ に悪戯することはできます.

おまけ:
LuaTeXだったら fontdimen に相当するパラメータがあるようです。
本田 知亮 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
本田 知亮 様
ありがとうございます。
環境内で動作するやり方ですね。ただこれだと入力工数が増えるのでちょっと現実的ではないです。
_ や ^ を再定義もlimitsやnolimitsもあるので一筋縄でいかないかもとあきらめモードです。
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 北見 けん の投稿
私の回答では fontdimen の変更をお示ししましたが、実は、本田さんの回答にあるような、「^」と「_」をアクティブ文字にする方法が現実的だと思っていました。ところが、

> これだと入力工数が増えるのでちょっと現実的ではない

との返信でいささか面喰っています。
ひょっとして、数式が出てくるたびに逐一 activeSupSub 環境の開始と終了を記述しなければいけないと考えてしまったのでしょうか?
実際にはその必要はなく、文書全体を一括して activeSupSub 環境にしてしまえばよいので、入力工数は問題にはならないのではないかと思います。もっと省力化するなら、次のサンプルにあるように \AtBeginDocument に環境開始を仕込んでしまったりすることもできますし、プリアンブルで設定を有効にしてしまってそもそも環境を切り替える必要をなくしてしまうこともできます。

下のサンプルでは、本田さんの方法をベースにして、添え字の中の添え字を独立して変更する方法も試してみました。limitsやnolimitsの場合にどうなるかはちょっとわかりませんが。
 
\documentclass{article}

%\usepackage{lmodern}

\bgroup
\catcode`\^=\active
\catcode`\_=\active
\gdef\activeSupSub{%
\catcode`\^=\active
\catcode`\_=\active
\def^{\mysup}
\def_{\mysub}
}
\gdef\endactiveSupSub{}
\egroup

\def\mysup#1{^{\nearrow\let\mysup\mysupsup\let\mysub\mysupsub#1}}
\def\mysub#1{_{\searrow\let\mysup\mysubsup\let\mysub\mysubsub#1}}
\def\mysupsup#1{^{\Uparrow(#1)}}
\def\mysupsub#1{_{\Downarrow(#1)}}
\def\mysubsup#1{^{\Uparrow(#1)}}
\def\mysubsub#1{_{\Downarrow(#1)}}

\AtBeginDocument{\activeSupSub}
\AtEndDocument{\endactiveSupSub}

\begin{document}\Huge

$a^1_2$

$a^1_{2^{50}_1}$

\end{document}
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 本田 知亮 の投稿
北見さん
>との返信でいささか面喰っています。
いつも,フォローありがとうございます.
単に,「通常」「通常ではない」を並べるためだけに環境にしただけだったので,
正直なところ面喰いました.
#そのときには「bm」の件もアップされていたので余計に.

\nolimits/\limits関係は,本来の意味での ^ や _ (もしくは等価な \sp や \sb)が
それらの直後の最初の空白以外のトークンになるようにすれば
amsの\textとか組み合わせてなんとかなりそうな気はします.
圧縮スタイルまでは再現できないように思いますが(すべて未実験).

北川さん:
newtxとTUG Boatの記事の情報ありがとうございます.
両方とも知りませんでした.
romannumeralのアレ,expl3と展開のアレ,今回のAppendix Gのアレと
TUG Boatで年末年始かな(笑)
本田 知亮 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
本田様
私の技量が全く追いついていなくて申し訳ありませんでした。

> \nolimits/\limits関係は,本来の意味での ^ や _ (もしくは等価な \sp や \sb)が
> それらの直後の最初の空白以外のトークンになるようにすれば
> amsの\textとか組み合わせてなんとかなりそうな気はします.

私の技量では難しそうです。

> #そのときには「bm」の件もアップされていたので余計に.
こちらのほうもちょっと困っております。
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
北見様
ありがとうございます。
北見様の推察通り、数式が出てくる度に環境の開始と終了をしなければならないのかと思いました。
プリアンブルで\AtBeginDocument{\activeSupSub}と\AtEndDocument{\endactiveSupSub}で文書全体に仕込めるということなのですね。
\AtBeginDocumentと\AtEndDocumentを使わないようにできないものかとも思い、他にも\catcodeを使って改変しているのがあるので、それになぞって下記のようにしてみたところ、エラーはでませんが期待の動作はしませんでした。
\catcodeを使って変更するやりかたは、見よう見まねでやっているので正直理解が追いついていないのです。

\let\normalsup=^ % 元の^の動作を保存
\begingroup
\catcode`\^=\active
\lccode`~=`^ %
\lowercase{\endgroup
\def~#1}{\normalsup{\raise2ex\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$\scriptstyle{#1}$}}}


\let\normalsub=_ % 元の_の動作を保存
\begingroup
\catcode`\_=\active
\lccode`~=`_ %
\lowercase{\endgroup
\def~#1}{\normalsub{\lower.5ex\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$\scriptstyle{#1}$}}}

\def\mysupsup#1{\normalsup{#1}}
\def\mysupsub#1{\normalsub{#1}}
\def\mysubsup#1{\normalsup{#1}}
\def\mysubsub#1{\normalsub{#1}}
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 北見 けん の投稿
> エラーはでませんが期待の動作はしませんでした。

お示しのコードだけでは試してみることができません。\documentclass から \end{document} まで揃っていてそのまま動かせるようになっているサンプルをつけていただけると、どのように意図と違っているのかが確認できます。
とりあえず、こちらで適当に補ったものでは変更が効くように思えます。いかがでしょうか。

\documentclass{article}

\let\normalsup=^ % 元の^の動作を保存
\begingroup
\catcode`\^=\active
\lccode`~=`^ %
\lowercase{\endgroup
\def~#1}{\normalsup{\raise2ex\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$\scriptstyle{#1}$}}}


\let\normalsub=_ % 元の_の動作を保存
\begingroup
\catcode`\_=\active
\lccode`~=`_ %
\lowercase{\endgroup
\def~#1}{\normalsub{\lower1.5ex\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$\scriptstyle{#1}$}}}

\def\mysupsup#1{\normalsup{#1}}
\def\mysupsub#1{\normalsub{#1}}
\def\mysubsup#1{\normalsup{#1}}
\def\mysubsub#1{\normalsub{#1}}

\begin{document}%\Huge

$a^1_2$ $a^1_{2^{50}_1}$

\catcode`\^=\active
\catcode`\_=\active
$a^1_2$ $a^1_{2^{50}_1}$

\end{document}
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
北見様
ありがとうございました。またサンプルの提示方法のご指摘ありがとうございます。
下記の方法で希望の動作まではできました。

\intや\sumのlimitsやnolimitsへの影響がでないようにするには私の技量では見当がつきませんでした。
なんとかなるのでしょうか。

\documentclass[dvipdfmx]{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}


\begingroup
\catcode`\^=\active
\lccode`~=`^ %
\lowercase{\endgroup
\def~}{\mysup}
\catcode`\^=\active

\begingroup
\catcode`\_=\active
\lccode`~=`_ %
\lowercase{\endgroup
\def~}{\mysub}
\catcode`\_=\active

\def\mysup#1{\sp{\raise1ex\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$\scriptstyle{#1}$}}}
\def\mysub#1{\sb{\lower1ex\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$\scriptstyle{#1}$}}}
\def\mysupsup#1{\sp{\scriptscriptstyle#1}}
\def\mysupsub#1{\sb{\scriptscriptstyle#1}}
\def\mysubsup#1{\sp{\scriptscriptstyle#1}}
\def\mysubsub#1{\sb{\scriptscriptstyle#1}}


\begin{document}
$a123\scriptstyle{a123}\scriptscriptstyle{a123}$\\
$a\sp1\sb2$\ $a\sp{1\sp{2\sp3}}$\\
$a^1_2$\ $a^{1^{2^3}}$

$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$

$\int_a^b$\ $\displaystyle\int_a^b$

$\sum_a^b$\ $\displaystyle\sum_a^b$

\end{document}
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 本田 知亮 の投稿
手を抜いている部分がありますが,
こんな感じでしょうか.
ちなみに手を抜いているところは空白トークンの扱いですが,
これは面倒なので放置です.
#空白トークンを読み飛ばす \futurelet って既存のものがありそうですが,
#なんか思い浮かばない・・・ありますよね,きっと.

あえて北川さんのアドバイスにあるnewtxのコードは読まずに
対症療法的に積み上げてみます.
なお老婆心ながら,
この用途ならあえてlowercaseのトリックでグループ終了を飛び越えなくても
globalの方が楽だと思います.


\documentclass[dvipdfmx]{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}

\makeatletter

\begingroup
\catcode`\^=\active
\lccode`~=`^ %
\lowercase{\endgroup
\def~}{\mysup}
\catcode`\^=\active

\begingroup
\catcode`\_=\active
\lccode`~=`_ %
\lowercase{\endgroup
\def~}{\mysub}
\catcode`\_=\active

\newdimen\shift@suffix
\shift@suffix1ex

\def\reset@ornot@shift@suffix@sb{%
\ifx\@next_\else\global\shift@suffix1ex\fi
}


\def\reset@ornot@shift@suffix@sp{%
\ifx\@next^\else\global\shift@suffix1ex\fi
}

\def\mysup#1{\sp{\text{\raise\shift@suffix\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sb
}
\def\mysub#1{\sb{\text{\lower\shift@suffix\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sp
}


\def\mysupsup#1{\sp{\text{$#1$}}}
\def\mysupsub#1{\sb{\text{$#1$}}}
\def\mysubsup#1{\sp{\text{$#1$}}}
\def\mysubsub#1{\sb{\text{$#1$}}}


\def\int{\intop\shift@suffix\z@\nolimits}
\DeclareMathSymbol{\Sum}{\mathop}{largesymbols}{"50}
\def\sum{\Sum\shift@suffix\z@\displaylimits}

\makeatother


\begin{document}
$a123\scriptstyle{a123}\scriptscriptstyle{a123}$\\
$a\sp1\sb2$\ $a\sp{1\sp{2\sp3}}$\\
$a^1_2$\ $a^{1^{2^3}}$

$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$

$\int_a^b$\ $\displaystyle\int_a^b$

$\int\sb{a}\sp{b}$\ $\displaystyle\int\sb{a}\sp{b}$


$\sum_a^b$\ $\displaystyle\sum_a^b$


$\sum\sb{a}\sp{b}$\ $\displaystyle\sum\sb{a}\sp{b}$


$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$


$a\sp1\sb{2\sp{50}\sb1}$\ $a\sp{1\sp{60}\sb3}\sb{2\sp{50}\sb1}$

\end{document}
本田 知亮 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
本田様 ありがとうございます。

私にはかなり高度で頭が追いついておりません^^;

> なお老婆心ながら,
> この用途ならあえてlowercaseのトリックでグループ終了を飛び越えなくても
> globalの方が楽だと思います.

正解かわかりませんが
\begingroup
\catcode`^=\active
\catcode`_=\active
\gdef^{\mysup}
\gdef_{\mysub}
\endgroup
\catcode`\^=\active
\catcode`_=\active

このようにしました。

おしえていただいたサンプルは上付と下付が同じ数値で移動するので、それぞれで設定したく下記のように少し改変しましたが、インテグラルやシグマの箇所まで影響がでてしまいました。
私の頭では判定している箇所の判定(\ifx\@nextだと思うのですが)が正しく理解できていないからだと思います。もちろん\futureletも理解が追いついておりません。
どのように修正すればよろしいでしょうか?

> ちなみに手を抜いているところは空白トークンの扱いですが,
> これは面倒なので放置です.

空白のトークンの扱いとはどのような事なのでしょうか?

いただいたサンプルはプレアンブル内に\makeatletter、\makeatotherが入っておりました。再定義するマクロなどに@が現れる場合に使用するのだと思いますが、どの部分が再定義になっているのでしょうか?知識の浅い私には新しく定義しているものばかりに見えます。。。

\documentclass[dvipdfmx]{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}

\makeatletter

\begingroup
\catcode`^=\active
\catcode`_=\active
\gdef^{\mysup}
\gdef_{\mysub}
\endgroup
\catcode`\^=\active
\catcode`_=\active

\newdimen\shift@suffix
\shift@suffix1ex

%下記を追加
\newdimen\shift@suffix@sp
\shift@suffix@sp1ex
\newdimen\shift@suffix@sb
\shift@suffix@sb2ex
%ここまで

\def\reset@ornot@shift@suffix@sb{%
\ifx\@next_\else\global\shift@suffix1ex\fi
}

\def\reset@ornot@shift@suffix@sp{%
\ifx\@next^\else\global\shift@suffix1ex\fi
}
%\raise\shift@suffixから\raise\shift@suffix@spに変更
\def\mysup#1{\sp{\text{\raise\shift@suffix@sp\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sb
}
%\lower\shift@suffixから\lower\shift@suffix@sbに変更
\def\mysub#1{\sb{\text{\lower\shift@suffix@sb\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sp
}


\def\mysupsup#1{\sp{\text{$#1$}}}
\def\mysupsub#1{\sb{\text{$#1$}}}
\def\mysubsup#1{\sp{\text{$#1$}}}
\def\mysubsub#1{\sb{\text{$#1$}}}


\def\int{\intop\shift@suffix\z@\nolimits}
\DeclareMathSymbol{\Sum}{\mathop}{largesymbols}{"50}
\def\sum{\Sum\shift@suffix\z@\displaylimits}

\makeatother


\begin{document}
\parindent=0pt
文字の大きさ
$a123\scriptstyle{a123}\scriptscriptstyle{a123}$\\
デフォルトの位置 
$a\sp1\sb2$\ $a\sp{1\sp{2\sp3}}$\\
ここから \\
$a^1$\ $a_2$\ $a^1_2$\\\\
$a^{1^{2^3}}$\ $a_{1_{2_3}}$\ $a^{1^{2^3}}_{1_{2_3}}$\\\\

$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$\\

spsbを使用 
$\int\sb{a}\sp{b}$\ $\displaystyle\int\sb{a}\sp{b}$\\
$\int_a^b$\ $\displaystyle\int_a^b$\\
spsbを使用 
$\sum\sb{a}\sp{b}$\ $\displaystyle\sum\sb{a}\sp{b}$\\
$\sum_a^b$\ $\displaystyle\sum_a^b$\\

spsbを使用
$a\sp1\sb{2\sp{50}\sb1}$\ $a\sp{1\sp{60}\sb3}\sb{2\sp{50}\sb1}$\\
$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$\\
その他\\
$a\_\text{\textasciicircum}$a\_\textasciicircum\ $f'(x)$

\end{document}
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
空白のトークンと\makeatletter、\makeatotherは
https://texwiki.texjp.org/?TeX%E5%85%A5%E9%96%80%2F%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BD%9C%E6%88%90
ここを読んで理解できました。
make@英字、make@その他とカテゴリコードの変更ということなのですね。
清水 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 本田 知亮 の投稿
\makeatletter/\makeatotherに関しては
プリアンブルに「@」を含むコントロールシーケンスを書くためのおまじないというくらいの認識で構いません.
その実装はカテゴリコードの細工ですが普通はその実装そのものはスルーしても問題ないです

空白のトークンに関しては
今話題にしている _ と ^ の(私がでっちあげた \futurelet つき)変種が有効になっている範囲において

$\sum_{a}^{b}$ と $\sum_{a} ^{b}$

を比較すれば,何を言っているかはわかると思います.
後者において _{a} と ^{b} の間にある「空白」が問題です.
この問題への対処をしていないということです.

上下への移動量を別にするのは
移動量がどう作用しているのかを追いかければわかると思います.

ひとまず「全部盛り」のコードを載せてみますが,
けっこう厄介になります(もうちょっと整理できそうですが).

上述の「空白の処理」がTeXの黒魔術の入り口みたいなコードで,
latex.ltxの \@ifnextchar の定義のパクリです.
上下の移動量の分離は,TeXに限らずよくあるパターンだと思います.
1exという具体的な値を変数にいれて,
あとはその変数で記述する手法です.
defaultという名前がよくないというか,
実際はもう一段階深く変数にする方がいい感じもしますが,
ややこしくなるので止めます.

#不具合は残ってるかもしれません

\documentclass[dvipdfmx]{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}

\makeatletter

\begingroup
\catcode`\^=\active
\gdef^{\mysup}

\catcode`\_=\active
\gdef_{\mysub}
\endgroup

\catcode`\^=\active
\catcode`\_=\active

\def\default@shift@sub{1ex}
\def\default@shift@sup{1ex}

\newdimen\shift@sub\shift@sub=\default@shift@sub\relax
\newdimen\shift@sup\shift@sup=\default@shift@sup\relax

\def\:{\@rest@sb@gobblesp}
\expandafter\def\: {\futurelet\@next\reset@ornot@shift@suffix@sb}

\def\reset@ornot@shift@suffix@sb{%<br /> \ifx\@next\@sptoken<br /> \let\temp@reset@sb\@rest@sb@gobblesp<br /> \else<br /> \ifx\@next_%<br /> \def\temp@reset@sb{}%
\else
\def\temp@reset@sb{\shift@sub\default@shift@sub\relax<br /> \shift@sup\default@shift@sup\relax}%
\fi
\fi
\temp@reset@sb
}

\def\:{\@rest@sp@gobblesp}
\expandafter\def\: {\futurelet\@next\reset@ornot@shift@suffix@sp}
\def\reset@ornot@shift@suffix@sp{%<br /> \ifx\@next\@sptoken<br /> \let\temp@reset@sp\@rest@sp@gobblesp<br /> \else<br /> \ifx\@next^%<br /> \def\temp@reset@sp{}%
\else
\def\temp@reset@sp{\shift@sub\default@shift@sub\relax<br /> \shift@sup\default@shift@sup\relax}%
\fi
\fi
\temp@reset@sp
}

\def\mysup#1{\sp{\text{\raise\shift@sup\hbox{\let\mysup\mysupsup\let\mysub\mysupsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sb
}
\def\mysub#1{\sb{\text{\lower\shift@sub\hbox{\let\mysup\mysubsup\let\mysub\mysubsub$#1$}}}%
\futurelet\@next\reset@ornot@shift@suffix@sp
}


\def\mysupsup#1{\sp{\text{$#1$}}}
\def\mysupsub#1{\sb{\text{$#1$}}}
\def\mysubsup#1{\sp{\text{$#1$}}}
\def\mysubsub#1{\sb{\text{$#1$}}}


\def\int{\intop\shift@sub\z@\shift@sup\z@\nolimits}
\DeclareMathSymbol{\Sum}{\mathop}{largesymbols}{"50}
\def\sum{\Sum\shift@sub\z@\shift@sup\z@\displaylimits}

\makeatother


\begin{document}
$a123\scriptstyle{a123}\scriptscriptstyle{a123}$\\
$a\sp1\sb2$\ $a\sp{1\sp{2\sp3}}$\\
$a^1_2$\ $a^{1^{2^3}}$

$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$

$\int_a^b$\ $\displaystyle\int_a^b$

$\int\sb{a}\sp{b}$\ $\displaystyle\int\sb{a}\sp{b}$


$\sum_a^b$\ $\sum_a ^b$
$\sum^a_b$\ $\sum^a _b$
$$
\sum_a^b\ \sum_a ^b
\sum^a_b\ \sum^a _b
$$


$\sum\sb{a}\sp{b}$\ $\displaystyle\sum\sb{a}\sp{b}$


$a^1_{2^{50}_1}$\ $a^{1^{60}_3}_{2^{50}_1}$


$a\sp1\sb{2\sp{50}\sb1}$\ $a\sp{1\sp{60}\sb3}\sb{2\sp{50}\sb1}$

\end{document}
本田 知亮 への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
本田様
お礼の返事ができておりませんで申し訳ございませんでした。
こちらの検証はまだできておりませんので改めて返事をさせていただきます。
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 北川 弘典 の投稿
TeXBook の Appendix G の内容は.
Bogusław Jackowski, “Appendix G illuminated ”, TUGBoat 27:1, 2006
(https://tug.org/TUGboat/tb27-1/tb86jackowski.pdf)
で図付きで紹介されています.見やすいのでおすすめです.

(あと,newtxmath パッケージに _ を再定義して下添字の位置を調整するコードがあります.)
北見 けん への返信

Re: 添字(上付、下付)の位置を調整させるには

- 清水 の投稿
北見けん様
ありがとうございます。
TeXブックは持っておりますが、私には難解でした。
教えていただいたサンプルを元にとりあえずどこが動くかわかりますね。

また、数は多いですがtextfont2,\ scriptfont2,\ scriptscriptfont2のfontdimen1~22とtextfont3,\ scriptfont3,\ scriptscriptfont3のfontdimen1~13の挙動をみればよさそうということですね。