Контекстно-зависимые «единицы» длины в LaTeX

Контекстно-зависимые «единицы» длины в LaTeX

Я хотел бы включить в какой-нибудь макрос разделительный пробел, который был бы «контекстно-зависимым» (в том смысле, что когда макрос вызывается, например, внутри нижнего индекса, разделительный пробел соответственно уменьшается).

Есть ли какая-то конкретная команда, вызывающая такое поведение?

В противном случае, у меня возникает соблазн использовать команду \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}

Очевидно, что масштабный коэффициент равен 1 для \textstyleи \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}

введите описание изображения здесь

Связанный контент