%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%B9%20%D1%84%D0%BE%D1%80%D0%BC%D1%8B.png)
Основываясь на этомтабличная-среда-созданная-в-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}