下次可以指明参考代码来自:参考链接
一个显而易见的问题是,这段代码出现了两次
虽然我水平不够不太能看得懂,但是我删去其中一段之后不会出现类似无限递归调用的情况了.
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}至于要不要保留空白,if True:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
\else
\phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}if False:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}下面是一个xelatex+texlive运行成功的mwe
\documentclass[12pt]{ctexart}
\usepackage{xparse,zhlipsum}
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
\newif\ifsolution
\solutiontrue %添加此句将输出答案,否则输出答案所需的空白
\begin{document}
设$f(x)$在$[0, 2]$上连续, 在$(0, 2)$内可导, 且$3f(0)=f(1)+2f(2)$, 证明: 存在存在$\xi \in (0, 2)$, 成立$f'(\xi)=0$.
\begin{solution}
这是问题的解答.
\zhlipsum[1]
\end{solution}
\begin{enumerate}
\item 第一题的题目
\begin{solution}
\zhlipsum[1]
\end{solution}
\item 第二题的题目
\begin{solution}
这是第二题的答案
\zhlipsum[8]
\end{solution}
\end{enumerate}
\end{document}
个人感觉是你对上面链接的使用没有理解的很好.
如有错漏(尤其是对于patch的那一段),请各位批评指正。

















问 练习册编写习题与答案分离问题