Повторно использовать часть табличного объекта в качестве (меньшей) табличной формы

Повторно использовать часть табличного объекта в качестве (меньшей) табличной формы

Основываясь на этомтабличная-среда-созданная-в-tikz, я хотел обернуть простую вещь tabularв TikZ (вероятно, можно было бы использовать tcolorbox, но документация выглядит так, будто мне предстоит покорить Эверест).

Мой проблемный

«Длинный» tabularразделён на 4 блока (в данном примере, на самом деле больше). Каждый блок будет проанализирован на лекции. В конце 4 лекций длинный tabularбудет иметь смысл как единое целое.

введите описание изображения здесь

Мой вопрос

Что мне следует сделать (у меня такое чувство, что я неправильно все понял), чтобы набрать эту большую таблицу только один раз, но на самом деле использовать каждый блок (плохо разделенный \hline в примере, но я полагаю, что есть гораздо лучший способ сделать это), в том же формате, что и оригинал?

введите описание изображения здесь

введите описание изображения здесь

МВЭ ниже

\documentclass{standalone}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{array}
\usepackage{environ}
\usepackage{tikz}

\usepackage{caption}

\newsavebox{\tablebox}
\definecolor{tablecolor}{named}{orange}

\NewEnviron{rndtable}[1]{%
  \addtolength{\extrarowheight}{1ex}%
  \rowcolors{2}{tablecolor!5}{tablecolor!20}%
  \sffamily
  \newcommand{\header}[1]{%
    \multicolumn{1}{l}{%
      \cellcolor{tablecolor}%
      \color{white}%
      \bfseries##1%
    }%
  }%
  \savebox{\tablebox}{%
    \begin{tabular}{#1}%
      \BODY
    \end{tabular}%
  }%
%
  \begin{tikzpicture}
    \begin{scope}
      \clip[rounded corners=1ex]
        (0,-\dp\tablebox) rectangle (\wd\tablebox,\ht\tablebox);
      \node at (0,-\dp\tablebox) [anchor=south west,inner sep=0pt]
            {\usebox{\tablebox}};
    \end{scope}
    \draw[tablecolor,very thick,rounded corners=1ex]
      (0,-\dp\tablebox) rectangle (\wd\tablebox,\ht\tablebox);
  \end{tikzpicture}%
}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}

\begin{document}

\begin{rndtable}{r P{5cm}} %  
    \multicolumn{2}{l}{Block 2} \\ \hline
Block 1 Field 1 & Description that can be long, very long, even longer\\ 
Block 1 Field 2 & Description \\ 
Block 1 Field 3 & Description \\ 
Block 1 Field 4 & Description \\ 
    \hline
Block 2 Field 1 & Description that can be long, very long, even longer\\ 
Block 2 Field 2 & Description \\ 
Block 2 Field 3 & Description \\ 
Block 2 Field 4 & Description \\ 
    \hline
Block 3 Field 1 & Description that can be long, very long, even longer\\ 
Block 3 Field 2 & Description \\ 
Block 3 Field 3 & Description \\ 
Block 3 Field 4 & Description \\ 
    \hline
Block 4 Field 1 & Description that can be long, very long, even longer\\ 
Block 4 Field 2 & Description \\ 
Block 4 Field 3 & Description \\ 
Block 4 Field 4 & Description \\ 
    \hline
\end{rndtable}    

\end{document}

решение1

Один из подходов — возможно, неэлегантный — заключается в определении команд для отображения блоков. При этом вы можете сделать так, чтобы одна команда переносила всю таблицу (как в MWE ниже), или иметь одну команду в каждой маленькой таблице, а затем создать большую, собрав эти команды.

Смотрите такжеэтот вопрос.

\documentclass{article}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{array}
\usepackage{environ}
\usepackage{tikz}

\usepackage{caption}

\newsavebox{\tablebox}
\definecolor{tablecolor}{named}{orange}

