使用 Tikz 定位元素(大图)

使用 Tikz 定位元素(大图)

这是我第一次使用 Tikz,并尝试制作这个图表,但是......这有点难。

在此处输入图片描述

1.关于定位:

我正在使用相对定位,我认为这不是一个好主意(看橙色线),但我不知道如何做得更好。例如:

%Group 1
\node[cuadrado] (g1_1) {$y_m$};
\node[circulo] (g1_2) [left of=g1_1] {$y_m$};
\node[circulo] (g1_3) [right of=g1_1] {$\neg y_m$};
\node[cuadrado] (g1_4) [above left of=g1_2] {$y_m$};
...

也许使用工作表内的绝对位置?

在此处输入图片描述

另一方面,边缘元素(文本)在右侧的位置不正确(查看绿色圆圈)。是否可以使它们看起来像镜子(与左侧相比)?

2. 关于节点尺寸

是否可以保持节点的固定尺寸?当我在节点内有大量文本时,我不知道如何解决它。例如,在大图的右侧:

在此处输入图片描述

3. 关于一般提示

你们觉得有没有更简单的方法来画这个图?正如我所说,我对 Tikz 不是很熟悉。我认为最好的选择是将大图分成两部分(左侧和右侧),但我不知道将整个图放在一张纸上是否“容易”(这将是理想的情况)。

问题太多,抱歉。

欢迎提供提示、建议和链接来帮助我!提前致谢。

答案1

恭喜您第一次尝试使用如此复杂的图表的 TikZ!

  1. 除了使用相对位置,您还可以使用 TikZ matrix。这看起来并不容易,但实际上却很容易。矩阵就像一个tabular,您可以使用 引用每个单元格matrixname-rownumber-columnnumber。例如,在下面的代码中,m-3-2是矩阵 的第 3 行和第 2 列的节点m
    至于对称箭头,您可以使用标签节点位置。始终参阅下面的示例。
  2. 要使节点具有相同的尺寸,您可以使用minimum widthtext widthtext height、来设置它们text depth。我使用椭圆形作为带有大文本的圆圈。再次参见下面的示例。
  3. 我认为你会发现范达克教授的文章很有帮助。阅读第 2 部分这里对于 Tikz 矩阵和第 3 节这里对于 TikZ 来说一般如此。

当然,这个例子并不完整,但我认为你会在这里找到一些有用的提示:

\documentclass[border=1cm]{standalone} 
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{arrows.meta, bending}
\tikzset{
    mymatr/.style = {
        matrix of math nodes,
        row sep=30pt,
        column sep=10pt,
        nodes={cuadrado}
        },
    base/.style = {
        draw, 
        very thick,
        text=black,
        text centered,
        text height=13pt,
        text depth=7pt,
        },
    cuadrado/.style = {
        blue, 
        fill=blue!10!white,
        base, 
        minimum width=30pt,
        },
    circulo/.style = {
        cyan, 
        fill=cyan!10!white,
        circle,
        base, 
        text width=20pt,
        inner sep=1pt,
        },      
    oval/.style = {
        red, 
        fill=red!10!white,
        rounded corners=14,
        base, 
        minimum width=30pt,
        inner sep=4pt,
        },      
    }
    
\begin{document} 
\begin{tikzpicture}[>=Stealth]
\matrix[mymatr] (m) {
    && x^1_1 &[-16pt]&[-16pt] \neg x^1_1 &&&[30pt]\\[20pt]
    x_1 && x^k_1 && \neg x^k_1 && \neg x_1 \\ 
    & |[circulo]|x_1 && x_1 && |[circulo]|\neg x_1 \\
    x_1 &&&&&& \neg x_1 \\[-40pt]
    && x^1_m && \neg x^1_m &&&|[oval]|c_1\vee\neg x_n\vee y_1\\[20pt]
    x_n && x^k_m && \neg x^k_m && \neg x_n \\ 
    & |[circulo]|x_n && x_n && |[circulo]|\neg x_n \\
    x_n &&&&&& \neg x_n \\ 
    };
\draw[->] (m-3-2) -- node[right=4pt] {$1$} (m-4-1);
\draw[->] (m-3-2) -- node[below left] {$n-1$} (m-2-1);
\draw[->] (m-3-2) to[bend left] node[above=30pt,left=-8pt] {$1$} (m-1-3);
\draw[->] (m-3-2) -- node[left=4pt] {$1$} (m-2-3);
\draw[->] (m-3-2) -- node[below] {$k+1$} (m-3-4);

\draw[->] (m-3-6) -- node[left=4pt] {$1$} (m-4-7);
\draw[->] (m-3-6) -- node[below right] {$n-1$} (m-2-7);
\draw[->] (m-3-6) to[bend right] node[above=30pt,right=-8pt] {$1$} (m-1-5);
\draw[->] (m-3-6) -- node[right=4pt] {$1$} (m-2-5);
\draw[->] (m-3-6) -- node[below] {$k+1$} (m-3-4);

\draw[->] (m-7-2) -- node[right=4pt] {$1$} (m-8-1);
\draw[->] (m-7-2) -- node[below left] {$n-1$} (m-6-1);
\draw[->] (m-7-2) to[bend left] node[above=30pt,left=-8pt] {$1$} (m-5-3);
\draw[->] (m-7-2) -- node[left=4pt] {$1$} (m-6-3);
\draw[->] (m-7-2) -- node[below] {$k+1$} (m-7-4);


\draw[->] (m-7-6) -- node[left=4pt] {$1$} (m-8-7);
\draw[->] (m-7-6) -- node[below right] {$n-1$} (m-6-7);
\draw[->] (m-7-6) to[bend right] node[above=30pt,right=-8pt] {$1$} (m-5-5);
\draw[->] (m-7-6) -- node[right=4pt] {$1$} (m-6-5);
\draw[->] (m-7-6) -- node[below] {$k+1$} (m-7-4);

\draw[->] (m-5-8) to[in=50, out=90] node[right=6pt] {$2M-2$} (m-1-3.70);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容