为隐藏文本、数学和数字留出空白

为隐藏文本、数学和数字留出空白

我使用过各种命令来隐藏文档中问题的答案。我使用布尔值来确定是否应该隐藏材料,即如果为 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}

在此处输入图片描述

相关内容