
Можно ли изменить горизонтальное выравнивание нижнего и верхнего индекса символа? То есть, можно ли получить эту пару выровненных по правому краю нижних/верхних индексов
вместо этой выровненной по левому краю пары нижних/верхних индексов
когда у меня есть такой код:
\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