文本模式下的上标和下标一起

文本模式下的上标和下标一起

我想在文本模式下同时使用上标和下标。我无法使用数学模式,因为我创建了只能在文本模式下工作的宏。

我发现了这个问题:将 textsuperscript 和 textsubscript 垂直对齐

但是建议的答案不起作用,因为生成的文本的宽度仅基于下标,如果上标较长,则文本会与之后的内容重叠。

我为更长的下标/上标创建了以下版本,但我需要将它们合并起来:

\documentclass{scrartcl}
\usepackage[english]{babel}

\def\SPSBbottom#1#2{\rlap{\textsuperscript{#1}}\textsubscript{#2}}
\def\SPSBtop#1#2{\rlap{\textsubscript{#2}}\textsuperscript{#1}}

\begin{document}

prefix\SPSBbottom{long}{1}text \\[1cm]
prefix\SPSBbottom{1}{long}text \\[1cm] % Working combination
prefix\SPSBtop{long}{1}text \\[1cm] % Working combination
prefix\SPSBtop{1}{long}text \\[1cm]

\end{document}

如果我可以将两个文本放在同一个位置,并且宽度取自较长的文本,那么使用\textsuperscript{#1 'and' \phantom{#2}}\textsubscript{#2 'and' \phantom{#2}}就可以了,但我不知道如何做到这一点。

或者,可以使用数学形式$A^{top}_{bottom}$,其中顶部和底部处于嵌套的正常模式(\text{} 不起作用)。但我也没有找到这样做的方法。

提前致谢 :-)

答案1

重复的定义\textsuperscript

\documentclass{article}

\makeatletter
\DeclareRobustCommand{\textsupsub}[2]{{%
  \m@th\ensuremath{%
    ^{\mbox{\fontsize\sf@size\z@#1}}%
    _{\mbox{\fontsize\sf@size\z@#2}}%
  }%
}}
\makeatother

\begin{document}

X\textsupsub{ab}{c}X\textsupsub{c}{ab}X

\end{document}

\strut如果愿意,可以添加到第二个参数。

在此处输入图片描述

答案2

stackengine包以 的形式直接提供此功能\stackanchor。如果堆叠类型为Short,则子标和上标之间的间隙将设置为指定长度。这在形式上模仿了数学模式下子标和上标的自然行为。对于短堆叠,间隙以数学轴为中心。

另一方面,如果应用程序要求将子标和上标设置在固定的垂直位置,而不管子标和上标的自然高度如何,则可以将堆叠类型设置为Long,它在子标和上标之间使用指定的基线跳跃。在长堆叠的情况下,子标和上标的基线关于文本的基线对称

\documentclass{article}
\usepackage{stackengine}
\setstackgap{S}{2pt}% SHORT STACK DEFAULT GAP
\setstackgap{L}{.7\baselineskip}% LONG STACK DEFAULT BASELINESKIP
\def\stackalignment{l}% LEFT STACKING ALIGNMENT
\begin{document}
%\def\stacktype{S}% SHORT STACK (DEFAULT) SETS INTER-LINE GAP
X\stackanchor{ab}{c}X\stackanchor{c}{ab}X

\def\stacktype{L}% LONG STACK SETS INTER-LINE BASELINESKIP
X\stackanchor{ab}{c}X\stackanchor{c}{ab}X
\end{document}

在此处输入图片描述

为了完整性,如果确实希望在数学模式下设置堆栈,则可以声明\stackMath(全局声明),或者\ensurestackMath{}使用\stackanchor

相关内容