有人知道如何将(框架)框拉伸至页面末尾吗?实际上就像
\documentclass{scrartcl}
\begin{document}
sometext
\framebox[\textwidth]{somemoretext\vspace*{\fill}}
\end{document}
当然,这只是行不通的,因为它\fill
在盒子里面不起作用……
我也尝试过该framed
软件包,但也不能解决问题。
(如果有人想知道我为什么要这样做,想象一下最后有一个用于手写评论的框的讲义......)
答案1
运行它xelatex
\documentclass{article}
\usepackage{pst-node}
\begin{document}
sometext
\rnode[lt]{A}{somemoretext}
\vfill
~\hfill\rnode[rb]{B}{~}
\psframe(A)(B)
\clearpage
foo
\end{document}
答案2
偶然发现如何定义图形大小以使其占据页面的剩余部分?,我学会了一个更简单的答案来解决这个问题,避免使用像 TikZ 或 pstricks 这样的“大型机器”:页面上剩余的空间可以用图元\pagegoal
和来计算\pagetotal
。因此
\def\restofpage{\dimexpr\pagegoal-\pagetotal-\baselineskip\relax}
是页面剩余部分的高度。因此,
\documentclass[paper=a8]{scrartcl}
\def\restofpage{\dimexpr\pagegoal-\pagetotal-\baselineskip\relax}
\begin{document}
sometext
\medskip
\framebox[\textwidth]{\parbox{\textwidth}{somemoretext\par\vspace{\restofpage}}}
\end{document}
产生所需的输出:
请注意,\framebox
将其参数放在\hbox
(参见例如这个答案) 因此\parbox
实际上是必要的。
答案3
更新 2011/09/16
Herbert 的方法是正确的,他使用了两个节点和 v/hfill。下面是我的 TikZ 解决方案,基于这个想法:
\documentclass{scrartcl}
\usepackage{capt-of}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{lipsum}
\begin{document}
\lipsum[1]% dummy text
\par\noindent
\tikz[overlay,remember picture]\coordinate (image-start);
\par
\vfill
\null\hfill
\tikz [overlay,remember picture] \draw (0,0) rectangle ([yshift=\ht\strutbox-\fboxsep]image-start);
\newpage
\end{document}
您可以使用 TikZ 来实现这一点。有一个特殊节点current page
,它将当前页面的角作为指南针的点。您可以通过减去边距来获得文本区域的右下角。这需要图片上的remember picture
和overlay
选项,还需要运行两次编译器才能产生正确的结果。
不幸的是,TikZ 没有为文本区域本身提供特殊节点,但我发现Sven Köhler 发布的一些代码定义了这样一个节点。
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{lipsum}
\newcommand{\currentsidemargin}{%
\ifodd\value{page}%
\oddsidemargin%
\else%
\evensidemargin%
\fi%
}
\begin{document}
\lipsum[1]% dummy text
\par\bigskip \noindent
Notes:\\
\begin{tikzpicture}[overlay,remember picture]
% Helper nodes
\path (current page.north west) ++(\hoffset, -\voffset)
node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\paperwidth, minimum height=\paperheight]
(pagearea) {};
\path (pagearea.north west) ++(1in+\currentsidemargin,-1in-\topmargin-\headheight-\headsep)
node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\textwidth, minimum height=\textheight]
(textarea) {};
% Framebox
\draw (0,0) rectangle (textarea.south east);
\end{tikzpicture}
\newpage
\end{document}
答案4
还有一种tcolorbox
解决方案(tikz
在后台使用):
\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage[breakable]{tcolorbox}
\newtcolorbox{stretchbox}[1][]{
height fill,
sharp corners,
colback=yellow!10!white,
colframe=yellow!50!black,
#1}
\begin{document}
\lipsum[1]
\begin{stretchbox}
\lipsum[2]
\end{stretchbox}
\end{document}