我想将下标/上标缩小 10%,并使用 scalerel 包来实现。一切都很顺利,直到我发现运算符中的下标/上标也进行了缩放,但它们没有居中对齐。
有任何解决此问题的想法吗?谢谢。
\documentclass{article}
\usepackage{amsmath}
\usepackage{subdepth}
\usepackage{scalerel}
\mathcode`_="8000
\catcode`_=12
\mathcode`^="8000
\catcode`^=12
\begingroup
\catcode`_=\active
\catcode`^=\active
\gdef_#1{\ensuremath{\sb{\begingroup \hstretch{.9}{\vstretch{.9}{#1}} \endgroup}}}
\gdef^#1{\ensuremath{\sp{\begingroup \hstretch{.9}{\vstretch{.9}{#1}} \endgroup}}}
\endgroup
\begin{document}
\(a^2 \qquad \sum\limits_{2}^{3}\)
\end{document}
答案1
在我的另一个回答中,我建议使用宏来解决 OP 的困境\DeclareMathSizes
。然而,在评论中,OP 问我是否也可以使用他原来的方法解决这个问题。
当我第一次看到原帖的结果时,我以为脚本居中错误与我的scalerel
包有关。然而,经过仔细检查,我发现如果我将原帖的\hstretch{.9}{\vstretch{.9}{#1}}
脚本替换为\scalebox{.9}{#1}
,问题仍然存在。
通过实验,我发现,如果我将上标/下标重新定义包装在中\hbox
,就可以恢复正确的居中。
使用包的功能scalerel
将当前数学样式导入\hbox
,我重新定义了 OP 的重新定义,以保留水平居中。在此 MWE 中,我还将重新缩放设置为 0.7,而不是 0.9,只是为了强调调整大小。
\documentclass{article}
\usepackage{amsmath}
\usepackage{subdepth}
\usepackage{scalerel}
\mathcode`_="8000
\catcode`_=12
\mathcode`^="8000
\catcode`^=12
\begingroup
\catcode`_=\active
\catcode`^=\active
\gdef_#1{\sb{\ThisStyle{\hbox{\scalebox{.7}{$\SavedStyle#1$}}}}}
\gdef^#1{\sp{\ThisStyle{\hbox{\scalebox{.7}{$\SavedStyle#1$}}}}}
\endgroup
\begin{document}
\(a^2 \qquad \sum\limits_{2}^{3}\)
\end{document}
至于为什么\hbox
需要,我怀疑上/下标\unhbox
在其流程中执行了,因此需要一个\hbox
来采取行动。
以下 MWE\unhbox
证实了我的怀疑:
\documentclass{article}
\usepackage{amsmath}
\usepackage{subdepth}
\usepackage{scalerel}
\mathcode`_="8000
\catcode`_=12
\mathcode`^="8000
\catcode`^=12
\begingroup
\catcode`_=\active
\catcode`^=\active
\gdef_#1{\sb{\ThisStyle{\hbox{\scalebox{.7}{$\SavedStyle#1$}}}}}
\gdef^#1{\sp{\ThisStyle{\hbox{\scalebox{.7}{$\SavedStyle#1$}}}}}
\endgroup
\let\svunhbox\unhbox
\def\unhbox{*\svunhbox}
\begin{document}
\(a^2 \qquad \sum\limits_{2}^{3}\)
\end{document}