\phantom 始终具有正确的间距(考虑到周围环境)

\phantom 始终具有正确的间距(考虑到周围环境)

我经常使用\phantom它来在文档中直观地对齐内容,并且经常需要手动填充通过删除之前和之后的对象之间的原子(我不完全理解)而切断的空格\phantom---通常通过在参数{}内添加's 来实现\phantom,但并非总是如此。

在...的帮助下https://tex.stackexchange.com/a/95923/42225,我拼凑了以下内容,但我觉得应该有一个更优雅的解决方案,不需要前面和后面的对象作为参数(我将其设为可选)。

\documentclass{article}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{xparse}

\makeatletter
\NewDocumentCommand{\archphantom}{O{{}} m O{{}}}{%
    \setbox0\hbox{$#1#2#3$}%
    \setbox1\hbox{$#1{#2}#3$}%
    \dimen@\dimexpr\wd0-\wd1%
    #1\phantom{#2}\kern\dimen@#3%
}
\makeatother

\begin{document}

\begin{align*}
    x & = \fbox{\hspace{5cm}\vphantom{b}}+\ldots\\
    &\archphantom{=}[\ldots] + \fbox{\hspace{5cm}\vphantom{b}} && \text{works}\\
    &\phantom{=}\,\:\ldots + \fbox{\hspace{5cm}\vphantom{b}} && \text{trial $\&$ error}\\
    &\phantom{{}={}}\ldots + \fbox{\hspace{5cm}\vphantom{b}} && \text{doesn't work}
\end{align*}

\end{document}

特别是对于这种情况(=+ \ldots),我无法通过例如模拟正确的间距\phantom{{}={}}\ldots,这促使我最终提出这个问题。;-)

顺便说一句,我同时在寻找结果命令的好名字建议(或对我的选择的反馈)。我首先想到的是\phantombridge,因为我需要考虑前后对象——隐喻地讲,它们是一座看不见的桥的两个可见桥台。然而,现在,由于拱门基本上是相同的概念,我更喜欢\archphantom,它还具有“更高等级”的附加内涵\phantom(比较天使和大天使)。

答案1

间距受原子和相邻原子的数学类别影响。通常的添加技巧{}允许\mathrel原子保持关系,而不会有效地转变为数学并失去其间距,但正如您所注意到的,如果相邻项不是数学,它并不总是获得正确的间距。

您可以使用

\mathrel{\phantom{=}}

隐藏=并重新确认该类\mathrel

可以从bm包中窃取一些代码来查询参数的数学类并\mathrel自动添加,但我不认为我会这样做,这会使代码非常脆弱。

请注意,如果参数包含多个符号,那么在某些情况下,间距无论如何都会受到影响,因为对任何表达式进行装箱都会将可拉伸胶水冻结在其自然宽度,而未装箱的版本可能会被拉伸或收缩,具体取决于情况。

相关内容