5 请问为什么序号会多出现一倍的数量

发布于 2024-08-08 02:04:03

运行了以下代码,有以下两个问题.
1.为什么序号会多出现一倍的数量,如下图
QQ截图20240808020322.png

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}

查看更多

关注者
0
被浏览
622
鱼香肉丝没有鱼先生
鱼香肉丝没有鱼先生.
  1. 我不知道你是否对 \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答案}.

注意, 有两项.

  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

也是无法显示, 这个就留给你自己思考吧!

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览