将长表放在 \shadowbox 内

将长表放在 \shadowbox 内

我有一个由长表包生成的多页表,我想把每一页都放在里面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包:framedshadowbox

\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假设框的内容比这个高。

相关内容