借助 PGF/TikZ 在 LaTeX 中绘制大图表

借助 PGF/TikZ 在 LaTeX 中绘制大图表

我设法在 Inkscape 中制作了这个大图表,并使用插件在 LaTeX 中添加了代码textext。请参阅此问题了解更多信息。

关于对偶线性空间(代数和拓扑)的大图,Inkscape 版本

我希望知道如何在 PGF/TikZ 的帮助下绘制关于对偶线性空间的大图。

更新。

就像我说的,我可以在 Inkscape 中制作这个图。但是当我发布 StackExchange 时,你可以看到,她的分辨率很低。这个图中的 PDF 文档具有令人满意的分辨率。但在 StackExchange 的网站上,分辨率并不好。

我相信使用 Tikz 包可以解决这个问题。所以我在这里发布了这个问题。

在下面的评论中: 很快我的问题是:

如果我使用 Inkscape,我可以控制每个节点中圆弧的起点和终点的位置。但分辨率会降低。

如果像往常一样使用 TikZ 命令,我将失去对每个节点的端点和初始弧的位置的控制。对于 TikZ 包,每个弧的端点和初始位置在 TikZ 包中预定义。

问题:如何解决这个问题呢?

答案1

以下是一些帮助您开始使用该positioning库的内容tikz

在此处输入图片描述

解释

  • node我首先在图片的中心设置一个

    \node(atcenter) at (0,0) {Center};

    其余所有内容均相对于此位置指定node

  • 一旦设置了节点,您就可以使用循环连接它们\foreach;这将允许以后更轻松地进行更改 - 也许您希望连接全部为blue,或者thick,或者其他。
  • 唯一“棘手”的节点是有多行的节点;你会注意到我tabular为此使用了,尽管这可能不是绝对必要的
  • atsouthwest和之间的联系west并不完全像你图片中的那样,但我必须留下一些东西让你研究:)

完整代码

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
  % set up the nodes
  \node(atcenter) at (0,0) {Center}; 
  \node(atnorth) [above=of atcenter]{North};
  \node(ateast) [right=of atcenter]{East};
  \node(atnortheast) [above=of ateast]{North East};
  \node(atsoutheast) [below=of ateast]{South East};
  \node(atwest) [left=of atcenter]{West};
  \node(atsouth) [below=2cm of atcenter]{South};
  \node(atsouthwest) [left=4cm of atsoutheast,draw=black,rounded corners=2ex]{\begin{tabular}{@{}c}South West\\Second row\end{tabular}};
  % connect the nodes, which is a perfect job 
  % for a loop
  \foreach \first/\second in {atcenter/atnorth,
                              atcenter/ateast,
                              ateast/atnortheast,
                              atsoutheast/ateast,
                              atcenter/atsoutheast,
                              atnorth/atnortheast,
                              atwest/atnorth,
                              atcenter/atsouth,
                              atsouthwest/atsoutheast,
                              atwest/atcenter}{%
  \draw[->] (\first) -- (\second);
  \draw (atsouthwest) to[out=90,in=180] (atwest);
  }
\end{tikzpicture}
\end{document}

答案2

我认为,正如 OP 所提到的,问题的一部分在于箭头的起点和终点所需的定位,虽然默认情况下非常灵活,但(据我所知)在这种情况下需要一些额外的工作才能使事情顺利进行。

对于节点定位,我会选择矩阵。我以某种风格隐藏了线条图(有点粗糙)。有点像这样:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes.misc}
\begin{document}

\tikzset{
    up/.style args={from (#1) to (#2)}{
        insert path={
            ([xshift=2ex]#1.north west) -- ([xshift=2ex]#2.south west)
        }
    },
    down/.style args={from (#1) to (#2)}{
        insert path={
            ([xshift=2ex]#1.south west) -- ([xshift=2ex]#2.north west)
        }
    },
    along right/.style args={from (#1) to (#2)}{
        insert path={
            (#1.east) -- (#2.west)
        }
    },
    down right/.style args={from (#1) to (#2)}{
        insert path={
            ([xshift=3ex]#1.south west) -- (#2.north west)
        }
    },
    up right/.style args={from (#1) to (#2)}{
        insert path={
            ([xshift=3ex]#1.north west) -- (#2.south west)
        }
    }
}

\begin{tikzpicture}[>=stealth]
\matrix 
[
    name=matrix,
    matrix of math nodes,
    row sep=0.5in, 
    column sep=0.5in,
    ampersand replacement=\&,
    nodes={anchor=west},
    row 3 column 1/.style={
        every node/.append style={%
            shape=rounded rectangle,
            draw,
            xshift=-0.5in,
            anchor=center,
            inner xsep=-1ex,
            name=f,
        }
    }]{
           \& |(a)| AAAA \& |(b)| BBBB \\
|(c)| CCCC \& |(d)| DDDD \& |(e)| EEEE \\ 
\node{
    \begin{array}{l}
        F_{1,1}F_{1,2}F_{1,3} \\
        \hskip2ex F_{2,1}F_{2,2}F_{2,3} \\
        \hskip4ex F_{3,1}F_{3,2}F_{3,3} \\
    \end{array} 
};     
           \&            \& |(g)| GGGG \\
           \& |(h)| HHHH 
\\};

\draw [->, up=from (d) to (a)];
\draw [->, up=from (e) to (b)];
\draw [->, up=from (g) to (e)];
\draw [->, down=from (d) to (h)];
\draw [->, along right=from (a) to (b)];
\draw [->, along right=from (c) to (d)];
\draw [->, along right=from (d) to (e)];
\draw [->, along right=from (f) to (g)];
\draw [->, down right=from (d) to (g)];
\draw [->, up right=from (c) to (a)];
\draw  (f) |- (c);

\end{tikzpicture}

\end{document}

双线性空间定位示例

相关内容