%20%ED%85%8C%EC%9D%B4%EB%B8%94%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EC%9E%AC%EC%82%AC%EC%9A%A9.png)
이를 바탕으로Tikz에서 생성된 테이블 형식 환경, 나는 TikZ로 간단한 것을 포장하려고 했습니다 tabular
(아마도 tcolorbox를 사용할 수 있지만 문서는 나를 위해 등반할 에베레스트처럼 보입니다).
내 문제
"long"은 tabular
4개의 블록으로 구분됩니다(이 예에서는 실제로는 더 많습니다). 각 블록은 강의에서 분석됩니다. 4번의 강의가 끝나면 긴 내용이 tabular
전체적으로 이해가 될 것입니다.
내 질문
이 큰 테이블을 한 번만 입력하고 실제로 각 블록을 사용하려면(제가 잘못한 것 같은 느낌이 듭니다) 어떻게 해야 할까요?(예제에서는 \hline 사이가 제대로 구분되지 않았지만 이를 수행하는 훨씬 더 좋은 방법이 있다고 생각합니다.) ), 원본과 동일한 형식으로 ?
아래 MWE
\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}