Kontextsensitive Längeneinheiten in LaTeX

Sep 17 2020

Ich möchte in ein Makro einen Trennraum aufnehmen, der "kontextsensitiv" ist (in dem Sinne, dass sich der Trennraum entsprechend verringert, wenn das Makro beispielsweise innerhalb eines Index aufgerufen wird).

Gibt es einen bestimmten Befehl, der ein solches Verhalten erzeugt?

Ansonsten bin ich versucht, den Befehl \phantomzu verwenden, um ihn zu simulieren, sagen wir:

\newcommand{\contextseparate}[2]{#1 \phantom{M} #2} 

Ist dieser letzte Ansatz akzeptabel? (Aus irgendeinem Grund sieht es für mich schlecht aus)

Antworten

4 StevenB.Segletes Sep 17 2020 at 08:26

Wenn Sie die Makrodefinition \ThisStyle{}aus dem scalerelPaket einbetten , erkennt sie \LMptund \LMexals Längen, die mit der Größe von Local-Math skaliert werden.

Insbesondere sind die Skalierungsfaktoren für \LMptund \LMexvordefiniert (können aber zurückgesetzt werden) als

\def\scriptstyleScaleFactor{0.7}
\def\scriptscriptstyleScaleFactor{0.5}

Offensichtlich ist der Skalierungsfaktor 1 für \textstyleund \displaystyle. Die 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 mathematischen Stil jemals an einer Stelle abrufen müssen, an der er sonst nicht zugänglich wäre (z. B. in einer Box), können Sie ihn aufrufen \SavedStyle, um den zu Beginn des zugeordneten Stils aktiven Stil wiederherzustellen \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}