如何制作任意宽度的上标?

如何制作任意宽度的上标?

我正在尝试使以下两个命令具有相同的宽度:

\newcommand{\Bsh}{\ensuremath{B^{H}_{s}}\xspace}
\newcommand{\Bsl}{\ensuremath{B^{L}_{s}}\xspace}

为了避免这些难看的对齐问题:

在此处输入图片描述

我尝试过使用 \smash、\llap、\rlap、\clap、\phantom 等的组合,但没有成功。看来 \smash 在上标中不能按预期工作。

有人能帮帮我吗?谢谢。

答案1

这样也许可以。我为每个上标分配相同的左对齐宽度。

原始答案:

如果不需要脚本样式的话就好了。

\documentclass{article}
\usepackage{mathtools,xspace,eulervm}
\newcommand{\Bsh}{\ensuremath{B^{\mathmakebox[.6em][l]{H}}_{s}}\xspace}
\newcommand{\Bsl}{\ensuremath{B^{\mathmakebox[.6em][l]{L}}_{s}}\xspace}
\begin{document}
\begin{align*}
  \vert\Bsh\rangle &= 0\\
  \vert\Bsl\rangle &= 1
\end{align*}
\end{document}

在此处输入图片描述

修改后的答案:

经过编辑,可以更好地处理较小数学样式中的可扩展空间。

\documentclass{article}
\usepackage{mathtools,xspace,eulervm,scalerel}
\newcommand{\Bsh}{\ensuremath{B^{\ThisStyle{%
  \mathmakebox[2.05\LMex][l]{H}}}_{s}}\xspace}
\newcommand{\Bsl}{\ensuremath{B^{\ThisStyle{%
  \mathmakebox[2.05\LMex][l]{L}}}_{s}}\xspace}
\begin{document}
\begin{align*}
\scriptscriptstyle
  \vert\Bsh\rangle~
\scriptstyle
  \vert\Bsh\rangle~
\textstyle
  \vert\Bsh\rangle &= 0\\
\scriptscriptstyle
  \vert\Bsl\rangle~
\scriptstyle
  \vert\Bsl\rangle~
\textstyle
  \vert\Bsl\rangle &= 1
\end{align*}
\end{document}

在此处输入图片描述

答案2

让 TeX 帮你进行盒子测量\eqmakebox[<tag>][<align>]{<stuff>}(来自eqparbox)。不同元素/<stuff>具有相同元素的<tag>元素被设置在具有最大宽度的(文本)框中。您可以<align>根据每个框的情况手动调整设置,默认设置已c输入。

在此处输入图片描述

\documentclass{article}

\usepackage{eqparbox,amsmath}

\newcommand{\Bsh}{\ensuremath{B^{H}_{s}}}
\newcommand{\Bsl}{\ensuremath{B^{L}_{s}}}

\begin{document}

\begin{align*}
                 \lvert \Bsh \rangle &= x \\
                 \lvert \Bsl \rangle &= y \\
  \lvert \eqmakebox[B]{\Bsh} \rangle &= x \\
  \lvert \eqmakebox[B]{\Bsl} \rangle &= y
\end{align*}

\end{document}

这需要对与任何特定相关的最大宽度进行两次更改进行编译<tag>

相关内容