我经常使用\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
自动添加,但我不认为我会这样做,这会使代码非常脆弱。
请注意,如果参数包含多个符号,那么在某些情况下,间距无论如何都会受到影响,因为对任何表达式进行装箱都会将可拉伸胶水冻结在其自然宽度,而未装箱的版本可能会被拉伸或收缩,具体取决于情况。