给一个较为简单的办法:
定义函数 \tzhmode
如下
\NewDocumentCommand{\tzhmode}{m}
{
\str_case:nn {#1}
{
{show}
{
\def\xsbxd{
\int_step_inline:nnn{1}{3}{
\noindent \seq_item:Nn \xsb_jianda{####1}\par
\noindent \seq_item:Nn \xsb_xiangda{####1}\par
}
}
}
{hide}{\let\xsbxd\relax}
}
}
再为 \enddocument
添加一个 hook
,
\AtEndDocument
{
\newpage
\xsbxd
}
即可.
完整 mwe 如下:
\documentclass{ctexart}
\ExplSyntaxOn
\seq_new:N \xsb_jianda
\seq_new:N \xsb_xiangda
\tl_new:N \c_teacher_mode_tl
\tl_set:Nn \c_teacher_mode_tl{详答}
\tl_new:N \c_printer_mode_tl
\tl_set:Nn \c_printer_mode_tl{简答}
\tl_new:N \g__tzhmode_tl
\NewDocumentCommand{\tzhmode}{m}
{
\str_case:nn {#1}
{
{show}
{
\def\xsbxd{
\int_step_inline:nnn{1}{3}{
\noindent \seq_item:Nn \xsb_jianda{####1}\par
\noindent \seq_item:Nn \xsb_xiangda{####1}\par
}
}
}
{hide}{\let\xsbxd\relax}
}
}
%创建解答环境
\NewDocumentEnvironment{solution}{s +b} %\begin{solution}* \end{solution} \begin{solution} \end{solution}
{
\tl_if_eq:NNTF \g_tzhmode_tl \c_teacher_mode_tl
{
\par
\IfBooleanTF{#1}
{
~#2
}
{
~#2
}
}{}
\seq_gput_right:Nn \xsb_xiangda{#2 \par}
}
{
}
%创建答案命令
\NewDocumentCommand{\daan}{o +m}{
\par
\tl_if_eq:NNTF \g_tzhmode_tl \c_printer_mode_tl
{
\IfNoValueTF{#1}{~#2 \par }{~#2 \hspace{1cm} ~#1 \par }
}
{
\tl_if_eq:NNT \g_tzhmode_tl \c_teacher_mode_tl
{
\IfNoValueTF{#1}{~#2 \par }{~#2 \hspace{1cm} ~#1 \par }
}
}
\seq_gput_right:Nn \xsb_jianda{#2}
}
\NewDocumentCommand{\xsbjd}{}
{
\seq_map_inline:Nn \xsb_jianda{##1}
}
\AtEndDocument
{
\newpage
\xsbxd
}
\ExplSyntaxOff
\begin{document}
\tzhmode{show}
% \tzhmode{hide}
\begin{enumerate}
\item 这是第一题
\daan{选A}
\begin{solution}
为什么选择A
\end{solution}
\item 这是第二题
\daan{选B}
\begin{solution}
为什么选择B
\end{solution}
\item 这是第三题
\daan{选C}
\begin{solution}
为什么选择C
\end{solution}
\end{enumerate}
\end{document}
可以运行了,谢谢大佬