我有一个由长表包生成的多页表,我想把每一页都放在里面longtable
。\shadowbox
以下是我尝试过的:
\documentclass{article}
\usepackage{fancybox}
\usepackage{longtable}
\begin{document}
\shadowbox{\vbox{\begin{longtable}{|c|c|}\hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
.....................
\end{longtable}}}
\end{document}
但是我的表格无法跨页。我该如何修复这个问题?
请注意,使用mdframed
对我来说不是一个选项。解决方案应该只使用包\shadowbox
中的命令fancybox
。这是我的作业LaTeX 写作我在大学学习的课程。
编辑:作业已经完成了。如果你能做完,就发布你的答案吧。
答案1
要使用该命令,您可以使用可以处理的shadowbox
包:framed
shadowbox
\usepackage{fancybox}
\newenvironment{shadowframe}{%
\def\FrameCommand{\fboxsep=\FrameSep \shadowbox}%
\MakeFramed {\FrameRestore}}%
{\endMakeFramed}
\usepackage[]{framed}
编辑:
虽然mdframed
这对您来说不是一个解决方案,但我想通过他的包提供一个示例:
\documentclass{article}
\usepackage{xcolor}
\usepackage{longtable}
\usepackage[shadow=true,linewidth=2pt,everyline=true]{mdframed}
\begin{document}
\begin{mdframed}
\begin{longtable}{|c|c|}\hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
\end{longtable}
\end{mdframed}
\end{document}
答案2
您应该修改包中的命令\LT@output
和\LT@start
。以下适用于版本longtable
。[2004/02/01 v4.11]
最大的问题是您不能\shadowbox
直接放置\box255
存储页面内容的。第二个问题是阴影框会在第一页绕过表格前的文本。我把阴影框弄窄了一点(左右各 1.5%),以便在最后一页看得更清楚。
\documentclass{article}
\usepackage{longtable} % version
\makeatletter
\newlength{\LT@startpagetotal}
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@\vskip\LTpre
\dimen@\pagetotal
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \ht\LT@foot
\dimen@ii\vfuzz
\vfuzz\maxdimen
\setbox\tw@\copy\z@
\setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
\setbox\tw@\vbox{\unvbox\tw@}%
\vfuzz\dimen@ii
\advance\dimen@ \ht
\ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@\dp
\ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@ -\pagegoal
\ifdim \dimen@>\z@\vfil\break\fi
\global\@colroom\@colht
\ifvoid\LT@foot\else
\advance\vsize-\ht\LT@foot
\global\advance\@colroom-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth\z@
\fi
\ifvoid\LT@firsthead\relax
\LT@startpagetotal-\ht\LT@head\relax% MODIFIED %
\copy\LT@head
\else
\LT@startpagetotal-\ht\LT@firsthead\relax% MODIFIED %
\box\LT@firsthead
\fi\nobreak
\advance\LT@startpagetotal\pagetotal\relax% MODIFIED %
\output{\LT@output}}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox2\hbox to 0.97\textwidth{\box\@cclv\hss}%% MODIFIED %
\ht2\dimexpr\ht2-\LT@startpagetotal\relax% MODIFIED %
\setbox1\hbox{\shadowbox{\box2}}%% MODIFIED %
\ht1\dimexpr\ht1+\LT@startpagetotal\relax% MODIFIED %
\global\LT@startpagetotal0pt\relax% MODIFIED %
\setbox\@cclv\vbox{\box1\copy\LT@foot\vss}%% MODIFIED %
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
\setbox2\hbox to 0.97\textwidth{\kern-0.015\textwidth\vbox% MODIFIED %
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}\hss}%% MODIFIED %
\ht2\dimexpr\ht2-\LT@startpagetotal\relax% MODIFIED %
\setbox1\hbox{\shadowbox{\box2}}%% MODIFIED %
\ht1\dimexpr\ht1+\LT@startpagetotal\relax% MODIFIED %
\global\LT@startpagetotal0pt\relax% MODIFIED %
\noindent\box1\relax%
\fi
\else
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot}%% MODIFIED %
\setbox2\hbox to 0.97\textwidth{\kern-0.015\textwidth\box\@cclv\hss}%% MODIFIED %
\ht2\dimexpr\ht2-\LT@startpagetotal\relax% MODIFIED %
\setbox1\hbox{\shadowbox{\box2}}%% MODIFIED %
\ht1\dimexpr\ht1+\LT@startpagetotal\relax% MODIFIED %
\global\LT@startpagetotal0pt\relax% MODIFIED %
\setbox\@cclv\vbox{\box1\vss}%% MODIFIED %
\@makecol
\@outputpage
\global\vsize\@colroom
\copy\LT@head\nobreak
\fi}
\makeatother
\usepackage{fancybox}
\usepackage{lipsum}
\begin{document}
\lipsum[1-7]
%\tracingmacros=1
%\tracingonline=1
\begin{longtable}{|c|c|}\hline
FIRST&HEAD\\\hline\endfirsthead
\hline RUNNING&HEAD\\\hline\endhead
RUNNING&FOOT\\\hline\endfoot
LAST&FOOT\\\hline\endlastfoot
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
\end{longtable}
\lipsum[8-11]
\begin{longtable}{|c|c|}\hline
FIRST&HEAD\\\hline\endfirsthead
\hline RUNNING&HEAD\\\hline\endhead
RUNNING&FOOT\\\hline\endfoot
LAST&FOOT\\\hline\endlastfoot
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
Test&Test\\ \hline
\end{longtable}
\lipsum[12-15]
\end{document}
修改如何进行:
我们做两件事:宏\LT@output
是 的输出例程longtable
。此例程负责页面排版。在这里,我们获取页面内容(内部存储在\box255
=中\box\@cclv
)并将\shadowbox
其放在周围,但不完全相同,我们必须在不同的地方摆弄\hbox
和\vbox
以获得所需的结果。问题是,对于 的第一页longtable
,这会将表格上方的文本放入框中,这是不受欢迎的。因此,当表格开始排版时,我们修改\LT@start
以测量\pagetotal
页面的。我们在设置表头之后执行此操作,这样我们不必处理\depth
先前内容的。长度\LT@startpageottal
用于存储这个测量值。一旦我们知道表格上方的文本有多高,我们就可以\shadowbox
假设框的内容比这个高。