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

发布于 2024-08-18 17:43:01

我就是想把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}

查看更多

关注者
0
被浏览
443
Sagittarius Rover
Sagittarius Rover 2024-08-18
我要成为TikZ糕手/(ㄒoㄒ)/~~

下次可以指明参考代码来自:参考链接

一个显而易见的问题是,这段代码出现了两次
虽然我水平不够不太能看得懂,但是我删去其中一段之后不会出现类似无限递归调用的情况了.

\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}

image.png

个人感觉是你对上面链接的使用没有理解的很好.

如有错漏(尤其是对于patch的那一段),请各位批评指正。

1 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览