순수한 도전으로, 나는 거대한 표 열을 그리려고 노력합니다. 거의 다 했는데 높이를 조절하는 데 여전히 문제가 있습니다.
\documentclass[a4paper]{article}
\usepackage{array,tabularx,tikz,ragged2e,siunitx,xparse}
\usetikzlibrary{calc,backgrounds}
% 3 couches de dessin
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\renewcommand\tabularxcolumn[1]{m{#1}}
\makeatletter
\newcommand{\RowHeight}{% see e.g. https://tex.stackexchange.com/a/84536/121799
\def\tmp{\dimexpr\arraystretch\ht\strutbox+\arraystretch\ht\strutbox+\arraystretch\dp\@arstrutbox}\relax
\xdef\myrowheight{\the\tmp}\relax
}
\makeatother
\NewDocumentCommand{\Daube}{sms}{%
\begin{tikzpicture}[baseline=(A.base),overlay]
\node[text depth=0pt,text height=1ex,
minimum height=\myrowheight,
minimum width=2cm+2\tabcolsep]
(A) {\textbf{\textsf{#2}}};
\begin{pgfonlayer}{background}
\draw[fill=blue!15,draw=white,line width=2\arrayrulewidth]
\IfBooleanT{#1}{[rounded corners=12pt]}
([yshift=2.5\arrayrulewidth]A.south west)
-- ([yshift=2\arrayrulewidth]A.north west)
\IfBooleanT{#1}{[rounded corners=0pt]}
\IfBooleanT{#3}{[rounded corners=12pt]}
-- ([yshift=2\arrayrulewidth]A.north east)
\IfBooleanT{#3}{[rounded corners=0pt]}
-- ([yshift=2.5\arrayrulewidth]A.south east) -- cycle ;
\end{pgfonlayer}
\end{tikzpicture}}
\begin{document}
{\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
X*{3}{>{\Centering}m{2cm}}}
Entourer la ou les bonne(s) reponse(s)\RowHeight
& \Daube*{a}
& \Daube{b}
& \Daube{p}*
\\\hline
\end{tabularx}}
\bigskip
{\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
X*{3}{>{\Centering}m{2cm}}}
Entourer la reponse\RowHeight
& \Daube*{a}
& \Daube{b}
& \Daube{p}*
\\\hline
\end{tabularx}}
\end{document}
답변1
이와 같이:?
편집하다:
코드는 원하는대로 tabularx
및 의 조합입니다 :-). tikz
이제 부록에서 솔루션의 모든 개선 사항을 고려하는 방식으로 수정되었습니다.
\documentclass[a4paper]{article}
\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}
\usepackage{ragged2e}
\usepackage{siunitx}
\usepackage{tikz}
\newcommand{\DL}[1]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=12mm, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -| (\LN.north east)
{[rounded corners=6mm] -- (\LN.north west)} -- cycle;
\path[draw=blue!15, thick,
shorten <=0.5\pgflinewidth, shorten >=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#1};
\end{tikzpicture} }
\newcommand{\DC}[1]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=12mm, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -| (\LN.north east) -| cycle;
\path[draw=blue!15, thick,
shorten <=0.5\pgflinewidth, shorten >=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#1};
\end{tikzpicture}}
%
\newcommand{\DR}[1]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=12mm, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -- (\LN.south east)
{[rounded corners=6mm] -- (\LN.north east)} -| cycle;
\path[draw=blue!15, thick,
shorten <=0.5\pgflinewidth, shorten >=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#1};
\end{tikzpicture}}
\begin{document}
\begingroup
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
>{\raggedright}X *{3}{@{}>{\Centering}m{\dimexpr2cm+2\tabcolsep}@{}}
}
Entourer la ou les bonne(s) reponse(s)
& \DL{a} & \DC{b} & \DR{p} \\
\hline
\end{tabularx}
\bigskip
\begin{tabularx}{\linewidth}{%
>{\raggedright}X*{3}{@{}>{\Centering}m{\dimexpr2cm+2\tabcolsep}@{}}
}
Entourer la reponse
& \DL{a} & \DC{b} & \DR{p} \\
\hline
\end{tabularx}
\endgroup
\end{document}
첫 번째 열의 텍스트 높이에 Tizz 그림 높이를 적용하려면 자동 솔루션이 무엇인지 모르겠습니다. 그러나 명령의 코드를 확장하여 각 용도에 따라 노드 높이를 미리 변경할 수 있습니다(현재는 12mm로 설정됨).
추가:
그 동안 나는 tikz
첫 번째 테이블 열의 첫 번째 셀 높이에 노드 높이를 자동으로 적용하는 새로운 솔루션을 만들었습니다. 계산은 첫 번째 셀 내용 높이의 측정을 기반으로 합니다. 얻은 결과는 다음과 같습니다
므웨:
\documentclass[12pt]{article}
\usepackage{array,tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}
\usepackage{ragged2e}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{calc,backgrounds}
% commands \DaubeL, \DaubeL, \DaubeL are renamed for
% shorter writing to \DL, \DC and \DR
% all commands recoded (simplified) and adopted
% to automatic determination of tikz node heights
\newcommand{\DL}[2]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=#1, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -| (\LN.north east)
{[rounded corners=\CH/2] -- (\LN.north west)} -- cycle;
\path[draw=blue!15, thick, shorten <=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#2};
\end{tikzpicture} }
\newcommand{\DC}[2]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=#1, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -| (\LN.north east) -| cycle;
\path[draw=blue!15, thick, shorten <=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#2};
\end{tikzpicture}}
%
\newcommand{\DR}[2]{%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\node[minimum width=\dimexpr2cm+2\tabcolsep,
minimum height=#1, text depth=0.25ex,
inner ysep=2mm, outer sep=0pt,
append after command={
\pgfextra{\let\LN\tikzlastnode
\path[draw=white, thick, fill=blue!15]
(\LN.south west) -- (\LN.south east)
{[rounded corners=\CH/2] -- (\LN.north east)} -| cycle;
\path[draw=blue!15, thick,
shorten <=0.5\pgflinewidth, shorten >=0.5\pgflinewidth]
(\LN.south west) -- (\LN.south east);
} },
font=\bfseries] {#2};
\end{tikzpicture}}
% command for calculation of height of first cel in the first column
% by experiments is determined minimum height: 1.7\baselineskip
\newcommand\firstcell[1]{
\sbox\cellbox{\parbox{\FC}{\raggedright #1}}
\pgfmathparse{max(8mm,\dimexpr\ht\cellbox+2\dp\cellbox)}
\setlength\CH{\pgfmathresult pt}
}
% boxes and length needed in automatic calculation
% of tikz nodes and for shortcut for first column width
\newsavebox\cellbox
\newlength{\CH}% CellHight
\newlength{\FC}% FirstColumn width
\begin{document}
\begingroup
\renewcommand{\arraystretch}{1.3}
\setlength\FC{\dimexpr\linewidth-6cm-6\tabcolsep\relax}
\firstcell{Entourer la ou les bonne(s) reponse(s)}
\begin{tabularx}{\linewidth}{%
X*{3}{@{}>{\Centering}m{\dimexpr2cm+2\tabcolsep}@{}}
}
\usebox\cellbox
& \DL{\CH}{a} & \DC{\CH}{b} & \DR{\CH}{p} \\
\hline
\end{tabularx}
\bigskip
\firstcell{Entourer la reponse}
\begin{tabularx}{\linewidth}{%
X*{3}{@{}>{\Centering}m{\dimexpr2cm+2\tabcolsep}@{}}
}
\usebox\cellbox
& \DL{\CH}{a} & \DC{\CH}{b} & \DR{\CH}{p} \\
\hline
\end{tabularx}
\endgroup
\end{document}
첫 번째 솔루션의 (심각하게 변경된) 모든 변경 사항에 대한 기본 설명은 mwe 코드에 설명되어 있습니다.