第二次补充:同一问题的先前答案

第二次补充:同一问题的先前答案

我希望公式中的“AB”下标垂直对齐 - 理想情况下,通过调整第二个下标以匹配第一个下标的当前位置。

公式 梅威瑟:

\documentclass{article} 
\usepackage{braket}
\begin{document}
    \begin{equation}
        \rho_{AB}=\ket{0}_{AB}\otimes_{AB}\bra{0}
    \end{equation}
\end{document}

我尝试使用 \vphantom 按照以下方式解决这个问题:

\documentclass{article} 
\usepackage{braket}
\begin{document}
    \begin{equation}
        \rho_{AB}=\ket{0}_{AB}\otimes\vphantom{\ket{0}}_{AB}\bra{0}
    \end{equation}
\end{document}

但是,这并没有产生明显的差异,所以我现在很困惑。

另一个 MWE 的提案 (Manuel Kuehner)

即使\phantom垂直位置完全改变......

\documentclass{article} 
\usepackage{braket}
\begin{document}
    \begin{equation}
        \rho_{AB} = \ket{0}_{AB} \otimes_{AB} \bra{0}
    \end{equation}
    \begin{equation}
        \rho_{AB} = \ket{0}_{AB} \otimes\ket{0}_{AB} \bra{0}
    \end{equation}
    \begin{equation}
        \rho_{AB} = \ket{0}_{AB} \otimes\phantom{\ket{0}}_{AB} \bra{0}
    \end{equation}        
\end{document}

在此处输入图片描述

答案1

不起作用的原因\vphantom很微妙,并且与其实施方式相关的一些技术细节有关。

的定义\vphantom

\def\vphantom{\v@true\h@false\ph@nt}

\ph@nt在设置两个开关以记录幻影的垂直尺寸要保留而水平尺寸要丢弃的事实后,调用辅助宏。相比之下,其他两种幻影的定义是

\def\hphantom{\v@false\h@true\ph@nt}
\def\phantom{\v@true\h@true\ph@nt}

接下来,这里是的定义\ph@nt

\def\ph@nt{%
  \ifmmode
    \expandafter\mathpalette\expandafter\mathph@nt
  \else
    \expandafter\makeph@nt
  \fi}

如果我们处于数学模式(我们假设如此,我们不会遵循另一个分支),两个\expandafters 导致条件完成,接下来将执行以下标记:

\mathpalette\mathph@nt

现在,用法\mathpalette已经解释过了,例如,在\mathpalette 的奥秘。这里重要的是,它在当前数学列表中插入一个称为\mathchoice节点的设备,该设备用于记录幻影在所有四种可能的数学样式中的高度(和/或宽度),从\displaystyle\scriptscriptstyle(这是必要的,因为幻影被实现为一个空的卧式箱体,而不是数学子公式)。现在,似乎很容易被遗忘的一件事是不是数学列表中的每个项目都可以带有下标/上标:只有“原子”可以,而节点\mathchoice不是原子。根据第 291 页所述的规则TeXbook,当前数学列表未以原子结尾时出现的上标(或下标)命令会将一个新的 Ord 原子(所有字段均为空)附加到列表中,然后将上标(下标)添加到该原子。在我们的例子中,这意味着下_{AB}标应用于空原子,而不是像预期的那样应用于幻像。

补救措施很简单:只需将包裹\vphantom在一对花括号中:这将生成一个包含\mathchoice幻像的子公式,并且下标将附加到该子公式。

添加: 在下面的代码中,我们展示了如何解决该问题中提出的具体问题。特别值得注意的是:的构造\oplus需要包含在\mathbin,因为它旨在用作二元运算符(Bin) 原子,而不是 Ord 原子。取消注释注释行以查看诊断消息,以证明上述声明。我感谢 Peter Grill 提供的以下部分代码,这些代码是我从他的(现已删除)回答中借用的。

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\usepackage{braket}

\newcommand*{\AdjustSubscript}[1][\ket{0}]{%
  {\vphantom{#1}}%
}

\makeatletter

\newcommand*\ShowLists{%
%   \showboxbreadth \@M
%   \showboxdepth   \sixt@@n
%   \tracingonline  \@ne
%   \showlists
}

\makeatother



\begin{document}

Some text $\rho\AdjustSubscript_{AB} =
\ket{0}_{AB}\mathbin{\otimes\AdjustSubscript_{AB}}\bra{0}\ShowLists$.\ShowLists
%
\begin{equation}
    \rho\AdjustSubscript_{AB} =
        \ket{0}_{AB}\mathbin{\otimes\AdjustSubscript_{AB}}\bra{0}
\end{equation}
%
Some more text.

\end{document}

输出如下:

代码输出

第二次补充:同一问题的先前答案

这个问题之前被问过不止一次:事实上,我记得之前回答过类似的问题,但我记不清具体时间和地点了。现在我做了一些搜索,发现这个问题似乎有一个非常有趣的历史。

如果你在这个网站上搜索“\vphantom \mathchoice”,第一个结果之一是@wipet 的回答针对题为“\vphantom 和上标”:这个答案给出了与这个相同的解释和相同的补救措施。但是已经有一些先前的答案以基本相同的方式处理和解决了这个问题;其中,请允许我提请您注意我的这个答案xelatex + unicode+math + vphantom 中的错误

当然,@egreg 也回答过类似的问题,并且总是提出相同的解决方案;例如:

然而,看到评论xelatex + unicode+math + vphantom 中的错误,如上所述,看来,毕竟,我可以声称\mathchoice自己在指出 的作用方面有一些功绩。由于您每天都能谦虚地向 @egreg 提出建议,所以我希望如果我对此吹嘘一点,我会得到原谅…… :-)

答案2

一个简单的\smash方法就可以达到目的:

\documentclass{article}
\usepackage{braket}
\begin{document}

    \begin{equation}
        \rho_{AB}=\smash{\ket{0}}_{AB}\otimes_{AB}\bra{0}
    \end{equation}

\end{document} 

在此处输入图片描述

奇怪的是,如果你定义自己的\bra\ket使用\DeclarePairedDelimiterfrom mathtools,则不存在对齐问题:

\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter{\myket}\lvert\rangle
\DeclarePairedDelimiter{\mybra}\langle\rvert 

\begin{document}

    \begin{equation}
        \rho_{AB}=\myket{0}_{AB}\otimes_{AB}\mybra{0}
    \end{equation}

\end{document}

在此处输入图片描述

相关内容