Knotenmatrix - Anpassen der Linien

Knotenmatrix - Anpassen der Linien

Nachdem ich einige Beispiele für Knotenmatrizen gelesen hatte, schrieb ich dieses 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}

Aber die Linien in der Matrix sind krumm. Wie kann ich die Linien horizontal anpassen?

Matrix mit krummen Linien

Antwort1

ich würde den Tisch anders decken ...

  • tabularxStandardtabellenumgebung verwenden
  • für vertikale gestrichelte Linien verwenden Sie tikzmarkdie Bibliothek
  • Zelleninhalt oben ausrichten
  • Verwenden Sie raged2edas Paket, um Text in Zellen besser auszurichten
  • für horizontale Regeln verwenden booktabs, von denen ich nur drei verwenden würde
  • Verwendung makecellfür Spaltenüberschriften und "Beschriftungen" am unteren Ende der Tabelle

in Anbetracht des Obigen wird der Tabellencode (meiner Meinung nach) viel kürzer, einfacher und klarer. Um die endgültige Tabelle zu erhalten, müssen Sie den Code natürlich mindestens zweimal kompilieren.

Bildbeschreibung hier eingeben

\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}

Antwort2

Sie können das Problem beheben, indem Sie hinzufügen \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}

Bildbeschreibung hier eingeben

Aber ich muss zugeben, dass ich auch verloren bin (wie Zarko im Winterschlaf;-), weil Sie spaltenweise und zeilenweise Anweisungen überlagern. Bevor ich die unteren Zellen behebe, müsste ich wissen, welche Ausrichtung Sie nach oben zielen.

Antwort3

Ich wollte das matrixcellsPaket vorschlagen, aber als ich dann auf dieser Site nach der ursprünglichen Frage suchte, die dieses Paket ausgelöst hatte, fand ich heraus, dass jemand einige der Probleme mit diesem Paket behoben hatte. Daher empfehle ich die Verwendung desmatrix.skeletonPaket (vonMatrixzellenproblem nur mit der Y-Achse) stattdessen.

Ich habe ein bisschen ungenutzten Code entfernt.

\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}

Geraden in einer Matrix

verwandte Informationen