我想定义一个环境,用来\vskip
在前后留出一些空间。通常它会用在普通文本中,但有时我想用 将其推到页面底部\vfill
。当环境被放置在页面底部时,由于页面上的当前文本没有 ,\vfill
之后\vskip
会被忽略 - 但使用 时不会\vfill
。
有没有办法在两种情况下获得相同的行为(忽略\vskip
)?
即使没有环境,也会发生这种情况,如下面的 MWE 所示。
\documentclass{article}
\begin{document}
test
\vfill % \vskip\baselineskip is added and causes a blank line at the bottom of the page
% without that \vfill no space (glue) is inserted at the end (see below)
test
\vskip\baselineskip
\end{document}
在这边搜索了一会儿之后,我找到了\showoutput
查看文档中发生了什么的命令。我试图找出造成这种差异的原因并实现我想要的……但没有成功。这是\showoutput
该示例的相关部分(我认为)。区别只是一行有或没有\vfill
。
...\hbox(6.15+0.11)x345.0, glue set 313.84fil, direction TLT
....\localpar
.....\localinterlinepenalty=0
.....\localbrokenpenalty=0
.....\localleftbox=null
.....\localrightbox=null
....\hbox(0.0+0.0)x15.0, direction TLT
....\TU/lmr/m/n/10 t
....\TU/lmr/m/n/10 e
....\TU/lmr/m/n/10 s
....\TU/lmr/m/n/10 t
....\penalty 10000
....\glue(\parfillskip) 0.0 plus 1.0fil
....\glue(\rightskip) 0.0
...\glue 0.0 plus 1.0fill % That's the \vfill I guess
...\glue(\parskip) 0.0 plus 1.0
...\glue(\parskip) 0.0
...\glue(\baselineskip) 5.74
...\hbox(6.15+0.11)x345.0, glue set 313.84fil, direction TLT
....\localpar
.....\localinterlinepenalty=0
.....\localbrokenpenalty=0
.....\localleftbox=null
.....\localrightbox=null
....\hbox(0.0+0.0)x15.0, direction TLT
....\TU/lmr/m/n/10 t
....\TU/lmr/m/n/10 e
....\TU/lmr/m/n/10 s
....\TU/lmr/m/n/10 t
....\penalty 10000
....\glue(\parfillskip) 0.0 plus 1.0fil
....\glue(\rightskip) 0.0
...\glue 12.0 % That's the \vskip I guess (it disappears without the \vfill)
...\glue -0.11
...\glue 0.0 plus 1.0fil
...\glue 0.0
...\glue 0.0 plus 0.0001fil
顺便说一句,对于\vspace
或\addvspace
也会发生同样的情况\vskip
。
答案1
我认为您应该定义两个相关的环境:foo
用于文本块的正常外观并将foo*
其移动到页面底部。
\documentclass{article}
\usepackage[a6paper,showframe]{geometry}
\usepackage{lipsum}
\newenvironment{foo}{%
\par\addvspace{\baselineskip}\startfoo
}{%
\par\addvspace{\baselineskip}%
}
\newenvironment{foo*}{%
\par\vfill\startfoo
}{%
\par
}
\newcommand{\startfoo}{\noindent\textbf{Foo.}\ \ignorespaces}
\begin{document}
\lipsum[1][1-5]
\begin{foo}
\lipsum[2][1-3]
\end{foo}
\lipsum[3][1-5]
\clearpage
\lipsum[1][1-5]
\begin{foo*}
\lipsum[2][1-3]
\end{foo*}
\end{document}
我在前言中加载的包只是为了生成一个显示页边距的较小图片。我提供了环境的模拟定义。