如何使用 edef 定义 l3 序列中的项目?

如何使用 edef 定义 l3 序列中的项目?

我想用 \edef 定义列表中的一个元素。我写了下面的 MWE,它显示只有 \def 才能给出结果。但是,由于我以多种复杂的方式使用结果,所以 \def 对我来说不是一个选择。

为什么它不起作用?我该怎么办?感谢您的帮助。

\documentclass{article}
\setlength\parindent{0pt} 

\ExplSyntaxOn
\NewDocumentCommand { \defseq } { m m }
{   \seq_gset_from_clist:Nn#1{#2}  }

\NewDocumentCommand { \getelement } { m m } { \seq_item:Nn#1{#2} }
\ExplSyntaxOff

\begin{document}

\defseq{\listcomp}{\geq,\leq,>,<}
\edef\choixcomp{\fpeval{ randint(1,4) }}

%\def\comp{ \getelement{\listcomp}{ \choixcomp } } % Works
\edef\comp{ \getelement{\listcomp}{ \choixcomp } } % Bug
$\comp$

\end{document}

答案1

我会避免混合\edefexpl3

另外,最好使用名称而不是序列的命令。

您可以提取指定的物品或随机物品。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\defseq}{ m m }
 {
  \seq_new:c { g_mathteacher_named_#1_seq }
  \seq_gset_from_clist:cn { g_mathteacher_named_#1_seq } { #2 }
 }

% extract a specified item
\NewExpandableDocumentCommand{\getseqelement}{ m m }
 {
  \seq_item:cn { g_mathteacher_named_#1_seq } { #2 }
 }

% get the sequence length, just in case
\NewExpandableDocumentCommand{\getseqlength}{m}
 {
  \seq_count:c { g_mathteacher_named_#1_seq }
 }

% extract a random item
%
% \int_rand:n { <integer expression> } returns a random
% integer from 1 to <integer expression>
% so we can use \seq_count:c { <seq name> }
\NewExpandableDocumentCommand{\getseqrandomelement}{m}
 {
  \seq_item:cn { g_mathteacher_named_#1_seq }
   {
    \int_rand:n { \seq_count:c { g_mathteacher_named_#1_seq } }
   }
 }

\ExplSyntaxOff

\begin{document}

\defseq{listcomp}{\geq,\leq,>,<}

$\getseqrandomelement{listcomp}$

$\getseqrandomelement{listcomp}$

$\getseqrandomelement{listcomp}$

$\getseqrandomelement{listcomp}$

\end{document}

在此处输入图片描述

相关内容