\phantom con espaciado siempre correcto (teniendo en cuenta su entorno)

\phantom con espaciado siempre correcto (teniendo en cuenta su entorno)

Normalmente suelo \phantomalinear visualmente cosas en mis documentos y, a menudo, tengo que rellenar manualmente los espacios que se cortan eliminando los átomos (lo cual no entiendo del todo) entre los objetos antes y después del \phantom---normalmente esto funciona. agregando {}'s dentro del \phantomargumento, pero no siempre.

Con la ayuda dehttps://tex.stackexchange.com/a/95923/42225, He improvisado lo siguiente, pero creo que debería haber una solución más elegante que no requiera los objetos anteriores y siguientes como argumentos (que he hecho opcionales).

\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 en particular ( =+ \ldots), no pude simular el espaciado correcto mediante, por ejemplo \phantom{{}={}}\ldots, lo que me motivó a finalmente hacer esta pregunta. ;-)

Como comentario adicional, al mismo tiempo estoy buscando sugerencias de buenos nombres para el comando resultante (o comentarios a mi elección). Primero pensé en \phantombridge, ya que necesito tener en cuenta los objetos antes y después, metafóricamente los dos pilares visibles de un puente invisible. Ahora, sin embargo, dado que arco es básicamente el mismo concepto, prefiero \archphantom, que también tiene la connotación adicional de "un \phantomde rango superior" (compárese ángel versus arcángel).

Respuesta1

El espaciado se ve afectado por la clase matemática del átomo y los átomos adyacentes. El truco habitual de sumar {}permite que un \mathrelátomo permanezca como una relación y no se convierta efectivamente en una palabra matemática y pierda su espaciado, pero como puede observar, no siempre obtiene el espaciado correcto si los elementos adyacentes no son una palabra matemática.

Puedes usar

\mathrel{\phantom{=}}

que oculta =y reafirma la \mathrelclase.

Sería posible robar algo de código del bmpaquete para interrogar la clase matemática del argumento y agregarlo \mathrelautomáticamente, pero no creo que haría eso, haría que el código fuera muy frágil.

Tenga en cuenta que si el argumento contiene más de un símbolo, en algunos casos el espaciado se verá afectado de todos modos, ya que al encuadrar cualquier expresión se congela el pegamento elástico en su ancho natural, mientras que la versión sin caja se puede estirar o encoger, dependiendo.

información relacionada