如何在数学模式下遇到左分隔符时全局重新定义 \prime 的字距调整?

如何在数学模式下遇到左分隔符时全局重新定义 \prime 的字距调整?

这是我的 MWE:

% !TEX program = lualatex
\documentclass[preview,border={5mm 2.5mm 5mm 0mm},varwidth]{standalone}
\usepackage{mathtools}
\usepackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
    \setmathfont{Latin Modern Math}
\usepackage{setspace}\setdisplayskipstretch{}

\newcommand{\testprime}[3][-2]{A' #2 x #3 \; B' #2 x #3 \; C' #2 x #3 \; P' #2 x #3 \; Q' #2 x #3 \; R' #2 x #3 \; f' #2 x #3 \; g' #2 x #3 \; h' #2 x #3}
\newcommand{\testkernedprimeleftdelimiter}[3][-2]{A' \mkern#1mu#2 x #3 \; B' \mkern#1mu#2 x #3 \; C' \mkern#1mu#2 x #3 \; P'  \mkern#1mu#2 x #3 \; Q' \mkern#1mu#2 x #3 \; R' \mkern#1mu#2 x #3 \; f' \mkern#1mu#2 x #3 \; g' \mkern#1mu#2 x #3 \; h' \mkern#1mu#2 x #3}

\begin{document}
\onehalfspacing%
\[\testprime{(}{)}\]
\[\testkernedprimeleftdelimiter{(}{)}\]

\[\testprime{[}{]}\]
\[\testkernedprimeleftdelimiter[-0.5]{[}{]}\]

\[\testprime{\{}{\}}\]
\[\testkernedprimeleftdelimiter{\{}{\}}\]

\end{document}

最小工作示例

我想全局重新定义'或仅当在数学模式下遇到左分隔符(特别是和,以及)时^{\prime}使用 进行字距调整(可能使用?)。\mkern-2mu(\{-0.5mu[\@ifnextchar

我如何实现这个目标?

*相关:这TeX.SX 问答'以及中的定义latex.ltx

\def\active@math@prime{^\bgroup\prim@s}
{\catcode`\'=\active \global\let'\active@math@prime}
\def\prim@s{%
  \prime\futurelet\@let@token\pr@m@s}
\def\pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\def\pr@@@s#1{\prim@s}
\def\pr@@@t#1#2{#2\egroup}

答案1

您可以使用 来完成\@ifnextchar

\documentclass{article}

\makeatletter

\def\pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \expandafter\expandafter\expandafter\pr@@@end
    \fi
  \fi}
\def\pr@@@end{\egroup
    \@ifnextchar({\mkern-2mu }{\@ifnextchar\{{\mkern-2mu }{\@ifnextchar[{\mkern-.5mu }{}}}}

\makeatother

\begin{document}

$A'\ B''\ C''^{xy}\ f''(x)\ g'[y]\ X'''\{z\}$

\end{document}

输出

请注意,在诸如 的情况下f'^x (...不会添加空格。如果您确实需要它,您还必须将更改\egroup为。\pr@@@t\pr@@@end

相关内容