Я хотел бы включить в какой-нибудь макрос разделительный пробел, который был бы «контекстно-зависимым» (в том смысле, что когда макрос вызывается, например, внутри нижнего индекса, разделительный пробел соответственно уменьшается).
Есть ли какая-то конкретная команда, вызывающая такое поведение?
В противном случае, у меня возникает соблазн использовать команду \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}