Ich möchte in ein Makro ein Trennzeichen einfügen, das „kontextsensitiv“ ist (in dem Sinne, dass sich das Trennzeichen entsprechend verkleinert, wenn das Makro beispielsweise innerhalb eines Index aufgerufen wird).
Gibt es einen bestimmten Befehl, der ein solches Verhalten erzeugt?
Andernfalls bin ich versucht, den Befehl zu verwenden, \phantom
um es zu simulieren, etwa:
\newcommand{\contextseparate}[2]{#1 \phantom{M} #2}
Ist dieser letzte Ansatz akzeptabel? (Aus irgendeinem Grund sieht er für mich schlecht aus)
Antwort1
Wenn Sie die Makrodefinition \ThisStyle{}
aus dem scalerel
Paket einbetten, erkennt es \LMpt
und \LMex
als Längen, die mit der Local-Math-Größe skalieren.
Genauer gesagt sind die Skalierungsfaktoren für \LMpt
und \LMex
vordefiniert (können aber zurückgesetzt werden) als
\def\scriptstyleScaleFactor{0.7}
\def\scriptscriptstyleScaleFactor{0.5}
Offensichtlich ist der Skalierungsfaktor 1 für \textstyle
und \displaystyle
. Das 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}
Wenn Sie den aktuellen Mathematikstil jemals an einer Stelle abrufen müssen, wo er sonst nicht zugänglich wäre (z. B. in einer Box), können Sie aufrufen, \SavedStyle
um den Stil wiederherzustellen, der zu Beginn des zugehörigen aktiv war \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}