运行了以下代码,有以下两个问题.
1.为什么序号会多出现一倍的数量,如下图
2.为什么在enumerate
环境中就无法显示了
\documentclass{ctexart}
\usepackage{xparse,xcolor,enumitem}
\ExplSyntaxOn
\seq_new:N \l_answer_seq
\NewDocumentCommand{\fourchoices}{+m}{
#1
\seq_put_right:Nn \l_answer_seq{tk #1}
\par
}
\NewDocumentCommand{\fillin}{+m}{
#1
\seq_put_right:Nn \l_answer_seq{fi #1}
\par
}
\NewDocumentCommand{\jieda}{+m}{
#1
\seq_put_right:Nn \l_answer_seq{jd #1}
\par
}
\tl_new:N \l_fourchoices_answer_tl
\seq_new:N \l_fourchoices_answer_seq
\AtEndDocument{
\newpage
\begin{flushleft}
一、选择题
\end{flushleft}
\int_step_inline:nn{\seq_count:N \l_answer_seq}{
\exp_args:Nx \tl_if_in:nnT {\seq_item:Nn \l_answer_seq{#1}}{tk}{
\exp_args:NNnx \seq_set_split:Nnn \l_fourchoices_answer_seq{tk}{ \seq_item:Nn \l_answer_seq{#1}}
\seq_map_inline:Nn \l_fourchoices_answer_seq{
\tl_put_right:Nn \l_fourchoices_answer_tl{
\textcolor{red}{这是序号#1}.##1 \\
}
}
}
}
\tl_use:N \l_fourchoices_answer_tl
}
\ExplSyntaxOff
\begin{document}
% 以下无法显示
% \begin{enumerate}
% \item 测试
% \fourchoices{这是选择题1答案}
% \item 测试
% \fourchoices{这是选择题2答案}
% \item 测试
% \fourchoices{这是选择题3答案}
% \item 测试
% \fillin{这是填空题1答案}
% \item 测试
% \fillin{这是填空题2答案}
% \item 测试
% \fillin{这是填空题3答案}
% \item 测试
% \fourchoices{这是选择题3答案}
% \item 测试
% \jieda{这是解答题1答案}
% \item 测试
% \jieda{这是解答题2答案}
% \item 测试
% \jieda{这是解答题3答案}
% \end{enumerate}
测试\par
\fourchoices{这是选择题1答案}
测试\par
\fourchoices{这是选择题2答案}
测试\par
\fourchoices{这是选择题3答案}
测试\par
\fourchoices{这是选择题4答案}
测试\par
\fillin{这是填空题1答案}
测试\par
\fillin{这是填空题2答案}
测试\par
\fillin{这是填空题3答案}
测试\par
\fourchoices{这是选择题8答案}
测试\par
\jieda{这是解答题1答案}
测试\par
\jieda{这是解答题2答案}
测试\par
\jieda{这是解答题3答案}
测试\par
\fourchoices{这是选择题12答案}
\end{document}
\seq_set_split:xx
函数有点误解?它用于对一段 token
按某特定 token
进行分割, 同时会删掉两边的空格.
例如
\ExplSyntaxOn
\seq_set_split:Nnn \l_tmpa_seq { \sep } {a \sep b \sep c}
\seq_log:N \l_tmpa_seq
\ExplSyntaxOff
.log
中会有
The sequence \l_tmpa_seq contains the items (without outer braces):
> {a}
> {b}
> {c}.
同理, 你的
\ExplSyntaxOn
\seq_set_split:Nnn \l_tmpa_seq { tk } {tk 这是选择题 1 答案}
\seq_log:N \l_tmpa_seq
\ExplSyntaxOff
会得到
The sequence \l_tmpa_seq contains the items (without outer braces):
> {}
> {这是选择题1答案}.
注意, 有两项.
enumerate
中无法显示,其实和 enumerate
无关,你可以尝试\begingroup
测试\par
\fourchoices{这是选择题1答案}
测试\par
\fourchoices{这是选择题2答案}
测试\par
\fourchoices{这是选择题3答案}
测试\par
\fourchoices{这是选择题4答案}
测试\par
\fillin{这是填空题1答案}
测试\par
\fillin{这是填空题2答案}
测试\par
\fillin{这是填空题3答案}
测试\par
\fourchoices{这是选择题8答案}
测试\par
\jieda{这是解答题1答案}
测试\par
\jieda{这是解答题2答案}
测试\par
\jieda{这是解答题3答案}
测试\par
\fourchoices{这是选择题12答案}
\endgroup
也是无法显示, 这个就留给你自己思考吧!
这里有两项的原因是因为
tk
是在开头的原因吧第二个问题,是不是组的问题,要在
\AtEndDocument
之间跳出组吗?