いくつかのマクロに、「コンテキスト依存」の区切りスペースを含めたいと思います (つまり、マクロがたとえばサブスクリプト内で呼び出されると、区切りスペースがそれに応じて減少するという意味です)。
このような動作を生成する特定のコマンドはありますか?
そうでなければ、次のコマンドを使用して\phantom
シミュレートしたくなります。
\newcommand{\contextseparate}[2]{#1 \phantom{M} #2}
この最後のアプローチは受け入れられますか? (なぜか私には良くないように見えます)
答え1
\ThisStyle{}
パッケージからマクロ定義を埋め込むとscalerel
、\LMpt
と は\LMex
Local-Math のサイズに応じて変化する長さとして認識されます。
\LMpt
より具体的には、およびのスケーリング係数は\LMex
次のように定義されています(ただし、リセットすることもできます)。
\def\scriptstyleScaleFactor{0.7}
\def\scriptscriptstyleScaleFactor{0.5}
\textstyle
明らかに、およびのスケール係数は 1 です\displaystyle
。MWE は次のようになります。
\documentclass{article}
\usepackage{scalerel}
\newcommand{\contextseparate}[2]{\ThisStyle{#1\kern1.5\LMex#2}}
\begin{document}
$\contextseparate{A}{B}$\par
$\scriptstyle\contextseparate{A}{B}$\par
$\scriptscriptstyle\contextseparate{A}{B}$
\end{document}
アクセスできない場所 (ボックス内など) で現在の数式スタイルを呼び出す必要がある場合は、 を呼び出して、\SavedStyle
関連する の開始時にアクティブだったスタイルを復元できます\ThisStyle
。
\documentclass{article}
\usepackage{scalerel}
\newcommand{\contextseparate}[2]{\ThisStyle{\fboxsep=0pt%
#1\fbox{$\phantom{\SavedStyle m}$}#2}}
\begin{document}
$\contextseparate{A}{B}$\par
$\scriptstyle\contextseparate{A}{B}$\par
$\scriptscriptstyle\contextseparate{A}{B}$
\end{document}