
我經常用\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
),我無法透過 eg 模擬正確的間距\phantom{{}={}}\ldots
,這促使我最終提出這個問題。 ;-)
作為旁注,我同時正在為結果命令尋找好的名稱建議(或對我的選擇的回饋)。我首先想到的是\phantombridge
,因為我需要考慮之前和之後的物體——比喻為一座看不見的橋的兩個可見的橋台。然而,現在,由於拱門基本上是相同的概念,所以我更喜歡,它還具有“更高級別”\archphantom
的附加含義(比較天使與大天使)。\phantom
答案1
間距受原子和相鄰原子的數學類別的影響。添加的常用技巧{}
允許\mathrel
原子保持關係,而不會有效地變成數學琴並失去其間距,但正如您所注意到的,如果相鄰項不是數學琴,它並不總是獲得正確的間距。
您可以使用
\mathrel{\phantom{=}}
它隱藏=
並重新聲明該類別\mathrel
。
可以從bm
套件中竊取一些程式碼來詢問參數的數學類別並\mathrel
自動添加,但我不認為我會這樣做,這會使程式碼非常脆弱。
請注意,如果參數包含多個符號,則在某些情況下,間距無論如何都會受到影響,因為裝箱任何表達式都會將彈性膠水凍結在其自然寬度,而未裝箱的版本可能會拉伸或收縮,取決於。