请问如何移动\xsbxd命令到\begin{document}下一行,实现答案单独成页

发布于 2022-07-23 07:21:51

知识LaTeX是由上往下读代码,想实现移动xsbxd命令到begin{document}下一行,实现答案单独成页,如图中位置一样QQ截图20220723071429.png
MWE.zip

查看更多

关注者
0
被浏览
1.1k
鱼香肉丝没有鱼先生
鱼香肉丝没有鱼先生.

给一个较为简单的办法:
定义函数 \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}
1 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览