如何检测分页符并在每个新页面的类型块顶部插入文本?

如何检测分页符并在每个新页面的类型块顶部插入文本?

我有一个文档,它提取一个外部 .tex 文件,该文件是从数据库程序生成的,然后解释成用 编写的多页表格状图形TikZ

但是,当我点击分页符时,我需要能够添加标题行,就像 longtable 所做的那样。目前我正在使用包everypage,但这不是最理想的,因为它与 配合得不是很好memoir,破坏了我的边距,添加了第三个引用来处理(与memoirTikZ current page定位分开)。它还会在页面执行后运行其代码(据我所知?),这使得引用上一页发生的事情变得困难。

我曾尝试阅读longtable,但并没有取得多大进展——它令人印象深刻,但如果没有指导则有点神秘。

为表形图实现类似长表的重复标题的正确方法是什么?

这是我尝试过的 MWE:

理论上,每次执行时都会检查\exampleblock页面上是否有页眉,如果没有,则添加一个。它在第一页上工作正常,但之后总是低了两个块——我真的不知道为什么。

% !TEX TS-program = xelatex

\documentclass[showtrims]{memoir}
\usepackage{tikz}

\setstocksize{11in}{8.5in}
\settrimmedsize{8.5in}{5.5in}{*}
\settrims{1in}{1in}
\setulmarginsandblock{1in}{1in}{*}
\setlrmarginsandblock{1in}{.75in}{*}

\checkandfixthelayout

\newcounter{headeronpage}

\newcommand\exampleblock{\vfill%
    \ifnum\value{headeronpage}<\value{page}%
        \headerthing\vfill\fi%
    \noindent\tikz\draw(0,0)rectangle%
    (\linewidth,12ex)node[pos=.5]%
    {I'm a fancy TikZ drawing!};%
}

\newcommand\headerthing{%
    \setcounter{headeronpage}{\value{page}}%
    \noindent\tikz\draw (0,0)%
    rectangle (\linewidth,4ex)%
    node[pos=.5]{I'm a header thing!};%
}

\begin{document}

    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock

\end{document}

在类似的包裹中如何处理这个挑战longtable

只是为了澄清:我知道fancyhdr一些东西(虽然不知道它们在底层是如何工作的),我想要做的不是那种标题,而是一个长表格。

答案1

我想我可能找到了解决方案:

(基于此问题和答案)

% !TEX TS-program = xelatex

\documentclass[showtrims]{memoir}
\usepackage{tikz}

\setstocksize{11in}{8.5in}
\settrimmedsize{8.5in}{5.5in}{*}
\settrims{1in}{1in}
\setulmarginsandblock{1in}{1in}{*}
\setlrmarginsandblock{1in}{.75in}{*}

\checkandfixthelayout

\newcounter{headeronpage}

\newlength\blockheight
\setlength\blockheight{.5in}

\newcommand\exampleblock{\vfill%
    \ifnum\dimexpr\pagetotal+\blockheight>\textheight%
        \headerthing\vfill\fi%
    \noindent\tikz\draw(0,0)rectangle%
    (\linewidth,\blockheight)node[pos=.5]%
    {Pagetotal says \the\pagetotal 
    and the text is \the\textheight};%
}

\newcommand\headerthing{%
    \setcounter{headeronpage}{\value{page}}%
    \noindent\tikz\draw (0,0)%
    rectangle (\linewidth,4ex)%
    node[pos=.5]{I'm a header thing!};%
}

\begin{document}

    \headerthing

    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock
    \exampleblock

\end{document}

关键的区别在于\value{page},我不是检查,而是从顶部测量\pagetotal,然后如果下一个块不适合,则放置一个标题:

\ifnum\dimexpr\pagetotal+\blockheight>\textheight\headerthing\vfill\fi%

相关内容