我们可以使用的“解决方案/答案”环境选项太多了,我正在采用这个对于我正在做的“大”项目。
目前,这对我来说似乎是最容易实现的,但只有一个功能需要探索。我如何显示/隐藏环境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
,我们可以获取 的高度。然后我们只需应用\vskip
push 这个高度即可。
但是,如果我们想将它用于多页,我想到了一个解决方案,就是将\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 提供给学生可能不安全),但它在输出中不可见。