.png)
Eu uso regularmente \phantom
para 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 \phantom
argumento, 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 \phantom
de 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 \mathrel
classe.
Seria possível roubar algum código do bm
pacote para interrogar a classe matemática do argumento e adicioná-lo \mathrel
automaticamente, 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.