
私は定期的に を使って\phantom
文書内のものを視覚的に整列させていますが、 の前後のオブジェクト間のアトム (よく理解していません) を削除することで切り取られたスペースを手動で埋めなければならないことがよくあります。通常、これは引数内に 's\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
。これは、 の前後のオブジェクト (比喩的に言えば、目に見えない橋の 2 つの目に見える橋台) を考慮する必要があるためです。ただし、アーチは基本的に同じ概念であるため、 の方が好きです。\archphantom
これには、「より高位の」という含意も追加されています\phantom
(天使と大天使を比較してください)。
答え1
間隔は、アトムと隣接するアトムの数学クラスによって影響を受けます。通常の追加トリックにより、アトムは関係として残り、事実上数学に変換されて間隔が失われることは{}
あり\mathrel
ません。ただし、ご指摘のとおり、隣接する項目が数学でない場合は、必ずしも正しい間隔が確保されるとは限りません。
使用できます
\mathrel{\phantom{=}}
クラスを非表示に=
して再度アサートします\mathrel
。
bm
パッケージからいくつかのコードを盗んで、引数の数学クラスを調べ、自動的に追加することは可能です\mathrel
が、そうするとコードが非常に脆弱になるため、そうはしないと思います。
引数に複数のシンボルが含まれている場合、式をボックス化すると伸縮性のある接着剤が自然な幅で固定されるのに対し、ボックス化されていないバージョンは状況に応じて伸縮するため、場合によっては間隔が影響を受けることに注意してください。