在数学模式下增加逗号后的跳过

在数学模式下增加逗号后的跳过

我想定义一个命令\widecomma,使其$\widecomma{a,b}$看起来与相同$a,~b$。以下是我的尝试。

\let\comma,
\newcommand{\widecomma}[1]{\begingroup\catcode`,=\active\newcommand,{\comma~}#1\endgroup}

但如果我在下面的 MWE 中尝试它,\inaccessible就会引发错误

\documentclass{article}

\let\comma,
\newcommand{\widecomma}[1]{\begingroup\catcode`,=\active\newcommand,{\comma~}#1\endgroup}

\begin{document}
$\widecomma{a,b}$
\end{document}

答案1

这比你的尝试要复杂一些。最好让角色数学活跃起来,而不是活跃起来一概而论,因此类别代码不会改变,并且\widecomma也可以用作另一个命令的参数。

该指令\let\comma=,不起作用,主要是因为你想保存数学代码逗号。

\documentclass{article}

% save the math code of the comma
\mathchardef\normalcomma=\mathcode`,
% define a suitable meaning for the active comma
\newcommand{\activatewidecomma}{%
  \begingroup\lccode`~=`, \lowercase{\endgroup\def~}{{\normalcomma}\ }%
}
% in the scope of \widecomma the space after the comma will be wider
\newcommand{\widecomma}[1]{%
  \begingroup
  % set up the wanted meaning and make the comma math active
  \activatewidecomma
  \mathcode`,="8000
  #1%
  \endgroup
}

\begin{document}

$\widecomma{a,b}$ (wide)

$a,b$ (normal)

\end{document}

在此处输入图片描述

但是,正如评论中指出的那样,下标或上标中的逗号不应受到此行为的影响。我们可以通过以下方式修复此问题。

\documentclass{article}

% save the math code of the comma
\mathchardef\normalcomma=\mathcode`,
% define a suitable meaning for the active comma
\newcommand{\activatewidecomma}{%
  \begingroup\lccode`~=`, \lowercase{\endgroup\let~}\makewidecomma
}
% in the scope of \widecomma the space after the comma will be wider
\newcommand{\widecomma}[1]{%
  \begingroup
  % set up the wanted meaning and make the comma math active
  \activatewidecomma
  \mathcode`,="8000
  #1%
  \endgroup
}
\newcommand{\makewidecomma}{%
  {\normalcomma}% comma as an ordinary symbol
  \nonscript\mskip 6mu plus 3mu minus 2mu % space only in text or display style
}

\begin{document}

$\widecomma{a,b}$ (wide)

$a,b$ (normal)

$\widecomma{a,H^{0,0}}$ (wide)

$a,H^{0,0}$ (normal)

\end{document}

在此处输入图片描述

答案2

根据评论中的请求,我提供了一个expl3基于拆分逗号列表的解决方案。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\widecomma}{ m }{
    \clist_use:nn { #1 } { {,}\  } % since ~ means space in expl3
}

\ExplSyntaxOff

\begin{document}

\( \widecomma{a, b, c} \)

\end{document}

在此处输入图片描述

编辑:我猜可以使用\def\cs_new:Npn或,\NewExpandableDocumentCommand因为是\clist_use:nn可扩展的。但我不确定将其设为\widecomma可扩展是否会产生意想不到的后果。可能不会。

相关内容