隐藏/显示问题解决方案

隐藏/显示问题解决方案

我们可以使用的“解决方案/答案”环境选项太多了,我正在采用这个对于我正在做的“大”项目。

目前,这对我来说似乎是最容易实现的,但只有一个功能需要探索。我如何显示/隐藏环境solution,以便我可以拥有一个teachers'版本和一个students'版本?

当解决方案被隐藏时,最好将用于这些内容的空间“保留”。

谢谢。

答案1

tcolorbox提供lowerbox选项来显示或隐藏其下部。这是一个展示其工作原理的小例子。此选项可以与recording存储和稍后显示解决方案的机制相结合(示例这个答案)。

\documentclass{article}

\usepackage{lipsum}
\usepackage[most]{tcolorbox}

\NewTColorBox[auto counter]{exercise}{+O{}}{%
        enhanced, breakable,
        coltitle=black, 
        fonttitle=\bfseries,
        title={Exercise~\thetcbcounter:},
        attach title to upper=\quad,
        before lower={\textbf{Solution~\thetcbcounter:\quad}},
        #1}

\tcbset{student/.style={lowerbox=invisible}}

\begin{document}

\begin{exercise}
Type some nice problem, not too long.
\tcblower       
An this is the solution
\end{exercise}

\begin{exercise}[student]
\lipsum[1]
\tcblower 
\lipsum[1]
\end{exercise}

\begin{exercise}[student]
\lipsum[2]
\tcblower 
\lipsum[3]
\end{exercise}
\end{document}

在此处输入图片描述

答案2

您可以使用包将老师的部分放在评论块之间comment

\begin{comment}
    ...
    text
    ...
\end{comment}

然后你就可以编译学生版本了。如果你想编译教师版本,只需删除\begin{comment}\end{comment}

\includecomment{teacher}您可以使用或\excludecomment{teacher}块内的文本来做您想做的事情teacher

\documentclass[10pt,a4paper]{report}
\usepackage{comment}

\begin{document}

Text not commented

\includecomment{teacher}
\begin{teacher}
text
\end{teacher}

Text not commented

\end{document}

现在,对于您需要的保留空间,一个简单的解决方法是使用命令vspace{}

\documentclass[10pt,a4paper]{report}
\usepackage{comment}

\begin{document}

Text not commented

\excludecomment{teacher}
\begin{teacher}
text
\end{teacher}
\vspace{3cm}

Text not commented

\end{document}

题块之间预留空间为3cm。

答案3

这样做需要做很多工作,这就是为什么会有这么多“解决方案/答案”的选项,正如你所说。你可能真的很容易就能找到一个适合你需要的包;也许练习库模拟或一些其他替代方案锻炼考试CTAN 上的主题。

话虽如此,您可以像@Levy 所说的那样,使用评论包来隐藏您的环境。也许\vspace@Levy 建议的解决方法就足够了,但对于自动高度问题,我无能为力。

您可以使用盒子来确保高度合适。即内容的实际高度。差不多。

通过定义\ProcessCutFile为空,那么comment包将不会执行任何操作(一切都在文档)。此外,我们可以使用\CommentCutFile将环境的内容放入 中\box,我们可以获取 的高度。然后我们只需应用\vskippush 这个高度即可。

但是,如果我们想将它用于多页,我想到了一个解决方案,就是将\vskip 10pt它一直放到框的高度。我知道这有点不合时宜。

唯一的缺点是这个高度问题大概不适用于逐字环境,例如listings

\documentclass{article}
\usepackage{comment}
\usepackage{fp}
\usepackage{lipsum}

% Make ourselves a new conditional
\newif\ifDisplaySolutions
% Use \DisplaySolutionstrue to "activate" it
\makeatletter
% Make a solution environment
\generalcomment{solution}{%
  \begingroup
  \ifDisplaySolutions\else%
  % if \DisplaySolutionstrue is not called, then we remove the contents
  \def\ProcessCutFile{}\fi%
}{%
  \ifDisplaySolutions\else%
    % aand,now (also when it's not called), we make a box
    % and then we \input the \CommentCutFile.
    \setbox1=\vbox{\input{\CommentCutFile}}%
    \edef\boxheight{\strip@pt\ht1}
    % Get the height from \ht1 and use \vskip to make appropriate space
    \newcount\Scount
    \Scount=0
    \FPdiv\boxPartHeight{\boxheight}{10}
    {\nullfont\loop\vskip 10pt\relax\advance\Scount by 1 \ifnum\Scount<\boxPartHeight\relax\repeat}
  \fi
\endgroup%
}
\makeatother

%Uncomment below to hide solution
\DisplaySolutionstrue
\begin{document}
Some problem text goes here \lipsum[1]

\begin{solution}
  \textbf{SOLUTION}\lipsum
  \[ \forall\varepsilon>0\exists\delta>0:\dots \]
\end{solution}
Some text after solution.

\end{document}

编辑:使其跨页面工作

答案4

我采用您的示例并添加 ,取得了良好的效果\usepackage{xcolor}。然后,当我想要学生版时,我可以将选项添加bodyfont=\color{white}\declaretheoremstyle{solstyle}。文本仍然存在(因此将电子 pdf 提供给学生可能不安全),但它在输出中不可见。

相关内容