.png)
Я регулярно использую его \phantom
для визуального выравнивания элементов в своих документах, и часто мне приходится вручную заполнять пробелы, которые обрезаются путем удаления атомов (чего я не до конца понимаю) между объектами до и после \phantom
--- обычно это работает путем добавления {}
' внутри \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
атому оставаться отношением и не превращаться фактически в mathord и не терять интервал, но, как вы заметили, он не всегда получает правильный интервал, если соседние элементы не являются mathord.
Вы можете использовать
\mathrel{\phantom{=}}
который скрывает =
и заново утверждает \mathrel
класс.
Можно было бы украсть часть кода из bm
пакета, чтобы опрашивать математический класс аргумента и добавлять его \mathrel
автоматически, но я не думаю, что я бы это сделал, это сделало бы код очень хрупким.
Обратите внимание, что если аргумент содержит более одного символа, то в некоторых случаях интервал будет затронут в любом случае, поскольку упаковка любого выражения замораживает эластичный клей на его естественной ширине, тогда как неупакованная версия может быть растянута или сжата, в зависимости от ситуации.