如何使标题中的表格忽略当前处理的长表设置的环境

如何使标题中的表格忽略当前处理的长表设置的环境

我的标题中有一个表格,使用fancyhdrlongtable占用多页。longtable由环境创建,还设置了一些变量:

\newcolumntype{|}{!{\color{white}\vline}}
\rowcolors{2}{greylight}{greynormal}%
\setlength{\tabcolsep}{12pt}%                             
\setlength{\extrarowheight}{5pt}%                                       
\setlength{\arrayrulewidth}{2pt}%

我面临的问题是,在所有长表尚未完成的页面上,标题中的表格将使用这些更改。

在我的标题中,是否有一种方便的方法来重置所有可能已经设置的变量?

目前,我在标题中重新定义了那些特定变量,但我发现它很脏并且不太健壮。

答案1

正如我在评论中指出的那样,你做的是正确的。LaTeX 重置了标题中的几项内容,但列表相当临时,而且你需要确保标题中放入的任何代码的环境都是标准化的,这并不罕见。

基本上,LaTeX 目前恢复了以下内容:

文档默认字体:

  \reset@font\normalsize

正常空间因子设置

  \normalsfcodes

如果将节标题复制到页面标题,请避免在每一页上写标签信息

  \let\label\@gobble
  \let\index\@gobble
  \let\glossary\@gobble

清零基线

  \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@

...

默认文档颜色

\normalcolor

因此,您将看到,没有单一全局重置的概念,也没有安排文档范围的可能性,使得页面内的设置不会泄漏到标题代码中。

然后,大多数多行标题也会\@parboxrestore直接调用,或者将多行代码放入 parbox 或 minipage 中。这会重置一些附加参数。

\def\@arrayparboxrestore{%
  \let\if@nobreak\iffalse
  \let\if@noskipsec\iffalse
  \let\par\@@par
  \let\-\@dischyph
  \let\'\@acci\let\`\@accii\let\=\@acciii
  \parindent\z@ \parskip\z@skip
  \everypar{}%
  \linewidth\hsize
  \@totalleftmargin\z@
  \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
  \parfillskip\@flushglue \lineskip\normallineskip
  \baselineskip\normalbaselineskip
  \sloppy}
\def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}

因此,在标题代码中明确重置(比如说)的替代方法\tabcolsep是将其重置添加到\@arrayparboxrestore这意味着任何tabular嵌套在p列中的longtable都将获得重置值,而不是外部使用的值longtable。所以这取决于您的要求......

相关内容