图表组合功能

图表组合功能

我正在尝试制作一个典型的组合功能图,我看过一些帖子,但我还不能像我希望的那样制作它。在这张图片中,我展示了我尝试制作的 在此处输入图片描述

但我得到的最多的是

在此处输入图片描述

如您所见,我使用空节点来绘制折线,但这并不值得。我在这里留下我的代码,以便您帮助我进行编辑。我必须承认我是 Latex 的基本用户,也是 Tikz 的 100% 新手,因此欢迎您使用任何指南。

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[node distance=2cm, auto]
    \node(1) {$C$};
    \node(2) [right of=1] {$C_{0}$};
    \node(3) [right of=2] {$P_{0}$};
    \node(4) [right of=3] {$P$};
    \node(5) [right of=4] {$f^{*}(P)$};
    \node(11) [below of=1] {};
    \node(15) [below of=5] {};
    \draw[->](1) to node {$\tau_{c}^{-1}$}(2);
    \draw[->](2) to node {$l^{-1}$}(3);
    \draw[->](3) to node {$\tau_{-1}$}(4);
    \draw[->](4) to node {$f^{*}$}(5);
    \draw[-](1) to node {}(11);
    \draw[->](15) to node {}(5);
    \draw[-](11) to node {$f = \tau_{c}^{-1} \circ l^{-1} \circ \tau_{-1} \circ f^{*}$}(15);

\end{tikzpicture}

\end{document}

谢谢

答案1

你几乎已经成功了。

第一个版本垂直空间太大: 图片

第二个减少了垂直空间: V2

您可以通过注意代码来调整一切。重要的部分是--++(0,-1)在这里绘制一条长度为 1cm 的垂直线。

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[node distance=2cm, auto]
    \node(1) {$C$};
    \node(2) [right of=1] {$C_{0}$};
    \node(3) [right of=2] {$P_{0}$};
    \node(4) [right of=3] {$P$};
    \node(5) [right of=4] {$f^{*}(P)$};
    \node(11) [below of=1] {};
    \node(15) [below of=5] {};
    \draw[->](1) to node {$\tau_{c}^{-1}$}(2);
    \draw[->](2) to node {$l^{-1}$}(3);
    \draw[->](3) to node {$\tau_{-1}$}(4);
    \draw[->](4) to node {$f^{*}$}(5);

    % \draw[->] (1) --++ (0,-2) -| node[pos=0.25] {$f = \tau_{c}^{-1} \circ l^{-1} \circ \tau_{-1} \circ f^{*}$} (5); %(old version)

    \draw[->] (1) --++ (0,-1) -| node[pos=0.25,below] {$f = \tau_{c}^{-1} \circ l^{-1} \circ \tau_{-1} \circ f^{*}$} (5);

\end{tikzpicture}

\end{document}

答案2

另外的可能性是使用tikzarrows.meta(用于箭头),chains(用于制作节点链),positioning(用于节点之间的距离)和quotes)用于边缘标签):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, 
                chains,
                positioning,
                quotes}

\begin{document}
    \begin{tikzpicture}[auto,
node distance = 8mm and 12mm, 
  start chain = A going right,
every edge/.style = {draw, -Straight Barb}
                        ]
\foreach \i in {C, C_0, P_0, P, f^{*}(P)}
    \node[on chain=A] {$\i$};
\coordinate[below=of A-5]  (A-6);
\draw   (A-1) edge["$\tau_{c}^{-1}$"]   (A-2) 
        (A-2) edge["$l^{-1}$"]          (A-3) 
        (A-3) edge["$\tau_{-1}$"]       (A-4) 
        (A-4) edge["$f^{*}$"]           (A-5)
        (A-1) |- (A-6)  node[pos=0.75, below] 
                        {$f = \tau_{c}^{-1} \circ l^{-1} \circ \tau_{-1} \circ f^{*}$} 
        (A-6) edge (A-5);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

在正常的 displaymath 环境下,代码非常短,使用\xrightarrowpstricks(更准确地说是使用pst-node):

\documentclass{article}
\usepackage{amsmath}
\usepackage{pst-node} 

\begin{document}

  \[ \rnode{C}{C} \xrightarrow[\rule{3em}{0pt}]{\tau_c^{-1}} C_0 \xrightarrow[\rule{3em}{0pt}]{l^{-1}}P_0 \xrightarrow[\rule{3em}{0pt}]{\tau_{-1}}P 0\xrightarrow[\rule{3em}{0pt}]{f*}\rnode{F}{f^*(P)}
  \psset{linewidth=0.5pt, angle = -90, arm=0.8cm, arrowinset=0.15, nodesepA=3pt, linejoin=1}
  \ncbar{->}{C}{F} \nbput{f^*\circ \tau_{-1}\circ l^{-1}\circ \tau_c^{-1}}
  \]%

\end{document} 

在此处输入图片描述

相关内容