Después de leer algunos ejemplos de matrices de nodos, escribí este MWE:
\documentclass{article}
\usepackage{tikz}\usetikzlibrary{matrix}
\usepackage{booktabs}
\begin{document}
See the Table \ref{fig:cen2}.
\begin{table}[htb!]
\caption{My very very very very very long useless caption}
\label{fig:cen2}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
nodes in empty cells,
toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north east);%
}
},
bottomrule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
midrule/.style={%
execute at end cell={%
\draw (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east)--(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
%
anchor=base,
row sep = -\pgflinewidth,
column sep = -\pgflinewidth,
%
row 1/.style={nodes={font=\bfseries, align = center}, anchor = south},%toprule = thick
row 2/.style={anchor = south},
row 3/.style={anchor = south},
row 4/.style={anchor = south},
row 5/.style={anchor = south},
%
column 1/.style={nodes={ text width=2.5cm,align=left, font = \small}},
column 2/.style={nodes={ text width=4.0cm,align=left, font = \small}},
column 3/.style={nodes={ text width=4.0cm,align=left, font = \small}},
column 4/.style={nodes={ text width=4.0cm,align=left, font = \small}}%rectangle,draw,
] at (0,0)
%
{%
Variables & Hypothesis 1 & Hypothesis 2 & Hypothesis 3 \\
Territorial unit &
Final destination for receiving waste generated in the municipality &
Final destination for receiving waste generated in the municipality &
Final destination to receive the waste generated in the municipality \\
Index of coverage &
Maintenance of the urban coverage index, with focus on short term &
Maintenance of the urban coverage index, focusing on medium term &
Maintenance of the urban coverage index, with a long-term focus \\
Garbage Collection with Recovery of Recyclable garbage &
Increase in the Recovery of Recyclable garbage index in the short term &
Moderate increase in the recovery of recyclable garbage index with focus on medium term &
Expectation of implementation of long-term selective collection \\
Composting of organic waste &
Adhesion and massive investment in compost disposal final solid organic waste &
Adhesion and moderate investment in composting final disposal of organic solid waste &
Investment in composting organic long-term solid waste \\
};
\draw [-, very thick] (m-1-1.north west) -- (m-1-4.north east);%linha 1
\draw [-, thick] (m-1-4.south east) -- (m-1-1.south west);%linha 2
\draw [-, thin] (m-2-1.south west) -- (m-2-4.south east);%linha 3
\draw [-, thin] (m-3-1.south west) -- (m-3-4.south east);%linha 4
\draw [-, thin] (m-4-1.south west) -- (m-4-4.south east);%linha 5
\draw [-, thick] (m-5-1.south west) -- (m-5-4.south east);%linha 6
%
\draw[->, color = green, ultra thick, dashed] (m-2-2.mid) -- ([yshift = -5mm]m-5-2.south);
\draw[->, color = orange, ultra thick, dashed] (m-2-3.mid) -- ([yshift = -5mm]m-5-3.south);
\draw[->, color = red, ultra thick, dashed] (m-2-4.mid) -- ([yshift = -5mm]m-5-4.south);
%
\node [below, yshift = -5mm] at (m-5-2.south) {\textcolor{green} {\bfseries Scenario 1}};
\node [below, yshift = -5mm] at (m-5-3.south) {\textcolor{orange}{\bfseries Scenario 2}};
\node [below, yshift = -5mm] at (m-5-4.south) {\textcolor{red} {\bfseries Scenario 3}};
\end{tikzpicture}
\end{table}
\end{document}
Pero la matriz tiene líneas torcidas. ¿Cómo ajustar las líneas en horizontal?
Respuesta1
Pondría la mesa de otra manera...
tabularx
utilizar el entorno de tabla estándar- para líneas discontinuas verticales utilice
tikzmark
la biblioteca - alinear el contenido de las celdas en la parte superior
- use
raged2e
el paquete para alinear mejor el texto en las celdas - uso
booktabs
para reglas horizontales, de las cuales usaría solo tres - utilizar
makecell
para encabezados de columna y "etiquetas" en la parte inferior de la tabla
considerando lo anterior, el código de la tabla se vuelve mucho más corto, simple y claro (en mi opinión). Por supuesto, para obtener la tabla final es necesario compilar el código al menos dos veces.
\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, calc, tikzmark}
\usepackage{booktabs, makecell, tabularx}
\renewcommand\theadfont{\normalsize\bfseries}
\renewcommand\theadgape{}
\usepackage{ragged2e}
\usepackage[labelfont=bf,
skip=1ex]{caption}
\begin{document}
See the Table \ref{fig:cen2}.
\begin{table}[htb!]
\caption{My very very very very very long useless caption}
\label{fig:cen2}
\small
\begin{tabularx}{\linewidth}{>{\RaggedRight}p{25mm} *{3}{>{\RaggedRight}X}}
\toprule
\thead{Variables} &
\tikzmark{As}\thead{Hypothesis 1}\tikzmark{Ae} &
\tikzmark{Bs}\thead{Hypothesis 2}\tikzmark{Be} &
\tikzmark{Cs}\thead{Hypothesis 3}\tikzmark{Ce} \\
\midrule
Territorial unit &
Final destination for receiving waste generated in the municipality &
Final destination for receiving waste generated in the municipality &
Final destination to receive the waste generated in the municipality \\
\addlinespace
Index of coverage &
Maintenance of the urban coverage index, with focus on short term &
Maintenance of the urban coverage index, focusing on medium term &
Maintenance of the urban coverage index, with a long-term focus \\
\addlinespace
Garbage Collection with Recovery of Recyclable garbage &
Increase in the Recovery of Recyclable garbage index in the short term &
Moderate increase in the recovery of recyclable garbage index with focus on medium term &
Expectation of implementation of long-term selective collection \\
\addlinespace
Composting of organic waste &
Adhesion and massive investment in compost disposal final solid organic waste &
Adhesion and moderate investment in composting final disposal of organic solid waste &
Investment in composting organic long-term solid waste \\
\midrule[\heavyrulewidth]
\addlinespace
&
\tikzmark{AAs}\thead{\textcolor{green}{Scenario 1}}\tikzmark{AAe} &
\tikzmark{BBs}\thead{\textcolor{orange}{Scenario 2}}\tikzmark{BBe}&
\tikzmark{CCs}\thead{\textcolor{red}{Scenario 3}}\tikzmark{CCe}
\end{tabularx}
\begin{tikzpicture}[overlay, remember picture,
line/.style = {draw=#1, line width=1mm, densely dashed, -Straight Barb,
semitransparent, shorten <=5mm, shorten >=3mm}
]
\draw[line=green] ($(pic cs:As)!0.5!(pic cs:Ae)$) -- ($(pic cs:AAs)!0.5!(pic cs:AAe)$);
\draw[line=orange] ($(pic cs:Bs)!0.5!(pic cs:Be)$) -- ($(pic cs:BBs)!0.5!(pic cs:BBe)$);
\draw[line=red] ($(pic cs:Cs)!0.5!(pic cs:Ce)$) -- ($(pic cs:CCs)!0.5!(pic cs:CCe)$);
\end{tikzpicture}
\end{table}
\end{document}
Respuesta2
Puedes solucionarlo agregando \strut
.
\documentclass{article}
\usepackage{tikz}\usetikzlibrary{matrix}
\usepackage{booktabs}
\begin{document}
See the Table \ref{fig:cen2}.
\begin{table}[htb!]
\caption{My very very very very very long useless caption}
\label{fig:cen2}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
nodes in empty cells,
toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north east);%
}
},
bottomrule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
midrule/.style={%
execute at end cell={%
\draw (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east)--(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
%
baseline=base,
row sep = -\pgflinewidth,
column sep = -\pgflinewidth,
%
row 1/.style={nodes={font=\bfseries\strut, align = center}, anchor = south},%toprule = thick
row 2/.style={anchor = south},
row 3/.style={anchor = south},
row 4/.style={anchor = south},
row 5/.style={anchor = south},
%
column 1/.style={nodes={text width=2.5cm,align=left, font = \small\strut}},
column 2/.style={nodes={text width=4.0cm,align=left, font = \small\strut}},
column 3/.style={nodes={text width=4.0cm,align=left, font = \small\strut}},
column 4/.style={nodes={text width=4.0cm,align=left, font = \small\strut}}%rectangle,draw,
] at (0,0)
%
{%
Variables & Hypothesis 1 & Hypothesis 2 &
Hypothesis 3 \\
Territorial unit &
Final destination for receiving waste generated in the municipality &
Final destination for receiving waste generated in the municipality &
Final destination to receive the waste generated in the municipality \\
Index of coverage &
Maintenance of the urban coverage index, with focus on short term &
Maintenance of the urban coverage index, focusing on medium term &
Maintenance of the urban coverage index, with a long-term focus \\
Garbage Collection with Recovery of Recyclable garbage &
Increase in the Recovery of Recyclable garbage index in the short term &
Moderate increase in the recovery of recyclable garbage index with focus on medium term &
Expectation of implementation of long-term selective collection \\
Composting of organic waste &
Adhesion and massive investment in compost disposal final solid organic waste &
Adhesion and moderate investment in composting final disposal of organic solid waste &
Investment in composting organic long-term solid waste \\
};
\draw [-, very thick] (m-1-1.north west) -- (m-1-4.north east);%linha 1
\draw [-, thick] (m-1-4.south east) -- (m-1-1.south west);%linha 2
\draw [-, thin] (m-2-1.south west) -- (m-2-4.south east);%linha 3
\draw [-, thin] (m-3-1.south west) -- (m-3-4.south east);%linha 4
\draw [-, thin] (m-4-1.south west) -- (m-4-4.south east);%linha 5
\draw [-, thick] (m-5-1.south west) -- (m-5-4.south east);%linha 6
%
\draw[->, color = green, ultra thick, dashed] (m-2-2.mid) -- ([yshift = -5mm]m-5-2.south);
\draw[->, color = orange, ultra thick, dashed] (m-2-3.mid) -- ([yshift = -5mm]m-5-3.south);
\draw[->, color = red, ultra thick, dashed] (m-2-4.mid) -- ([yshift = -5mm]m-5-4.south);
%
\node [below, yshift = -5mm] at (m-5-2.south) {\textcolor{green} {\bfseries Scenario 1}};
\node [below, yshift = -5mm] at (m-5-3.south) {\textcolor{orange}{\bfseries Scenario 2}};
\node [below, yshift = -5mm] at (m-5-4.south) {\textcolor{red} {\bfseries Scenario 3}};
\end{tikzpicture}
\end{table}
\end{document}
\begin{table}[htb!]
\caption{My very very very very very long useless caption}
\label{fig:cen2}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
nodes in empty cells,
toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north east);%
}
},
bottomrule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
midrule/.style={%
execute at end cell={%
\draw (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east)--(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south east);%
}
},
%
baseline=base,
row sep = -\pgflinewidth,
column sep = -\pgflinewidth,
%
row 1/.style={nodes={font=\bfseries\strut, align = center}, anchor = south},%toprule = thick
row 2/.style={anchor = south},
row 3/.style={anchor = south},
row 4/.style={anchor = south},
row 5/.style={anchor = south},
%
column 1/.style={nodes={ text width=2.5cm,align=left, font = \small\strut}},
column 2/.style={nodes={ text width=4.0cm,align=left, font = \small\strut}},
column 3/.style={nodes={ text width=4.0cm,align=left, font = \small\strut}},
column 4/.style={nodes={ text width=4.0cm,align=left, font = \small\strut}}%rectangle,draw,
] at (0,0)
%
{%
Variables & Hypothesis 1 & Hypothesis 2 &
Hypothesis 3 \\
Territorial unit &
Final destination for receiving waste generated in the municipality &
Final destination for receiving waste generated in the municipality &
Final destination to receive the waste generated in the municipality \\
Index of coverage &
Maintenance of the urban coverage index, with focus on short term &
Maintenance of the urban coverage index, focusing on medium term &
Maintenance of the urban coverage index, with a long-term focus \\
Garbage Collection with Recovery of Recyclable garbage &
Increase in the Recovery of Recyclable garbage index in the short term &
Moderate increase in the recovery of recyclable garbage index with focus on medium term &
Expectation of implementation of long-term selective collection \\
Composting of organic waste &
Adhesion and massive investment in compost disposal final solid organic waste &
Adhesion and moderate investment in composting final disposal of organic solid waste &
Investment in composting organic long-term solid waste \\
};
\draw [-, very thick] (m-1-1.north west) -- (m-1-4.north east);%linha 1
\draw [-, thick] (m-1-4.south east) -- (m-1-1.south west);%linha 2
\draw [-, thin] (m-2-1.south west) -- (m-2-4.south east);%linha 3
\draw [-, thin] (m-3-1.south west) -- (m-3-4.south east);%linha 4
\draw [-, thin] (m-4-1.south west) -- (m-4-4.south east);%linha 5
\draw [-, thick] (m-5-1.south west) -- (m-5-4.south east);%linha 6
%
\draw[->, color = green, ultra thick, dashed] (m-2-2.mid) -- ([yshift = -5mm]m-5-2.south);
\draw[->, color = orange, ultra thick, dashed] (m-2-3.mid) -- ([yshift = -5mm]m-5-3.south);
\draw[->, color = red, ultra thick, dashed] (m-2-4.mid) -- ([yshift = -5mm]m-5-4.south);
%
\node [below, yshift = -5mm] at (m-5-2.south) {\textcolor{green} {\bfseries Scenario 1}};
\node [below, yshift = -5mm] at (m-5-3.south) {\textcolor{orange}{\bfseries Scenario 2}};
\node [below, yshift = -5mm] at (m-5-4.south) {\textcolor{red} {\bfseries Scenario 3}};
\end{tikzpicture}
\end{table}
\end{document}
Pero debo admitir que también estoy perdido (como hibernar a Zarko ;-) porque superpones directivas por columnas y por filas. Antes de arreglar las celdas inferiores, necesitaría saber a qué alineación apuntas hacia arriba.
Respuesta3
Iba a sugerir el matrixcells
paquete, pero luego, al buscar en este sitio la pregunta original que generó ese paquete, descubrí que alguien había solucionado algunos de los problemas con ese paquete, por lo que recomiendo usar el paquete.matrix.skeleton
paquete (deProblema de Matrixcells solo con el eje y) en cambio.
Eliminé un poco de código no utilizado.
\documentclass{article}
%\url{https://tex.stackexchange.com/q/415345/86}
\usepackage{tikz}\usetikzlibrary{matrix}
\usepackage{booktabs}
\usetikzlibrary{matrix.skeleton}
\begin{document}
See the Table \ref{fig:cen2}.
\begin{table}[htb!]
\caption{My very very very very very long useless caption}
\label{fig:cen2}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
nodes in empty cells,
label skeleton,
%
anchor=base,
row sep = -\pgflinewidth,
column sep = -\pgflinewidth,
%
row 1/.style={nodes={font=\bfseries, align = center}, anchor = south},%toprule = thick
row 2/.style={anchor = south},
row 3/.style={anchor = south},
row 4/.style={anchor = south},
row 5/.style={anchor = south},
%
column 1/.style={nodes={ text width=2.5cm,align=left, font = \small}},
column 2/.style={nodes={ text width=4.0cm,align=left, font = \small}},
column 3/.style={nodes={ text width=4.0cm,align=left, font = \small}},
column 4/.style={nodes={ text width=4.0cm,align=left, font = \small}}%rectangle,draw,
] at (0,0)
%
{%
Variables & Hypothesis 1 & Hypothesis 2 & Hypothesis 3 \\
Territorial unit &
Final destination for receiving waste generated in the municipality &
Final destination for receiving waste generated in the municipality &
Final destination to receive the waste generated in the municipality \\
Index of coverage &
Maintenance of the urban coverage index, with focus on short term &
Maintenance of the urban coverage index, focusing on medium term &
Maintenance of the urban coverage index, with a long-term focus \\
Garbage Collection with Recovery of Recyclable garbage &
Increase in the Recovery of Recyclable garbage index in the short term &
Moderate increase in the recovery of recyclable garbage index with focus on medium term &
Expectation of implementation of long-term selective collection \\
Composting of organic waste &
Adhesion and massive investment in compost disposal final solid organic waste &
Adhesion and moderate investment in composting final disposal of organic solid waste &
Investment in composting organic long-term solid waste \\
};
\draw [-, very thick] (m-row-1.north west) -- (m-row-1.north east);%linha 1
\draw [-, thick] (m-row-2.north west) -- (m-row-2.north east);%linha 2
\draw [-, thin] (m-row-3.north west) -- (m-row-3.north east);%linha 3
\draw [-, thin] (m-row-4.north west) -- (m-row-4.north east);%linha 4
\draw [-, thin] (m-row-5.north west) -- (m-row-5.north east);%linha 5
\draw [-, thick] (m-row-5.south west) -- (m-row-5.south east);%linha 6
%
\draw[->, color = green, ultra thick, dashed] (m-2-2.mid) -- ([yshift = -5mm]m-5-2.south);
\draw[->, color = orange, ultra thick, dashed] (m-2-3.mid) -- ([yshift = -5mm]m-5-3.south);
\draw[->, color = red, ultra thick, dashed] (m-2-4.mid) -- ([yshift = -5mm]m-5-4.south);
%
\node [below, yshift = -5mm] at (m-5-2.south) {\textcolor{green} {\bfseries Scenario 1}};
\node [below, yshift = -5mm] at (m-5-3.south) {\textcolor{orange}{\bfseries Scenario 2}};
\node [below, yshift = -5mm] at (m-5-4.south) {\textcolor{red} {\bfseries Scenario 3}};
\end{tikzpicture}
\end{table}
\end{document}