在宏中输入答案时出现问题

在宏中输入答案时出现问题

我想把答案包中的\begin{sol}和放在\end{sol}一个宏中,比如

\newcommand{\assignment}[2]
{
\item #1
\begin{sol} #2 \end{sol}
}

###

\assignment{question}{answer}

只是,答案使用逐字环境,\end{sol}如果它没有写在“主”函数中,它就会错过。有没有办法使用\expandafter\csname或这样的命令让它只打印\begin{sol} #2 \end{sol},然后在主文档中打印后展开它?

答案1

你可以试试

\newcommand{\assignment}[2]{\item #1\scantokens{\begin{sol}#2\end{sol}}}

答案2

您不能在宏参数中使用逐字。我会改为将赋值设置为一个带有一个参数的环境。或者,您可以使用以下技巧\end{sol}自动将其放置在}答案后面:

\newcommand{\assignment}[1]{%
   \item #1
   \begin{sol}
    \def\endassignment{\end{sol}}%
    \bgroup
    \aftergroup\endassignment
    \let\dummy=%
}



\assignment{question}{answer}

这里,{前面的answer被删除了,所以}会与 内部的 匹配\bgroup。 然后\aftergroup用 插入\end{sol}之后的 。

(使用\sol\endsol会更简单,但我不知道这个环境是否依赖于额外的组。手动添加它不会使代码更短。)

相关内容