¿Cómo llenar un cuadro tabular con un nodo tikz y centrar h/v el texto?
No quiero utilizar el paquete colortbl en este caso.
\documentclass[a4paper]{article}
\usepackage{array,tabularx,tikz,ragged2e,siunitx}
\begin{document}
{\renewcommand\tabularxcolumn[1]{m{#1}}
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
|X|*{3}{>{\Centering}m{2cm}|}}\hline
Entourer la ou les bonne(s) reponse(s)
&\tikz[baseline,overlay]
\node[fill=blue!15,minimum height=20pt,minimum width=2cm+2\tabcolsep] (A) {a};
&b&p\\\hline
\end{tabularx}}
\end{document}
Respuesta1
No estoy seguro de haber entendido su pregunta, pero si desea alinear a verticalmente con b y c, considere
\documentclass[a4paper]{article}
\usepackage{array,tabularx,tikz,ragged2e,siunitx}
\begin{document}
{\renewcommand\tabularxcolumn[1]{m{#1}}
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
|X|*{3}{>{\Centering}m{2cm}|}}\hline
Entourer la ou les bonne(s) reponse(s)
&\tikz[baseline=(A.base),overlay]
\node[fill=blue!15,minimum height=20pt,minimum width=2cm+2\tabcolsep] (A) {a};
&b&p\\\hline
\end{tabularx}}
\end{document}
ACTUALIZAR: OK, veo que @Zarko ya te dio lo que querías. Por diversión, seguí un poco tu enfoque original y aquí es donde obtuve:
\documentclass[a4paper]{article}
\usepackage{array,tabularx,tikz,ragged2e,siunitx}
\usetikzlibrary{calc}
\newcommand{\TikzStrut}[1]{\tikz[overlay,remember picture]{\node(#1){\strut};}}
\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
\begin{document}
{\renewcommand\tabularxcolumn[1]{m{#1}}
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
|X|*{3}{>{\Centering}m{2cm}|}}\hline
Entourer la ou les bonne(s) reponse(s)\RowHeight
&\tikz[baseline=(A.base),overlay,remember picture]{
\node[fill=blue!15,minimum height=\myrowheight,minimum width=2cm+2\tabcolsep] (A)
{a};}
&b&p\\\hline
\end{tabularx}}
\end{document}
Calcula correctamente la altura de la fila (creo), pero solo después de usar el hecho de que hay una fila con dos líneas. Y además la alineación vertical no es perfecta. Solo lo estoy publicando para poder completarlo si es necesario más adelante.
Respuesta2
Sospecho que estás buscando esto:
para esto no necesitas magia con tikz
:
\documentclass[a4paper]{article}
\usepackage{array,tabularx}%reorganized loading of package
\renewcommand\tabularxcolumn[1]{m{#1}} % added
\usepackage{ragged2e}
%\usepackage{tikz} % is not used in mwe
%\usepackage{siunitx} % is not used in mwe
%
\usepackage[table]{xcolor}% new package, for coloring table
\begin{document}
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{|X|*{3}{>{\Centering}m{2cm}|}}
\hline
Entourer la ou les bonne(s) reponse(s)
& \cellcolor{blue!15}{a} & b & p \\
\hline
\end{tabularx}
\end{document}
apéndice (editado): de la discusión en los comentarios a continuación *y de su seguimiento pregunta* concluyo que realmente te gusta tenersolución similar al primer ejemplo en mi respuesta que proporciono en esa pregunta (seguimiento):
*que permiten cambios adicionales en la forma del nodo como mencionó en el comentario a continuación y explica con más detalle en su pregunta de seguimiento:
\documentclass[12pt]{article}
\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}
\usepackage{ragged2e}
\usepackage{tikz}
\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[fill=blue!15]
(\LN.south west) -| (\LN.north east) -| cycle;
} },
font=\bfseries] {#1};
\end{tikzpicture}}
\begin{document}
\begingroup
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{\linewidth}{%
|>{\raggedright}X | *{3}{@{}>{\Centering}m{\dimexpr2cm+2\tabcolsep}@{}|}
}
\hline
Entourer la ou les bonne(s) reponse(s)
& \DC{a} & b & c \\
\hline
\end{tabularx}
\endgroup
\end{document}