\NewEnviron{rndtable}[1]{%
  \addtolength{\extrarowheight}{1ex}%
  \rowcolors{2}{tablecolor!5}{tablecolor!20}%
  \sffamily
  \newcommand{\header}[1]{%
    \multicolumn{1}{l}{%
      \cellcolor{tablecolor}%
      \color{white}%
      \bfseries##1%
    }%
  }%
  \savebox{\tablebox}{%
    \begin{tabular}{#1}%
      \BODY
    \end{tabular}%
  }%
%
  \begin{tikzpicture}
    \begin{scope}
      \clip[rounded corners=1ex]
        (0,-\dp\tablebox) rectangle (\wd\tablebox,\ht\tablebox);
      \node at (0,-\dp\tablebox) [anchor=south west,inner sep=0pt]
            {\usebox{\tablebox}};
    \end{scope}
    \draw[tablecolor,very thick,rounded corners=1ex]
      (0,-\dp\tablebox) rectangle (\wd\tablebox,\ht\tablebox);
  \end{tikzpicture}%
}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}

\begin{document}

\newcommand{\block}[1]{
    \ifcase#1\or% https://tex.stackexchange.com/questions/17676/conditional-cases-expression
        \hline
        Block 1 Field 1 & Description that can be long, very long, even longer\\ 
        Block 1 Field 2 & Description \\ 
        Block 1 Field 3 & Description \\ 
        Block 1 Field 4 & Description \\ 
    \or
        \hline
        Block 2 Field 1 & Description that can be long, very long, even longer\\ 
        Block 2 Field 2 & Description \\ 
        Block 2 Field 3 & Description \\ 
        Block 2 Field 4 & Description \\ 
    \or
        \hline
        Block 3 Field 1 & Description that can be long, very long, even longer\\ 
        Block 3 Field 2 & Description \\ 
        Block 3 Field 3 & Description \\ 
        Block 3 Field 4 & Description \\
    \or
        \hline
        Block 4 Field 1 & Description that can be long, very long, even longer\\ 
        Block 4 Field 2 & Description \\ 
        Block 4 Field 3 & Description \\ 
        Block 4 Field 4 & Description \\ 
    \else
        block #1 not defined
    \fi
}

\begin{rndtable}{r P{5cm}} %  
    \multicolumn{2}{l}{All Blocks} \\ \hline
    \block{1}
    \block{2}
    \block{3}
    \block{4}
    \hline
\end{rndtable}

\vspace{\baselineskip}

\begin{rndtable}{r P{5cm}} %  
    \multicolumn{2}{l}{Block 2} \\ \hline
    \block{2}
    \hline
\end{rndtable}

\end{document}

Скриншот

Редактировать: Если вы хотите дать каждому блоку имя, вы можете использовать, например,etoolboxкоманда \ifstrequal(§3.6.3 руководства).

\newcommand{\block}[1]{
    \ifstrequal{#1}{block1}{%
        Block 1 Field 1 & Description that can be long, very long, even longer\\
        Block 1 Field 2 & Description \\
        Block 1 Field 3 & Description \\
        Block 1 Field 4 & Description
    }{}\ifstrequal{#1}{block2}{%
        Block 2 Field 1 & Description that can be long, very long, even longer\\ 
        Block 2 Field 2 & Description \\
        Block 2 Field 3 & Description \\ 
        Block 2 Field 4 & Description
    }{}\ifstrequal{#1}{block3}{%
        Block 3 Field 1 & Description that can be long, very long, even longer\\ 
        Block 3 Field 2 & Description \\ 
        Block 3 Field 3 & Description \\ 
        Block 3 Field 4 & Description
    }{}\ifstrequal{#1}{block4}{%
        Block 4 Field 1 & Description that can be long, very long, even longer\\ 
        Block 4 Field 2 & Description \\ 
        Block 4 Field 3 & Description \\ 
        Block 4 Field 4 & Description
    }
}

\begin{rndtable}{r P{5cm}} %  
    \multicolumn{2}{l}{All Blocks} \\ \hline
    \block{block1} \\ \hline
    \block{block2} \\ \hline
    \block{block3} \\ \hline
    \block{block4} \\
\end{rndtable}

\begin{rndtable}{r P{5cm}} %  
    \multicolumn{2}{l}{Block 2} \\ \hline
    \block{block2} \\
    \hline
\end{rndtable}

Связанный контент