Управление горизонтальным выравниванием нижних/верхних индексов

Управление горизонтальным выравниванием нижних/верхних индексов

Можно ли изменить горизонтальное выравнивание нижнего и верхнего индекса символа? То есть, можно ли получить эту пару выровненных по правому краю нижних/верхних индексов

желанный

вместо этой выровненной по левому краю пары нижних/верхних индексов

существующий

когда у меня есть такой код:

\documentclass{standalone}

\usepackage{amsmath}

\begin{document}
$x_{101}^{1}$
\end{document}

Примечание:ЯнетИщуруководстворешение (например, с помощью hphantomкоторого я создал приведенный выше пример), а настоящее автоматизированное решение, которое действует «один раз и навсегда».

Редактировать:Меня устраивает решение, которое не патчит существующий механизм надстрочных/подстрочных знаков (хотя мне интересно, возможно ли это). Решение также может использовать пользовательскую команду, т. е. \foo{x}{101}{1}до тех пор, пока она придерживается правильного интервала надстрочных/подстрочных знаков mathmode и т. д.

решение1

Я не уверен, какова цель этого, но вот это:

\documentclass{article}
\usepackage{mathtools}

\DeclareRobustCommand{\subsup}[3]{{%
  \mathpalette\makesubsup{{#1}{#2}{#3}}%
}}

\makeatletter
\providecommand{\@firstofthree}[3]{#1}
\providecommand{\@secondofthree}[3]{#2}
\providecommand{\@thirdofthree}[3]{#3}
\newcommand{\makesubsup}[2]{%
  \sbox\z@{$\m@th#1{}_{\@secondofthree#2}$}%
  \sbox\tw@{$\m@th#1{}^{\@thirdofthree#2}$}%
  \dimen@=\wd\z@
  \ifdim\wd\tw@>\wd\z@ \dimen@=\wd\tw@\fi
  {\mkern0mu \@firstofthree#2}%
    _{\mathmakebox[\dimen@][r]{\@secondofthree#2}}%
    ^{\mathmakebox[\dimen@][r]{\@thirdofthree#2}}%
}
\makeatother

\begin{document}

$\subsup{x}{101}{1}-\subsup{y}{1}{101}$

$A_{\subsup{x}{101}{1}}$

\end{document}

введите описание изображения здесь

Просто измерьте нижний и верхний индексы и сделайте ячейки такой же ширины, как и больший. Обратите внимание, что это работает также для нижних/верхних индексов второго уровня.

решение2

Вот начало, с \Ss{}{}{}. ОТРЕДАКТИРОВАНО для работы с displaystyle также. ОТРЕДАКТИРОВАНО для автоматической работы со стилями подстрок также. ИСПРАВЛЕНО очевидная ошибка, из-за которой макрос не вел себя должным образом, если длина надстрочного индекса превышала длину подстрочного индекса.

\documentclass{article}
\usepackage{amsmath,stackengine,scalerel}
\newcommand\Ss[3]{\setbox0=\hbox{$#2$}\setbox2=\hbox{$#3$}\ifdim\wd2<\wd0%
    \ThisStyle{\ensurestackMath{\stackengine%
    {0pt}{\SavedStyle#1_{#2}^{}}{\SavedStyle{\phantom{#1}}^{#3}}{O}{r}{F}{F}{L}}}%
  \else
    \ThisStyle{\ensurestackMath{\stackengine%
    {0pt}{\SavedStyle{\phantom{#1}}_{#2}^{}}{\SavedStyle#1^{#3}}{O}{r}{F}{F}{L}}}%
  \fi
}
\begin{document}
\parskip 4pt\centering
$x_{101}^{1}$
$\Ss{x}{101}{1}$

$X_{101}^{1}$
$\Ss{X}{101}{1}$

$(A)_{123}^{ijklm}$
$\Ss{(A)}{123}{ijklm}$
\[
\biggl(\frac{1}{2}\biggr)_{123}^{4}\quad
\Ss{\biggl(\frac{1}{2}\biggr)}{123}{4}
\]
$A_{\Ss{x}{101}{1}}$
\end{document}

введите описание изображения здесь

решение3

Например, вы можете попробовать это:

\def\sf#1_#2^#3{%
  \setbox1=\hbox{$\scriptstyle#2$}%
  \setbox2=\hbox{$\scriptstyle#3$}%
  \ifdim\wd2>\wd1 \dimen0=\wd2 \else \dimen0=\wd1 \fi
  \setbox2=\hbox to\dimen0{\hss\box2}%
  \setbox1=\hbox to\dimen0{\hss\box1}%
  #1_{\box1}^{\box2}
}

$\sf x_{100}^{2}$

\bye

Связанный контент