不影响主文档垂直间距的框

不影响主文档垂直间距的框

请考虑以下示例:

\documentclass{article}

\begin{document}
Text A.

\vspace*{5cm}

Text B
\end{document}

现在我想将其更改为

\documentclass{article}

\usepackage{environ}
\usepackage{lipsum}

\NewEnviron{eatnospace}{
%% Some missing code to make it work
\BODY
}

\begin{document}
Text A.


\begin{eatnospace}
Some text that doesn't move "Text B" down:

\lipsum[2]
\end{eatnospace}

\vspace*{5cm}

Text B
\end{document}

即我想定义一个eatnospace不影响主文档垂直空间的环境。背景是我想为同事做的数学测试添加解决方案。在原始测试中,有一些垂直空间(例如\vspace*{5cm})用于学生答案。

现在我想使用原始源代码将解决方案写入这些空间,同时尽可能少地进行更改。

我怎样才能做到这一点?

更新

eatnospace使用@David Carlisle 的建议,我尝试这样定义:

\NewEnviron{eatnospace}{
\vadjust{\smash{\parbox[t]{\textwidth}{
\BODY
}}}
}

但是它会引发一个错误“您不能在垂直模式下使用‘\vadjust’。”

答案1

指某东西的用途\vadjust没有意义(这就是为什么好的最小工作示例很重要:您最初的问题将所有内容都放在同一段中,这就是 David Carlisle 建议您使用\vadjust仅在水平模式下有用的示例的原因。通过澄清您的问题,很明显您很可能打算在垂直模式下使用此环境。)

\documentclass[twocolumn]{article}

\usepackage{environ}
\usepackage{lipsum}

\NewEnviron{eatnospace}{
        \par\noindent\smash{\parbox[t]{\linewidth}{\BODY}}\par\vskip-\baselineskip
}

\begin{document}
Text A.


\begin{eatnospace}
Some text that doesn't move ``Text B'' down:

\lipsum[2]
\end{eatnospace}

\vspace*{6.5cm}

Text B

\begin{eatnospace}
        This happens if you over flow
        \[ f(b) - f(a) = \int_a^b f'(x) ~dx \]
        \lipsum[1]
\end{eatnospace}

\vspace*{4cm}

Text C

\newpage
Text A.

\vspace*{6.5cm}

Text B

\vspace*{4cm}

Text C

\end{document}

在此处输入图片描述


替代解决方案

然而,在我看来,当你可以告诉 具有正确的高度时,粉碎 a\parbox并手动插入似乎有点愚蠢。在此过程中,我们还可以添加一个开关来隐藏解决方案,因此将来您只需拥有一份文档副本并使用它来构建测试和解决方案。\vspace*\parbox

\documentclass[twocolumn]{article}

\usepackage{environ}
\usepackage{lipsum}

\newif\ifshowsolution
\showsolutiontrue  % change to \showsolutionfalse to hide solutions
\NewEnviron{eatnospace}[1]{
        \par\noindent\parbox[t][#1]{\linewidth}{\ifshowsolution\BODY\fi}\par
}

\begin{document}
Text A.

\begin{eatnospace}{6.5cm}
Some text that doesn't move ``Text B'' down:

\lipsum[2]
\end{eatnospace}

Text B

\begin{eatnospace}{4cm}
        This happens if you over flow
        \[ f(b) - f(a) = \int_a^b f'(x) ~dx \]
        \lipsum[1]
\end{eatnospace}


Text C

\newpage
Text A.

\vspace*{6.5cm}

Text B

\vspace*{4cm}

Text C

\end{document}

相关内容