항상 정확한 간격을 갖는 \phantom(주변 환경을 고려)

항상 정확한 간격을 갖는 \phantom(주변 환경을 고려)

나는 정기적으로 \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)의 경우 예를 들어 올바른 간격을 시뮬레이션할 수 없었기 \phantom{{}={}}\ldots때문에 마침내 이 질문을 하게 되었습니다. ;-)

참고로 나는 결과 명령에 대한 좋은 이름 제안(또는 내 선택에 대한 피드백)을 동시에 찾고 있습니다. \phantombridge나는 은유적으로 보이지 않는 다리의 눈에 보이는 두 개의 교대 이전과 이후의 객체를 고려해야 하기 때문에 를 먼저 생각했습니다 . 그러나 이제 아치는 기본적으로 동일한 개념이므로 " 더 높은 순위의 a"(천사 대 대천사 비교) \archphantom라는 의미가 추가된 를 선호합니다.\phantom

답변1

간격은 원자와 인접한 원자의 수학 클래스에 의해 영향을 받습니다. 추가의 일반적인 트릭을 사용 {}하면 원자가 \mathrel관계로 유지되고 효율적으로 수학 코드로 바뀌지 않고 간격을 잃을 수 있지만, 아시다시피 인접한 항목이 수학 코드가 아닌 경우 항상 올바른 간격을 얻지는 않습니다.

당신이 사용할 수있는

\mathrel{\phantom{=}}

클래스를 숨기고 =다시 주장합니다 \mathrel.

bm인수의 수학 클래스를 조사하고 자동으로 추가하기 위해 패키지 에서 일부 코드를 훔치는 것이 가능할 수 있지만 \mathrel그렇게 하지 않을 것 같습니다. 그렇게 하면 코드가 매우 취약해질 것입니다.

인수에 하나 이상의 기호가 포함되어 있으면 어떤 표현식이든 박싱하면 신축성 있는 접착제가 자연스러운 너비로 고정되는 반면, 박싱되지 않은 버전은 이에 따라 늘어나거나 줄어들 수 있으므로 간격이 어쨌든 영향을 받을 수 있습니다.

관련 정보