我有一个文档,它提取一个外部 .tex 文件,该文件是从数据库程序生成的,然后解释成用 编写的多页表格状图形TikZ
。
但是,当我点击分页符时,我需要能够添加标题行,就像 longtable 所做的那样。目前我正在使用包everypage
,但这不是最理想的,因为它与 配合得不是很好memoir
,破坏了我的边距,添加了第三个引用来处理(与memoir
和TikZ 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%