想通过\l_only_show_answer_bool
的true
和false
,来控制是否只显示答案。请问如何修改代码,实现该效果。
我目前能想到的办法是通过写进临时文件来实现,请问大佬有其他办法吗?以下为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}
试试这个,抛砖引玉。
\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}
这是移动\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}
在环境内部不要使用
\xxx_new:
否则,当第二次使用该环境时,会报错@u19850 多谢指正,没想到还有这个问题。学到了。
应该把
放到
前面。
@u66435 正确的