如何在 Latex 中得到下面的图表?

如何在 Latex 中得到下面的图表?

在此处输入图片描述

我想在 Latex 中获取上面的图表,但我不知道如何编辑它。任何帮助都将不胜感激。我正在尝试以以下方式构建此图表,但我不知道如何让它们成为一张图表。

\begin{align}
\xymatrix{
  f  \ar[dr]_{*}
                &  &    g \ar[dl]^{*}    \\
                & f^{'}        \\
     g  \ar[dr]_{*}
                &  &    h \ar[dl]^{*}    \\
                & h^{'}              }
\end{align}

答案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 leftbend 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}

在此处输入图片描述

相关内容