我就是想把solution环境里面的内容注释掉,但是保留空白部分,但是在使用如下代码将solution环境中的答案注释执行(solutionfalse)的过程中一直显示运行,不出结果,但是保留答案(solutiontrue)的时候就是正常的
%win11\miktex\winedt11\xelatex
\documentclass{ctexart}
\usepackage{import}
\usepackage{fancyhdr,fontspec}
\setmainfont{SimSun}%设置正文中文字体为宋体
\fontsize{12pt}{20pt}
\usepackage{comment}%注释答案
\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}
\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
\phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
\newif\ifsolution
%\solutiontrue %添加此句将输出答案,否则输出答案所需的空白
\solutionfalse %不显示答案,保留空格
\begin{document}
\begin{solution}
设$f(x)$在$[0, 2]$上连续, 在$(0, 2)$内可导, 且$3f(0)=f(1)+2f(2)$, 证明: 存在存在$\xi \in (0, 2)$, 成立$f'(\xi)=0.$
\end{solution}
\end{document}
下次可以指明参考代码来自:参考链接
一个显而易见的问题是,这段代码出现了两次
虽然我水平不够不太能看得懂,但是我删去其中一段之后不会出现类似无限递归调用的情况了.
\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的那一段),请各位批评指正。
还有一个关于字体的问题
设置CJK字体应该使用
\setCJKmainfont{SimSun}
,同时需保证当前系统为管理员安装了名为SimSun
的字体.谢谢大佬,确实是那个问题,半路出家,写的有些不规范,非常感谢指正!