如何使 vspace 在 minipage 开始时被取消

如何使 vspace 在 minipage 开始时被取消

\vspace在真实页面的开头被取消,但在小页面的开头却被忠实地添加。

我怎样才能修改\vspace(或修改小页面环境)以使其以与实际分页符相同的方式运行,即我希望在小页面中首先忽略 vspace,但在其他任何地方都受到尊重。

\documentclass{book}
\usepackage{showframe}

\begin{document}

\clearpage
\vspace{1cm}
test

\clearpage
\begin{minipage}{\textwidth}
\vspace{1cm} %should be ignored
test
\vspace{1cm} %should be kept
test
\end{minipage}

\end{document}

答案1

\documentclass{book}
\usepackage{showframe}

\makeatletter
\newcommand\myvspace[1]{\if@minipage\else\vspace{#1}\fi}
\makeatother

\begin{document}

\clearpage
\vspace{1cm}
test

\clearpage
\noindent\begin{minipage}{\textwidth}
\myvspace{1cm} %should be ignored
test
\myvspace{1cm} %should be kept
test
\end{minipage}

\end{document}

我保留了原来的设置,但您是否有意设置段落分隔符,以便在段落之间留出垂直空间test?由于第二个垂直空间位于文本之后,因此您无法看到它。

在小页面开始时为\if@minpage真,在第一段设置为假,然后使用。

作为定义自己的命令的更好的替代方法,您可以使用\addvspace已经包含此测试的标准 LaTeX 命令(然后您必须有一个段落分隔符,因为\addvspace在水平模式下会出现错误)。

\documentclass{book}
\usepackage{showframe}


\begin{document}

\clearpage
\addvspace{1cm}
test

\clearpage
\noindent\begin{minipage}{\textwidth}
\addvspace{1cm} %should be ignored
test

\addvspace{1cm} %should be kept
test
\end{minipage}

\end{document}

在此处输入图片描述

相关内容