Прочитав несколько примеров матрицы узлов, я написал следующее МВЭ:
\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}
Но матрица имеет кривые линии. Как выровнять линии по горизонтали?
решение1
Я бы накрыл на стол по-другому...
- использовать стандартную
tabularx
табличную среду - для вертикальных пунктирных линий используйте
tikzmark
библиотеку - выровнять содержимое ячеек по верху
- используйте
raged2e
пакет для более точного выравнивания текста в ячейках - использовать
booktabs
для горизонтальных линеек, из которых я бы использовал только три - использовать
makecell
для заголовков столбцов и «меток» внизу таблицы
учитывая вышеизложенное код таблицы стал намного короче, проще и понятнее (на мой взгляд). Конечно, для получения финальной таблицы нужно скомпилировать код как минимум дважды.
\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}
решение2
Вы можете исправить это, добавив \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}
Но должен признать, что я тоже заблудился (как Зарко в спячке;-), потому что вы накладываете директивы по столбцам и по строкам. Прежде чем фиксить нижние ячейки, мне нужно знать, к какому выравниванию вы стремитесь.
решение3
Я собирался предложить matrixcells
пакет, но затем, ища на этом сайте исходный вопрос, который побудил меня предложить этот пакет, я обнаружил, что кто-то исправил некоторые проблемы с этим пакетом, поэтому я рекомендую использоватьmatrix.skeleton
пакет (изПроблема Matrixcells только с осью Y) вместо.
Я удалил часть неиспользуемого кода.
\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}