整个页面上的自动重排表格

整个页面上的自动重排表格

我需要重现以下两种布局(如果重要的话,以横向显示),仅涉及表格:

在此处输入图片描述

第一个布局只是 1 个长表格,从左上角延伸到右下角,表格中的条目应自动适应适当的垂直空间。重要的是整个页面都被利用了。

第二个问题大致相同,但我不是只有 1 个表格,而是有更多表格;并且所有表格仍然需要从左上角到右下角一起自动调整,但我还想调整每个表格之间的垂直间距(图中的红色空间),并且每个表格的条目应根据我调整后留下的空间自动适应垂直空间。

我快速浏览了手册/文档/pdf表格型包,但我认为它没有提到任何有关这种对齐和配合的内容,所以我正在寻找解决方案和建议。

请注意,除了此文档中的表格数据本身之外,我不需要任何其他内容,我不需要标题或文档的其他组成部分(脚注,页码等),我可以将整个页面仅用于表格。

谢谢您的帮助 。

答案1

我不会使用表格,而是定义自定义pics使用蒂克兹-- 您可以pics在 tikz 手册(版本 3.0.1a)的第 18.2 节中阅读有关所有内容 -- 然后我将所有内容包装到自定义宏中,以便命令

\GrayTable{1,1,1,1}
\newpage

\RedTable{0.8,0.1,0.4,0.3}

将产生两个页面

在此处输入图片描述

逗号分隔列表中的数字将\GrayTable成为表格中打印的数字。在\RedTable宏中,这些数字给出了每列中行的“相对”高度,表格单元格中的数字与 MWE 中一样自动生成。

使用tikzpage节点我已让表格填满页面的整个“文本区域”。可能会出现打印问题,但您可以通过将所有出现的 替换为 来让表格填满整个current page header area页面current page

事实上,下面的宏稍微更通用一点,在合理范围内,它们不限于四列,而且以完全相同的方式产生(参见下面 MWE 中的第二个例子):

在此处输入图片描述

完整代码如下:

\documentclass[svgnames]{article}
\usepackage[a4paper, landscape]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tikzpagenodes}

\tikzset{
  gray cell/.style = {
      rectangle,
      fill=SlateGray,
      draw=LightGray,
      line width=2mm,
      anchor=north west,
      minimum height=\textheight,
      font=\Huge
  },
  pics/gray cells/.style args = {#1}{
     code = {
        % count the number of columns
        \foreach \x [count=\c, remember=\c as \C] in {#1} {};
        \foreach \x [count=\c, evaluate=\c as \r using {\c/\C}] in {#1} {
          \node[gray cell, minimum width=\textwidth/\C] at
            ($ (current page header area.north west)!\r!(current page header area.north east) $)
            {\x};
        }
     }
  },
  gray line/.style = {
    fill=LightGray,
    draw=LightGray,
  },
  red line/.style = {
    fill=Red,
    draw=Red,
  },
  pics/red cells/.style args = {#1}{
    code = {
      % count the number of columns

      \foreach \cell [count=\c, remember=\c as \C] in {#1} {};
      \foreach \x [count=\c, evaluate=\c as \r using {\c/\C},
                   evaluate=\c as \d using {int(\c+1)}] in {#1} {
        \node[gray cell, minimum width=\textwidth/\C] (RC\c) at
          ($ (current page header area.north west)!\r!(current page header area.north east) $){};
        \coordinate (RCL\c) at ($ (RC\c.north west)!\x!(RC\c.south west)+(0,1mm) $);
        \coordinate (RCR\c) at ($ (RC\c.north east)!\x!(RC\c.south east)-(0,1mm) $);
        \draw[gray line] (RCL\c) rectangle (RCR\c);
        \draw[red line] ($ (RCL\c)+(8mm,0) $) rectangle ($ (RCR\c)-(8mm,0) $);
        \node[font=\Huge] at ($ (-0.8,0.8) + (RCR\c.north east) $) {\c};
        \node[font=\Huge] at ($ (-0.8,0.8) + (RC\c.south east) $) {\d};
      }
    }
  }
}

\newcommand\GrayTable[1]{\tikz{\pic at (0,0) {gray cells={#1}};}}
\newcommand\RedTable[1]{\tikz{\pic at (0,0) {red cells={#1}};}}

\pagestyle{empty}
\begin{document}

\GrayTable{1,1,1,1}
\newpage

\RedTable{0.8,0.1,0.4,0.3}
\newpage

\GrayTable{1,2,3,4,5,6}
\newpage

\RedTable{0.8,0.1,0.5,0.7,0.4,0.3}

\end{document}

相关内容