Eu gostaria de incluir em alguma macro um espaço de separação que seja "sensível ao contexto" (no sentido de que quando a macro é chamada, por exemplo, dentro de um subscrito, o espaço de separação é reduzido de acordo).
Existe algum comando específico que produz tal comportamento?
Caso contrário, fico tentado a usar o comando \phantom
para simulá-lo, digamos:
\newcommand{\contextseparate}[2]{#1 \phantom{M} #2}
Esta última abordagem é aceitável? (Por alguma razão, parece ruim para mim)
Responder1
Se você incorporar a definição de macro \ThisStyle{}
do scalerel
pacote, ela reconhecerá \LMpt
e \LMex
como comprimentos que são dimensionados com o tamanho do Local-Math.
Mais particularmente, os fatores de escala para \LMpt
e \LMex
são predefinidos (mas podem ser redefinidos) como
\def\scriptstyleScaleFactor{0.7}
\def\scriptscriptstyleScaleFactor{0.5}
Obviamente, o fator de escala é 1 para \textstyle
e \displaystyle
. O 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}
Se você precisar recuperar o estilo matemático atual em um local onde ele seria inacessível (como dentro de uma caixa), você poderá invocar \SavedStyle
para recuperar qualquer estilo que estivesse ativo no início do arquivo \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}