我想在文本模式下同时使用上标和下标。我无法使用数学模式,因为我创建了只能在文本模式下工作的宏。
我发现了这个问题:将 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
。如果堆叠类型为S
hort,则子标和上标之间的间隙将设置为指定长度。这在形式上模仿了数学模式下子标和上标的自然行为。对于短堆叠,间隙以数学轴为中心。
另一方面,如果应用程序要求将子标和上标设置在固定的垂直位置,而不管子标和上标的自然高度如何,则可以将堆叠类型设置为L
ong,它在子标和上标之间使用指定的基线跳跃。在长堆叠的情况下,子标和上标的基线关于文本的基线对称
\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
。