単一の引数を複数の部分に分割する

単一の引数を複数の部分に分割する

A\!\!_B\!C数式モードでコマンドをマクロとして定義したいのですが、以下を使用しています。

\newcommand{\cmp}[3]{#1\!\!_#2\!#3}

残念ながら、不足しているというエラーが表示されます{}。ヒントがあればお願いします。

カンマで区切って、引数を 1 つだけ持つ Mathematica のような構文を取得する可能性はありますか?

答え1

例えば:

\def\cmp#1{\cmpA#1,}
\def\cmpA#1,#2,#3,{{#1}\!\!_{#2}\!{#3}}

$a = \cmp{A,B,C}$

しかし、なぜ醜い文字の塊が必要なのか理解できません。

答え2

元のコマンドでは、3 つの引数を指定することを覚えておく必要があります。

パッケージを使用すると、xparse1 つの引数を特定のシンボル (ここではコンマ) で分割できるため、Mathematica で慣れている構文を使用できます。

出力は少し奇妙に見えますが、これは別の問題です。

\documentclass{article}
\usepackage{xparse}
\newcommand{\cmp}[3]{#1\!\!_{#2}\!#3}
\NewDocumentCommand{\cmpA}{  >{\SplitArgument{2}{,}} m}
{\cmp#1}%<- feeding the three arguments to the original command

\begin{document}
\[ \cmp{A}{B}{C} \]
\[ \cmpA{A,B,C} \]
\end{document}

関連情報