LaTeX实现跨页模式下的垂直空白

我们在某些环境中, 想要隐藏答案或者证明. 那么我们可以将该环境放入一个盒子, 然后获取盒子高度. 再定义一个开关, 使得要隐藏时直接用\vspace{盒子高度}替代原来的内容.

问题是, 直接用vspace我们可能不能在跨页时保持相同的高度. SE上的解决方案是用一个loop将原来的高度细分, 然后结合\goodbreak就可以实现了.

具体代码如下:

\documentclass{minimal}
\usepackage[margin=0pt, a4paper]{geometry}
\usepackage{calc}
\usepackage{fix-cm}
\usepackage{multido, ifthen}
\begin{document}
\newcounter{cnt}
\newcommand{\myVSpace}[1]{
  \setcounter{cnt}{0}
  \whiledo {\value{cnt} <100}
  {
    \vspace*{.01#1}\goodbreak
    \stepcounter{cnt}
  }
}
\newlength\skipheight
\newlength\lineheight
\setlength\lineheight{2em}
\setlength{\skipheight}{0.4\textheight}

\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}
\myVSpace{\skipheight}
\noindent\rule[.1\lineheight]{\textwidth}{.1\lineheight}

效果如图
跨行垂直空白

参考文献

\begin{enumerate}
\item \href{https://tex.stackexchange.com/a/67315/19832}{Skip given vertical space accross pages if needed}
\item \href{https://texfaq.org/FAQ-repeat-num}{Repeating a command n times}
\end{enumerate}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

*

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理