Tikz 帮助,线重叠

Tikz 帮助,线重叠

我从另一边得到了以下代码。如何才能不让线和点重叠?

\documentclass[ 
  fontsize=12pt, 
  twoside, 
  open=right, 
  toc=bibnumbered, 
  toc=listof, 
  captions=abovetable,% <- ergänzt
  ngerman 
]{scrreprt} 
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{babel} 
\usepackage{lmodern} 

\usepackage{tikz} 
\usetikzlibrary{matrix} 
\usepackage{booktabs} 
\usepackage{hyperref} 

\newcommand\zeilenabstand{10pt} 

\tikzset{vp/.style={circle,fill,inner sep=2pt}} 
\newcommand\verbindungslinie[3]{ 
  \node[#1,vp]at([yshift=-.15*\zeilenabstand]#2.south){};
  \foreach [remember=\p as \lastp (initially #2)] \p in {#3} 
    \draw[ultra thick,#1,draw opacity=.4]([yshift=-.15*\zeilenabstand]\lastp.south)--([yshift=-.15*\zeilenabstand]\p.south)node[vp]{}; 
} 

\begin{document} 
\begin{center} 
  \begin{minipage}{\linewidth} 
    \captionof{table}{Morphologischer Kasten Getriebevarianten}\label{morphologischer_kasten} 
    
    \begin{tikzpicture} 
      \matrix[ 
          matrix of nodes ,
          inner sep=0pt,
          row sep=\zeilenabstand,
          column sep=15pt,
          nodes={font=\strut},
          nodes in empty cells,
          column 2/.style={text width=5cm}, 
          column 3/.style={text width=3.5cm,align=center}, 
          column 4/.style={text width=3.5cm,align=center}, 
          column 5/.style={text width=3.5cm,align=center}
       ](m) 
       { 
           1& Übertragung 
            & Schneckenradsatz 
            & Innenradpaarung
            & Strinradpaarung\\ 
           2& Schmierung 
            & Tauchschmierung 
            & Trockenschmierung 
            & Sprühschmierung\\ 
           3& Gesamtgröße 
            & Klein 
            & Mittel 
            & Groß\\ 
           4& Kleiner Durchlass
            & Ja 
            & Nein 
            &\\ 
            &&&&\\
            &
            &|[red]|{\textbf{LV1}}
            &|[blue]|{\textbf{LV2}}
            &|[green]|{\textbf{LV3}}\\ 
        }; 
% Kopfzeile 
        \node(ul)[anchor=south west] 
          at ([yshift={\zeilenabstand+\aboverulesep+\belowrulesep}]m.north west) 
          {Teilfunktion}; 
        \node(or)[anchor=south east] at (ul.north-|m-1-2.east){Lösungsvarianten}; 
        \foreach[count=\i from 3] \l in {1,2,3} 
          \node[anchor=base] at (or.base-|m-1-\i){\l}; 
% Tabellenlinien 
        \draw[line width=\lightrulewidth](or.north-|ul.west)--(or.east|-ul.south) 
          ([yshift=-\aboverulesep]ul.south-|m.west) 
            --([yshift=-\aboverulesep]ul.south-|m.east); 
        \draw[line width=\heavyrulewidth]([yshift=\belowrulesep]or.north-|m.west) 
            --([yshift=\belowrulesep]or.north-|m.east) 
          ([yshift={-\aboverulesep}]m.south west) 
            --([yshift={-\aboverulesep}]m.south east); 
% Verbindungslinien 
        \verbindungslinie{red}{m-1-3}{m-2-3,m-3-3,m-4-3,m-5-3} 
        \verbindungslinie{blue}{m-1-4}{m-2-4,m-3-4,m-4-3,m-4-4,m-5-4} 
        \verbindungslinie{green}{m-1-5}{m-2-4,m-3-4,m-4-4,m-5-5} 
    \end{tikzpicture} 
  \end{minipage} 
\end{center} 
\end{document}

在此处输入图片描述

答案1

我不清楚你到底想实现什么。但也许你想自动移动节点,以便同一单元格中的两个节点不会相互重叠。你可以用以下方法实现这一点:

\documentclass[border=10pt]{standalone}
\usepackage{booktabs}
\usepackage{tikz} 
\usetikzlibrary{matrix, backgrounds} 

\newcommand\zeilenabstand{10pt} 

\def\GetNodeColumn(#1-#2-#3){#3}

\tikzset{vp/.style={circle, fill, inner sep=2pt}} 
\newcommand\verbindungslinie[4][10pt]{ 
  \node[#2, vp] at ([yshift=-.15*\zeilenabstand]#3.south) {};
  \edef\co{\noexpand\GetNodeColumn(#3)}
  \foreach[remember=\p as \lastp (initially #3)] \p in {#4} 
    \edef\cl{\noexpand\GetNodeColumn(\lastp)}
    \edef\cp{\noexpand\GetNodeColumn(\p)}
    \draw[ultra thick, #2, draw opacity=.4]
        ([yshift=-.15*\zeilenabstand,xshift={#1*(\co-\cl)}]\lastp.south) -- 
        ([yshift=-.15*\zeilenabstand,xshift={#1*(\co-\cp)}]\p.south) 
        node[vp] {}; 
} 

\begin{document} 
    \begin{tikzpicture} 
      \matrix[ 
          matrix of nodes,
          inner sep=0pt,
          row sep=\zeilenabstand,
          column sep=15pt,
          nodes={font=\strut},
          nodes in empty cells,
          column 2/.style={text width=5cm}, 
          column 3/.style={text width=3.5cm,align=center}, 
          column 4/.style={text width=3.5cm,align=center}, 
          column 5/.style={text width=3.5cm,align=center}
       ](m) 
       { 
          1 & Übertragung 
            & Schneckenradsatz 
            & Innenradpaarung
            & Strinradpaarung\\ 
          2 & Schmierung 
            & Tauchschmierung 
            & Trockenschmierung 
            & Sprühschmierung\\ 
          3 & Gesamtgröße 
            & Klein 
            & Mittel 
            & Groß\\ 
          4 & Kleiner Durchlass
            & Ja 
            & Nein 
            &\\ 
            &&&&\\
            &
            &|[red]|{\textbf{LV1}}
            &|[blue]|{\textbf{LV2}}
            &|[green]|{\textbf{LV3}}\\ 
        }; 
% Kopfzeile 
        \node(ul)[anchor=south west] 
          at ([yshift={\zeilenabstand+\aboverulesep+\belowrulesep}]m.north west) 
          {Teilfunktion}; 
        \node(or)[anchor=south east] at (ul.north-|m-1-2.east){Lösungsvarianten}; 
        \foreach[count=\i from 3] \l in {1,2,3} 
          \node[anchor=base] at (or.base-|m-1-\i){\l}; 
% Tabellenlinien 
        \draw[line width=\lightrulewidth](or.north-|ul.west)--(or.east|-ul.south) 
          ([yshift=-\aboverulesep]ul.south-|m.west) 
            --([yshift=-\aboverulesep]ul.south-|m.east); 
        \draw[line width=\heavyrulewidth]([yshift=\belowrulesep]or.north-|m.west) 
            --([yshift=\belowrulesep]or.north-|m.east) 
          ([yshift={-\aboverulesep}]m.south west) 
            --([yshift={-\aboverulesep}]m.south east); 
% Verbindungslinien 
        \begin{scope}[on background layer]
          \verbindungslinie{red}{m-1-3}{m-2-4,m-3-3,m-4-3,m-5-3} 
          \verbindungslinie{blue}{m-1-4}{m-2-4,m-3-4,m-4-3,m-5-3} 
          \verbindungslinie{green}{m-1-5}{m-2-4,m-3-4,m-4-4,m-5-3} 
        \end{scope}
    \end{tikzpicture} 
\end{document}

在此处输入图片描述

我改变了您原始图中某些点的位置,以显示点将根据它们是向右移动还是向左移动而向两个方向移动,并且如果距离较大,它们将移动得更多。

行中的第一个点不会发生偏移。您可以通过设置可选参数(例如)来更改偏移的距离\verbindungslinie[10pt]{red}{m-1-3}{m-2-4,m-3-3,m-4-3,m-5-3}

最后,我使用该库将所有线条放在文本后面backgrounds

相关内容