我使用过各种命令来隐藏文档中问题的答案。我使用布尔值来确定是否应该隐藏材料,即如果为 hideans True 则隐藏,如果为 hideans False 则不隐藏。
\newbool{hideans} % True: Hide False: Show
通常,隐藏命令本身的工作原理是将文本变成白色,以便在打印时不可见:
\newcommand{\ans}[1]{%
\ifbool{hideans}{\textcolor{white}{#1}}{#1}
}
其他版本使用 \phantom{} 或类似方法。优点是上述命令保留了我想要留给人们输入答案的确切空格量。
这些命令的缺点是它们不能很好地处理换行符,它们不能处理图形和表格,并且对方程式不稳定。为了解决这个问题,我为图形、表格、内联方程式、换行符等分别创建了一个命令。即便如此,有时我也必须手动在空白处编码。所以我的问题是...
问题。有没有办法让 LaTeX 测量括号内的文本、图形、公式等的大小,以便像上面的命令一样,如果给定的布尔值为真,则会在它和下一个文本之间留下那么多的空白,如果布尔值为假,则打印括号内的内容?本质上,像下面这样的“命令”
\ans{\ifbool{Hide?}{
% Yes
Measure size of figures, eqs, tables here and leave that amount of whitespace
}{
% No
Then print the stuff in the braces before
}
编辑。正如所要求的例子,这就是我的意思。
Question 1: What is 2 x 2?
[[[[Solution: Well, recall the following figure from Quantum Mechanics:
\begin{figure}[!ht]
\centering
\includegraphics[width = \textwidth}{theimage.png}
\end{figure}
This figure has nothing to do with the problem. But it's cute! \par
Now construct a figure of 1s representing the multiplication.
\begin{table}[!ht]
\centering
\begin{tabular}{cccc}
1 & 1 \\
1 & 1
\end{tabular}
\end{table}
So that we quickly see that $2 \times 2$ is
\[
2 \times 2= 4.
\]
]]]]
我希望在 LaTeX 中能测量 [[[[....]]]] 中的材料所占用的空间量,如果布尔值设置为 True,则隐藏它但留下文本所占用大小的空白,如果布尔值为 False,则只打印我为解决方案输入的内容。
答案1
你可以决定这是否有用。所有实际问题都可以通过Loop Space 给出了一个很好的答案,并且代码需要较新版本的tikzmark
,它随最近的 TeX 安装一起提供,或者可以从这里。还有相当大的改进和调整空间,但作为原则证明,以下内容可能有用。祝你胃口好!
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{etoolbox}
\newbool{hide}
%\url{https://tex.stackexchange.com/q/483547/86}
\usepackage{tikzpagenodes}
\usetikzlibrary{tikzmark}
\newcounter{tikzmarklines}\setcounter{tikzmarklines}{0} %
\tikzset{
tikzmark prefix=prefix-,
tikzmark suffix=-suffix
}
\newcommand{\hidestart}{%
\stepcounter{tikzmarklines}%
\tikzmark{a\thetikzmarklines}%
\iftikzmarkoncurrentpage{b\thetikzmarklines}%
\else
\begin{tikzpicture}[remember picture,overlay,next page=below]%
\path (pic cs:a\thetikzmarklines) coordinate (start-\thetikzmarklines)
([yshift=-0.2ex]pic cs:b\thetikzmarklines) coordinate (end-\thetikzmarklines);
\ifbool{hide}{\fill[white] (current page.west|-start-\thetikzmarklines)-- ++(0,1.2em) -|
(current page.east|-end-\thetikzmarklines) -| cycle;}{}
\end{tikzpicture}%
\fi
}
\newcommand{\hidefinish}{%
\tikzmark{b\thetikzmarklines}%
\begin{tikzpicture}[remember picture,overlay,next page=below]%
\path (pic cs:a\thetikzmarklines) coordinate (start-\thetikzmarklines)
([yshift=-0.2ex]pic cs:b\thetikzmarklines) coordinate (end-\thetikzmarklines);
\ifbool{hide}{\fill[white] (current page.west|-start-\thetikzmarklines)-- ++(0,1.2em) -|
(current page.east|-end-\thetikzmarklines) -| cycle;}{}
\end{tikzpicture}%
}
\begin{document}
Text \hidestart text text
Text text text
\begin{figure}[htb]
\centering
\includegraphics{example-image-duck}
\caption{A duck.}
\end{figure}
Text text \hidefinish text
\newpage
Text text text
Text \hidestart text text
Text text text
\clearpage
\begin{figure}[htb]
\centering
\includegraphics{example-image-duck}
\caption{A duck.}
\end{figure}
Text text text
Text text \hidefinish text
\clearpage\booltrue{hide}
Text \hidestart text text
Text text text
\begin{figure}[htb]
\centering
\includegraphics{example-image-duck}
\caption{A duck.}
\end{figure}
Text text \hidefinish text
\newpage
Text text text
Text \hidestart text text
Text text text
\clearpage
\begin{figure}[htb]
\centering
\includegraphics{example-image-duck}
\caption{A duck.}
\end{figure}
Text text text
Text text \hidefinish text
\end{document}