答案1
构建此类图表的一个好方法是:
\documentclass{standalone}\usepackage{mathtools,tikz}
\begin{document}\begin{tikzpicture}[scale=0.8,auto]
\tikzset{EdgeStyle/.style={postaction=decorate},MyLabel/.style={auto=right,fill=none,outer sep=0.1ex}}
\newcommand\widening{1}
\node (n11) at (2+\widening+\widening,0) {$f''$};
\node (n21) at (1+\widening,2) {$f'$};
\node (n22) at (3+\widening+\widening+\widening,2) {$h'$};
\node (n31) at (0,4) {$f$};
\node (n32) at (2+\widening+\widening,4) {$g$};
\node (n33) at (4+\widening+\widening+\widening+\widening,4) {$h$};
\draw[line width=1pt,->,bend left=10] (n31) edge node[swap] {$*$} (n21);%topleft
\draw[line width=1pt,->,bend left=10] (n32) edge node[swap] {$*$} (n21);
\draw[line width=1pt,->,bend left=10] (n32) edge node {$*$} (n22);
\draw[line width=1pt,->,bend left=10] (n33) edge node {$*$} (n22);
\draw[line width=1pt,->,bend right=10] (n21) edge node[swap] {$*$} (n11);
\draw[line width=1pt,->,bend left=10] (n22) edge node {$*$} (n11);%bottomright
\end{tikzpicture}\end{document}
(1)缩放被抽象出来。这样你就可以用一个参数来设置函数相对于箭头的相对大小。
(2)节点位置和连接是分开的。因此,您可以决定节点之间的距离,而无需通过单个参数定义重新编码它们的关系。例如,这里\widening
= {1}
。
要获得直箭头:设置bend left
和bend right
为=0
代替=10
或完全切断该参数。
答案2
您可以在xy
和之间进行选择tikz-cd
。我推荐后者。
\documentclass{article}
\usepackage[all,cmtip]{xy}
\usepackage{tikz-cd}
\begin{document}
Your diagram with \texttt{xy}:
\[
\[email protected]{
f \ar[dr]_{*} && g \ar[dl]_{*} \ar[dr]^{*} && h \ar[dl]^{*} \\
& f' \ar[dr]_{*} && h' \ar[dl]^{*} \\
&& f''
}
\]
Your diagram with \texttt{tikz-cd}:
\[
\begin{tikzcd}[column sep=1em]
f \arrow[dr,"*"'] && g \arrow[dl,"*"'] \arrow[dr,"*"] && h \arrow[dl,"*"] \\
& f' \arrow[dr,"*"'] && h' \arrow[dl,"*"] \\
&& f''
\end{tikzcd}
\]
\end{document}
箭头标签位于箭头左侧,除非标签(用双引号括起来)后面带有'
。箭头左侧和右侧的确定方式与我们命名河岸的方式相同。
请注意这f^{'}
是错误的语法,应该是f'
。
答案3
另一种绘制图形的方法。使用以下命令进行编译lualatex
:
\RequirePackage{luatex85}
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,quotes}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}[>=stealth]
\graph [layered layout, nodes={math nodes, anchor=base},
grow=-90, level distance=1.5cm, sibling distance=2cm]
{
{f, g} ->["*"'] f' ->["*"'] f'';
{g, h} ->["*"] h' ->["*"] f'';
{ [same layer] f, g, h };
{ [same layer] f', h' };
};
\end{tikzpicture}
\end{document}