节点矩阵 - 调整线条

节点矩阵 - 调整线条

在阅读了一些节点矩阵的例子后,我写了这个 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}

但矩阵的线条是弯曲的。如何调整水平方向上的线条?

带有弯曲线条的矩阵

答案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}

在此处输入图片描述

但我必须承认,我也很迷茫(就像冬眠的 Zarko 一样;-),因为你叠加了列方向和行方向的指令。在修复下部单元格之前,我需要知道你瞄准的是哪种对齐方式。

答案3

我本来要建议使用该matrixcells软件包,但后来在这个网站上搜索引发该软件包的原始问题时,我发现有人已经修复了该软件包的一些问题,所以我建议使用matrix.skeleton包(来自仅包含 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}

矩阵中的直线

相关内容