定义具有可变素数数量的命令

定义具有可变素数数量的命令

我想构建一个新命令,使我可以写类似这样的内容:

\env{3}

然后扩展为:

 σ'''

即具有指定素数的 sigma。但是,我无法正确构建完成此操作的命令或定义。

答案1

允许指数的经典实现:

\documentclass{article}

\makeatletter
\newcommand{\env}[1]{%
  \sigma
  \expandafter\startm@keprimes\expandafter{\romannumeral#1000@}%
}
\def\startm@keprimes#1{\m@keprimes{}#1}
\def\m@keprimes#1#2{%
  \if#2@%
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {#1}%
  {\m@keprimes{#1'}}%
}
\makeatother
\begin{document}
$\env{1}\env{2}\env{3}^2$
\end{document}

我们反复调用在每次迭代时将素数添加到其第一个参数。当我们结束由(一串's 后跟)\m@keprimes生成的标记列表时,我们传递素数序列,并应用素数的标准 LaTeX 技巧。\romannumeral#1000@m@

不过,我不确定\env{3}它是否比更清晰或更容易输入\sigma'''

在此处输入图片描述

一个更好的解决方案,也允许指数:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\env}{m}
 {
  \sigma\prg_replicate:nn{ #1 } { ' }
 }
\ExplSyntaxOff

\begin{document}
$\env{1}\env{2}\env{3}^2$
\end{document}

在此处输入图片描述

答案2

支持最多四个素数的简单解决方案

\documentclass{article}

\newcommand{\env}[1]{$
  \sigma\ifcase#1%
  \or'\or''\or'''\or''''\else^{#1}\fi
$}

\begin{document}

Example:
  \env{1}
  \env{2} $\sigma''$
  \env{4}
  \env{5}

\end{document}

'我知道输入所有的情况很难看,但通过这种方式,你可以保留素数之间的正确间距,如果你一次发出一个素数,情况就不会如此,除非采用更高级的技巧。

答案3

允许指数的经典实现:

\newcount\tmpnum
\def\env#1{\sigma \tmpnum=#1\relax \envA{}}
\def\envA{\ifnum\tmpnum>0 \advance\tmpnum by-1 \expandafter\envB \else \expandafter\envC \fi}
\def\envB#1{\envA{#1'}}
\def\envC#1{#1}

$\env{1}\env{2}\env{4}^2$             

相关内容