10 请问如何让这个代码只显示答案

发布于 2024-08-23 06:52:11

想通过\l_only_show_answer_booltruefalse,来控制是否只显示答案。请问如何修改代码,实现该效果。
我目前能想到的办法是通过写进临时文件来实现,请问大佬有其他办法吗?以下为MWE

\documentclass{ctexart}
\usepackage{xparse,enumitem}
\ExplSyntaxOn
\bool_new:N \l_only_show_answer_bool
\bool_set_true:N \l_only_show_answer_bool%想通过这个bool来只显示答案
\seq_new:N \l_answer_seq
\NewDocumentCommand{\answer}{+m}{
    \seq_gput_right:Nn \l_answer_seq{#1}
}
\NewDocumentEnvironment{ceshi}{O{} +b}{%
    \bool_if:NF \l_only_show_answer_bool
    {
        \UseHook{env/enumerate/before}%
        \UseHook{env/enumerate/begin}%
        \enumerate[#1]%
              #2
        \endenumerate%
        \UseHook{env/enumerate/end}%
        \UseHook{env/enumerate/after}%
    }
}{}
\AtEndDocument{
    \newpage
    \begin{flushleft}
        这是答案
    \end{flushleft}
    \seq_map_inline:Nn \l_answer_seq{
        \noindent
        #1
        \par
    }
}
\ExplSyntaxOff
\begin{document}
    \begin{ceshi}[resume]
        \item   这是第一个\answer{答案1}
        \item   这是第二个\answer{答案2}
    \end{ceshi}
\end{document}

查看更多

关注者
0
被浏览
1k
飘石
飘石 2024-08-23
这家伙很懒,什么也没写!

试试这个,抛砖引玉。

\documentclass{ctexart}
\usepackage{xparse,enumitem}
\ExplSyntaxOn
\bool_new:N \l_only_show_answer_bool
\bool_set_true:N \l_only_show_answer_bool%想通过这个bool来只显示答案
\seq_new:N \l_answer_seq
\NewDocumentCommand{\answer}{+m}{
    \seq_gput_right:Nn \l_answer_seq{#1}
}
\NewDocumentEnvironment{ceshi}{O{} +b}{%
    \bool_if:NTF \l_only_show_answer_bool
    {   
        \bool_new:N \l_is_answer_bool
        \bool_set_false:N \l_is_answer_bool
        \tl_map_inline:nn {#2}
        {
            \bool_if:NTF \l_is_answer_bool
            {
                \answer{##1}
                \bool_set_false:N \l_is_answer_bool
            }
            {
                \str_compare:nNnT {\tl_to_str:n {##1}} = {\tl_to_str:n {\answer}}
                {
                    \bool_set_true:N \l_is_answer_bool
                }
            }
        }
    }
    {
        \UseHook{env/enumerate/before}%
        \UseHook{env/enumerate/begin}%
        \enumerate[#1]%
              #2
        \endenumerate%
        \UseHook{env/enumerate/end}%
        \UseHook{env/enumerate/after}%
    }
}{}
\AtEndDocument{
    \newpage
    \begin{flushleft}
        这是答案
    \end{flushleft}
    \seq_map_inline:Nn \l_answer_seq{
        \noindent
        #1
        \par
    }
}
\ExplSyntaxOff
\begin{document}
    \begin{ceshi}[resume]
        \item   这是第一个\answer{答案1}
        \item   这是第二个\answer{答案2}
    \end{ceshi}
\end{document}
2 个回答
o(∩_∩)o
o(∩_∩)o 2024-08-24
这家伙很懒,什么也没写!

这是移动\bool_new:N \l_is_answer_bool位置后的代码

\documentclass{ctexart}
\usepackage{xparse,enumitem}
\ExplSyntaxOn
\bool_new:N \l_only_show_answer_bool
\bool_new:N \l_is_answer_bool
\bool_set_false:N \l_only_show_answer_bool%想通过这个bool来只显示答案
\seq_new:N \l_answer_seq
\NewDocumentCommand{\answer}{+m}{
    \seq_gput_right:Nn \l_answer_seq{#1}
}
\NewDocumentEnvironment{ceshi}{O{} +b}{%
    \bool_if:NTF \l_only_show_answer_bool
    {   
        
        \bool_set_false:N \l_is_answer_bool
        \tl_map_inline:nn {#2}
        {
            \bool_if:NTF \l_is_answer_bool
            {
                \answer{##1}
                \bool_set_false:N \l_is_answer_bool
            }
            {
                \str_compare:nNnT {\tl_to_str:n {##1}} = {\tl_to_str:n {\answer}}
                {
                    \bool_set_true:N \l_is_answer_bool
                }
            }
        }
    }
    {
        \UseHook{env/enumerate/before}%
        \UseHook{env/enumerate/begin}%
        \enumerate[#1]%
              #2
        \endenumerate%
        \UseHook{env/enumerate/end}%
        \UseHook{env/enumerate/after}%
    }
}{}
\AtEndDocument{
    \newpage
    \begin{flushleft}
        这是答案
    \end{flushleft}
    \seq_map_inline:Nn \l_answer_seq{
        \noindent
        #1
        \par
    }
}
\ExplSyntaxOff
\begin{document}
    \begin{ceshi}[resume]
        \item   这是第一个\answer{答案1}
        \item   这是第二个\answer{答案2}
    \end{ceshi}
\end{document}

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览