\phantom com espaçamento sempre correto (levando em consideração seu entorno)

\phantom com espaçamento sempre correto (levando em consideração seu entorno)

Eu uso regularmente \phantompara alinhar visualmente as coisas em meus documentos e muitas vezes tenho que preencher manualmente os espaços cortados removendo os átomos (que não entendo completamente) entre os objetos antes e depois do \phantom--- normalmente isso funciona adicionando {}'s dentro do \phantomargumento, mas nem sempre.

Com a ajuda dehttps://tex.stackexchange.com/a/95923/42225, juntei o seguinte, mas sinto que deveria haver uma solução mais elegante que não exija os objetos anteriores e seguintes como argumentos (que tornei opcionais).

\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}

Para este caso em particular ( =+ \ldots), não consegui simular o espaçamento correto por eg \phantom{{}={}}\ldots, o que me motivou a finalmente fazer esta pergunta. ;-)

Como observação lateral, estou procurando sugestões de bons nomes para o comando resultante (ou feedback para minha escolha). Pensei primeiro nisso \phantombridge, pois preciso levar em conta os objetos antes e depois - metaforicamente, os dois pilares visíveis de uma ponte invisível. Agora, porém, como um arco é basicamente o mesmo conceito, prefiro \archphantom, que também tem a conotação adicional de "um \phantomde categoria superior" (compare anjo vs. arcanjo).

Responder1

O espaçamento é afetado pela classe matemática do átomo e dos átomos adjacentes. O truque usual de adição {}permite que um \mathrelátomo permaneça como uma relação e não se transforme efetivamente em uma matemática e perca seu espaçamento, mas como você observa, nem sempre obtém o espaçamento correto se os itens adjacentes não forem matemáticos.

Você pode usar

\mathrel{\phantom{=}}

que esconde =e reafirma a \mathrelclasse.

Seria possível roubar algum código do bmpacote para interrogar a classe matemática do argumento e adicioná-lo \mathrelautomaticamente, mas acho que não faria isso, tornaria o código muito frágil.

Observe que se o argumento contiver mais de um símbolo, em alguns casos, o espaçamento será afetado de qualquer maneira, pois o enquadramento de qualquer expressão congela a cola elástica em sua largura natural, enquanto a versão sem caixa pode ser esticada ou encolhida, dependendo.

informação relacionada