我正在尝试制作一个典型的组合功能图,我看过一些帖子,但我还不能像我希望的那样制作它。在这张图片中,我展示了我尝试制作的
但我得到的最多的是
如您所见,我使用空节点来绘制折线,但这并不值得。我在这里留下我的代码,以便您帮助我进行编辑。我必须承认我是 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
你几乎已经成功了。
您可以通过注意代码来调整一切。重要的部分是--++(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
另外的可能性是使用tikz
库arrows.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 环境下,代码非常短,使用\xrightarrow
和 pstricks
(更准确地说是使用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}