\NewDocumentCommand 装飾/トークン構文

\NewDocumentCommand 装飾/トークン構文

編集済み: David Carlisle がコメントで親切に回答を提供してくれました。これは \makeatletter の後の定義です。

\NewDocumentCommand で装飾文字を使用して、\Gamma の下付き文字をカーニングするマクロを定義しようとしていますが (より一般的な問題のテストケースとして)、プライム文字の処理方法がわかりません。プライム文字は引数を取らないため、以下の 2 つのコメント付きバージョンを試しましたが、どちらの場合も、最後の例では _ が装飾文字として扱われなくなりました。これを修正する方法はありますか?

\documentclass{article}

\NewDocumentCommand{\kernedGamma}{e{^_}}{\Gamma\IfValueT{#1}{^{#1}}\IfValueT{#2}{_{\mkern-3mu #2}}}
%\NewDocumentCommand{\kernedGamma}{e{^_'}}{\Gamma\IfValueT{#1}{^{#1}}\IfValueT{#2}{_{\mkern-3mu #2}}\IfValueT{#3}{^{\prime}#3}}
%\NewDocumentCommand{\kernedGamma}{e{^_}t'}{\Gamma\IfValueT{#1}{^{#1}}\IfValueT{#2}{_{\mkern-3mu #2}}\IfBooleanT{#3}{^{\prime}}}

\makeatletter
\RenewDocumentCommand{\kernedGamma}{e{^_}t'e{_}}{\Gamma\IfValueT{#1}{^{#1}}
\IfValueT{#2}{_{\mkern-3mu #2}}\IfBooleanT{#3}{^{\prime}}
\IfValueT{#4}{\IfValueT{#2}{\@latex@error{embellishment used twice}}_{\mkern-3mu #4}}}
\makeatother

\begin{document}

$\Gamma_1$ $\kernedGamma_1$ 

$\Gamma^2_2$ $\kernedGamma^2_2$ 

$\Gamma_1'$ $\kernedGamma_1'$ 

$\Gamma'_1$ $\kernedGamma'_1$ 

\end{document}

答え1

使用e{^_}t'e{^_}

\documentclass{article}

\NewDocumentCommand{\kernedGamma}{e{^_}t'e{^_}}{%
  \kernedGammaAux{#1}{#2}{#3}{#4}{#5}%
}

\ExplSyntaxOn

\NewDocumentCommand{\kernedGammaAux}{mmmmm}
 {
  \bourke_kernedGamma:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
 }

\cs_new_protected:Nn \bourke_kernedGamma:nnnnn
 {%#1 = first sup, #2 = first sub, #3 = prime, #4 = second sup, #5 = second sub
  \Gamma
  \bool_if:nTF { #3 }
   {% there's a prime
    \sp{ \tl_if_novalue:nF { #1 } { #1 } \prime \tl_if_novalue:nF { #4 } { #4 } }
   }
   {%
    \exp_args:Ne \tl_if_empty:nF { \__bourke_double:nn { #1 } { #4 } }
     {
      \sp{ \__bourke_double:nn { #1 } { #4 } }
     }
   }
  \sb{ \mkern -3mu ~ \__bourke_double:nn { #2 } { #5 } }
 }

\cs_new:Nn \__bourke_double:nn
 {
  \tl_if_novalue:nF { #1 } { \exp_not:n { #1 } } 
  \tl_if_novalue:nF { #2 } { \exp_not:n { #2 } } 
 }

\ExplSyntaxOff

\begin{document}

$\kernedGamma$ $\Gamma$

$\kernedGamma'$ $\Gamma'$ $\Gamma^{\prime}$

$\kernedGamma'^{2}_{i}$ $\Gamma'^{2}_{i}$

$\kernedGamma_{i}^{2}'$ $\Gamma^{2\prime}_{i}$

$\kernedGamma_{i}'^{2}$ $\Gamma'^{2}_{i}$

$\kernedGamma_{i}^{2}$ $\Gamma^{2}_{i}$

\end{document}

(Imgur が許可したら、後で画像を追加します)

関連情報