我想把答案包中的\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
会更简单,但我不知道这个环境是否依赖于额外的组。手动添加它不会使代码更短。)