我有一个自定义环境\newenvironment{mathsolution}
,其中包含我想根据开关\showmathtrue
和隐藏的内容\showmathfalse
。我针对此条件编写的代码如下:
\newenvironment{mathsolution}{
\setbox0\vbox\bgroup} % store solution in box 0
{\egroup % end of box
\ifshowmath
\par\box0 % display box
\else
\vskip\ht0 % whitespace of height of box
\fi
}
我试图在内容隐藏时保留框的精确空白,但这并没有发生。
问题示例
请注意,在下图中,第一个数学解决方案间距很接近,但并不完全精确。在第二个问题中,我使用了adjustbox
和minipage
和所有空白都会被忽略。
我需要的
平均能量损失
\documentclass{book}
\usepackage[margin=1.00in,showframe]{geometry}
\usepackage{amsmath,amssymb,amsfonts} % Equations
\usepackage{adjustbox}
% LONG (MATH) SOLUTIONS
\newif\ifshowmath % use \newif to define switches
\newenvironment{mathsolution}{
\setbox0\vbox\bgroup} % store solution in box 0
{\egroup % end of box
\ifshowmath
\par\box0 % display box
\else
\vskip\ht0 % whitespace of height of box
\fi
}
%\showmathtrue
\showmathfalse
\begin{document}
Some math problem stated here.
\begin{mathsolution}
$$ 1.0\times 10^{1} \left ( \dfrac{1}{10^{1}} \right ) = 1 $$
\end{mathsolution}
Some other math problem stated here.
\begin{mathsolution}
\adjustbox{valign=t}{\begin{minipage}{0.43\linewidth}
\begin{align*}
x_1 &= 1.000 \\
y_1 &= \left ( \dfrac{1}{2}\right ) \left ( a - b \right ) \\
&= 2.000 \\
x_2 &=~? \\
y_2 &= \left ( \dfrac{1}{2}\right ) \left ( b - a \right ) \\
&= 2.000 \\
\end{align*}
\end{minipage}
}
\hfill
\adjustbox{valign=t}{\begin{minipage}{0.55\linewidth}
\begin{align*}
\dfrac{c}{d} = \dfrac{e}{f} \longrightarrow
c &= \dfrac{d\times e}{f} \\
&= 3.000
\end{align*}
\end{minipage}
}
\end{mathsolution}
Some text.
\end{document}
注意:将文本更改为白色不是一个选项。
答案1
对 MWE 的这一修改解决了该问题:
\usepackage{environ}
\newif\ifshowmath % use \newif to define switches
\newsavebox{\mybox}
\NewEnviron{mathsolution}{%
\sbox{\mybox}{\begin{minipage}{\textwidth}\BODY\end{minipage}}%
}[\ifshowmath\par\usebox{\mybox}%
\else\par\begin{minipage}{\textwidth}\vspace*{\dimexpr\ht\mybox+\dp\mybox\relax}\end{minipage}\fi]
如你看到的: