简化 TiKz 链图

简化 TiKz 链图

TiKz 链是一个很棒的工具,我正在阅读带标签边缘的链例子。

这个例子使用矩阵来放置节点,然后使用链将它们连接在一起。当然这是可以的,但我在想如果我们只放置节点然后链会自动连接它。

所以我只写一个简单的例子:

\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%

\usetikzlibrary{arrows,chains,matrix,positioning,scopes}
\makeatletter
\tikzset{join/.code=\tikzset{after node path={%
\ifx\tikzchainprevious\pgfutil@empty\else(\tikzchainprevious)%
edge[every join]#1(\tikzchaincurrent)\fi}}}
\makeatother
\tikzset{>=stealth',every on chain/.append style={join},
         every join/.style={->}}
\tikzstyle{labeled}=[execute at begin node=$\scriptstyle,
   execute at end node=$]

\begin{document}
\begin{tikzpicture}
   \node (A) {A};
   \node [right=of A] (B) {B};
  { [start chain] \chainin (A);
    \chainin (B) [join={node[above,labeled] {\eta_1}}];;
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

现在它运行完美,但我想知道我们是否可以将节点语句与绘制语句结合在一起。可能看起来像下面(当然现在它不起作用)!

\begin{tikzpicture}
  { [start chain] \chainin \node (A) {A};;
    \chainin \node [right=of A] (B) {B}; [join={node[above,labeled] {\eta_1}}];;
  }
\end{tikzpicture}

有可能让它工作吗?

答案1

您可以简单地说on chain将节点连接到链中。而且使用 TikZ v3.00 可以更轻松地向边添加标签。

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,chains,positioning,scopes,quotes}
\begin{document}
\begin{tikzpicture}[>=stealth']
{[start chain]
   \node[on chain] (A) {A};
   \node[on chain,join=by {->,"$\eta_1$"},right=of A] (B) {B};
   \node[on chain,join=by {<-,"$\eta_2$"},right=of B] (C) {C};
   \node[on chain,join=by {bend left,->,"$\int dx$"},right=of C] (D) {D};
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容