我想排版包含“中标”的公式 - 如下标和上标,但位于中间。此问答提供了一些解决方案:下标。上标。中标?。但是,我希望能够将中标、上标和下标组合到同一个符号中。此外,我希望它们水平居中,甚至偶尔右对齐(事实证明,我不仅使用了中标,还使用了左边中文书。
部分解决方案是简单地编写类似
$\begin{smallmatrix}i // j // k\end{smallmatrix} X$
;这解决了水平居中问题。当所有三个索引都存在时,这看起来已经足够好了。但是,如果其中一个索引缺失 - 例如
$\begin{smallmatrix}i // j // \end{smallmatrix} X$
,垂直对齐被破坏:j 应该是中标,但现在挂得太低,可能会被误认为是下标。
有没有办法产生类似的结果,但以这样的方式,索引堆栈的中间线始终具有一致的,或多或少居中的垂直位置,无论顶部和底部的线是否存在以及它们有多高或多短?
我并不坚持使用smallmatrix
:也许正确的答案是\overset
,,\substack
普通的matrix
或array
与的组合\scriptstyle
,或者完全不同的东西。任何解决方案都是可以接受的,只要它允许水平居中(或右对齐)并且不会在主符号及其索引之间引入过多的水平间距。
答案1
在数学模式下的使用:
\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{xparse}
\makeatletter
\newenvironment{smallermatrix}[1][c]
{\null\,\vcenter\bgroup
\Let@\restore@math@cr\default@tag
\baselineskip0pt \lineskip0.4pt \lineskiplimit0pt
\ialign\bgroup\if#1l\else\hfil\fi$\m@th\scriptstyle##$\if#1r\else\hfil\fi&&\thickspace\hfil
$\m@th\scriptstyle##$\hfil\crcr
}{%
\crcr\egroup\egroup\,%
}
\makeatother
\NewDocumentCommand{\ts}{O{c} e{^?_}}{% ^ for superscript, ? for midscript, _ for subscript
\begin{smallermatrix}[#1]
\mathstrut\IfValueT{#2}{#2} \\
\mathstrut\IfValueT{#3}{#3} \\
\mathstrut\IfValueT{#4}{#4}
\end{smallermatrix}%
}
\begin{document}
\[
X\ts^{a}?{b}_{c}\quad X\ts?{x}_{y} \quad X\ts^{a}_{b} \quad \ts[r]^{aaa}?{b}_{cc}X \quad X\ts[l]^{[0,1]}?{b}
\]
\end{document}