我想构建一个新命令,使我可以写类似这样的内容:
\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$