如何让三个下标和三个上标对齐

如何让三个下标和三个上标对齐

假设我需要获取一个类似$L^{2,3/4,5/6}_{1,2,3}$Latex 中的公式。那么$2$--$1$, $3/4$--$2$, $5/6$--$3$就没有对齐。请参见在此处输入图片描述那么我该如何让这三个对齐?

答案1

让我们把事情复杂化。

\documentclass{article}
\usepackage{calc}
\begin{document}
$L^{2,3/4,5/6}_{1,\makebox[\widthof{3/4}]{$\scriptstyle 2,$}\makebox[\widthof{5/6}]{$\scriptstyle 3\hphantom{,}$}}$
\end{document}

在此处输入图片描述

我同意本杰明的意见。因此尝试增加空间。

\documentclass{article}
\usepackage{calc}
\begin{document}
$L^{2,3/4,5/6}_{1,\makebox[\widthof{3/4}]{$\scriptstyle 2,$}\makebox[\widthof{5/6}]{$\scriptstyle 3\hphantom{,}$}}$
\end{document}

在此处输入图片描述

/也可以通过使用以下方法来减少前后空间

\newcommand*{\mybar}{\kern-.2ex/\kern-.2ex}

代替/

答案2

只是为了好玩,使用低级命令:

\documentclass{article}
\newcommand{\stacked}[2]{%
  \vcenter{\tabskip=0pt
    \gdef\separator{/}
    \halign{$\scriptstyle##$\hfil&&$\scriptstyle\separator##$\hfil\cr
      #1\cr
      \noalign{\nointerlineskip\kern.2ex\gdef\separator{\phantom{/}}}
      #2\crcr
      \noalign{\kern.275ex}
    }%
  }%
}

\begin{document}
$L^{2/}_{1,}L\stacked{2,3&4,5&6}{1,&2,&3}$

\end{document}

在此处输入图片描述


如果希望居中对齐,这里有一个(相当复杂的)方法。

\documentclass{article}
\usepackage{xparse}
\newlength{\commawidth}
\newcommand{\dostacked}[2]{%
  \settowidth\commawidth{$\scriptstyle,\,$}
  \vcenter{
    \tabskip=0pt
    \halign{\hfil$\scriptstyle##\vphantom{/}$\hfil\tabskip\commawidth
            &&\hfil$\scriptstyle##\vphantom{/}$\hfil\cr
      #1\cr
      \noalign{\nointerlineskip\kern.2ex}
      #2\crcr
      \noalign{\kern.275ex}
    }%
  }%
  \kern-\commawidth
}
\ExplSyntaxOn
\NewDocumentCommand{\nospacecomma}{}
 {
  \rlap{$\scriptstyle,$}
 }
\cs_set_eq:NN \egreg_dostacked:nn \dostacked
\cs_generate_variant:Nn \egreg_dostacked:nn { xx }
\NewDocumentCommand{\stacked}{mm}
 {
  \seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
  \seq_set_split:Nnn \l_tmpb_seq { , } { #2 }
  \egreg_dostacked:xx
   { \seq_use:Nn \l_tmpa_seq { \nospacecomma& } }
   { \seq_use:Nn \l_tmpb_seq { \nospacecomma& } }
 }
\ExplSyntaxOff

\begin{document}
$L^{2/}_{1}L\stacked{2,3/4,5/6}{1,2,3}X$

\end{document}

第一个L^{2/}{1}只是为了比较高度,而后面的 $X$ 用于检查末尾没有添加空格。

这不是最好的代码。但是,嘿,它有效!

在此处输入图片描述

答案3

使用tabstackengine根据最宽的列编写具有等间距列的表格,我们将子/超数组设为堆栈,只需调整子/超线与下标线的垂直位置之间的空间。 6pt(与 7pt)的长堆栈间隙与默认的子/超位置相匹配,但上标中的斜线往往会干扰,因此我增加了它。

堆栈的对齐方式是居中,尽管[l][r]上的可选参数\tabbedVectorStack可以改变这一点。

\documentclass{article}
\usepackage{tabstackengine}
\begin{document}
\setstackgap{L}{7pt}% SUB- SUPER- BASELINE SHIFT
\( L_1^2 \textrm{~versus~} L\raisebox{0.5pt}% SUB- BASELINE
  {\scriptsize\tabbedVectorstack{2,&3/4,&5/6\\1,&2,&3}} \)
\end{document}

在此处输入图片描述

答案4

这非常简单,而且几乎作品:

Almost: $ L^{2,}_{1,} {}^{3/4,}_{2,} {}^{5/6}_3 $

对齐下标/上标

但是,第一个上标 ( 2,) 比其他上标小,因此略低。因此,下面介绍如何修复它,而无需猜测尺寸(现在简化了,感谢 @sgmoye):

After: $ L^{2,\mathstrut}_{1,} {}^{3/4,}_{2,} {}^{5/6}_3 $

在此处输入图片描述

请注意,在其他示例中,某些指数可能太大,无法容纳 TeX 用 保留的空间\mathstrut;然后您需要以更通用的方式保留垂直空间。以下是一种(有点笨拙的)方法:

Version 3: $ L^{2,\llap{\phantom{\scriptsize /}}}_{1,} {}^{3/4,}_{2,} {}^{5/6}_3 $

这里,我们的垂直空间模型是一个 (scriptsize) 斜线;但它可以是任何东西。\phantom使其不可见,并\llap确保它不占用水平空间。

相关内容