\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),我無法透過 eg 模擬正確的間距\phantom{{}={}}\ldots,這促使我最終提出這個問題。 ;-)

作為旁注,我同時正在為結果命令尋找好的名稱建議(或對我的選擇的回饋)。我首先想到的是\phantombridge,因為我需要考慮之前和之後的物體——比喻為一座看不見的橋的兩個可見的橋台。然而,現在,由於拱門基本上是相同的概念,所以我更喜歡,它還具有“更高級別”\archphantom的附加含義(比較天使與大天使)。\phantom

答案1

間距受原子和相鄰原子的數學類別的影響。添加的常用技巧{}允許\mathrel原子保持關係,而不會有效地變成數學琴並失去其間距,但正如您所注意到的,如果相鄰項不是數學琴,它並不總是獲得正確的間距。

您可以使用

\mathrel{\phantom{=}}

它隱藏=並重新聲明該類別\mathrel

可以從bm套件中竊取一些程式碼來詢問參數的數學類別並\mathrel自動添加,但我不認為我會這樣做,這會使程式碼非常脆弱。

請注意,如果參數包含多個符號,則在某些情況下,間距無論如何都會受到影響,因為裝箱任何表達式都會將彈性膠水凍結在其自然寬度,而未裝箱的版本可能會拉伸或收縮,取決於。

相關內容