假设我需要获取一个类似$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
确保它不占用水平空间。