作为命令参数的 Prime

作为命令参数的 Prime

假设我们处于数学模式,我想使用命令 \E 并产生以下行为。如果命令后面有一个或两个素数,即 \E' 或 \E'',那么我希望在这些情况下有某些表达式,比如 A 或 B。在所有其他情况下,我希望仅拥有 E,而不管 \E 之前或之后是什么。以下是测试

  1. $any \E' some$-> 任意 A 一些
  2. $any \E'' some$-> 任何 B 一些
  3. $any \E some$-> 任何 E 一些

我不想使用较长形式的命令,\E{arg1}{arg2}而只想使用 \E',\E''形式。例如,

\def\E#1#2{my code}

然后使用类似的东西时就会出现问题

$$
 x \E' \sin x 
$$

或者

$$
A \E b
$$

因为在后一种情况下,“b”不应被视为的参数,\E并且前一种情况下在正弦前面加斜线的原因相同。

答案1

您可能会喜欢一个通用接口,用于定义任意数量的相同类型的命令:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\declareprimedcommand} { m m m m }
 {% #1 = command to define
  % #2 = text for no prime
  % #3 = text for one prime
  % #4 = text for two primes
  \maximav_primedcommand:Nnnn #1 { #2 } { #3 } { #4 }
 }
\cs_new_protected:Npn \maximav_primedcommand:Nnnn #1 #2 #3 #4
 {
  \cs_new_protected:Npn #1
   {
    \peek_charcode_remove:NTF '
     { \peek_charcode_remove:NTF ' { #4 } { #3 } }
     { #2 }
   }
 }
\ExplSyntaxOff

\declareprimedcommand{\E}{x}{y}{z}

\begin{document}
$a \E b$

$a \E' b$

$a \E'' b$
\end{document}

在此处输入图片描述

答案2

这里有一种方法:

\documentclass{article}
\makeatletter
\def\@ifprime#1{\@ifnextchar'{\@firstoftwo{#1}}}
\newcommand\E{\@ifprime\E@i\E@}
\def\E@i{\@ifprime{B}{A}}
\def\E@{E}
\makeatother
\begin{document}
\[ x \E' \sin x  \]

\[ x \E'' \sin x  \]

\[ x \E \sin x  \]
\end{document}

相关内容