使用 `

使用 `

考虑以下包含简单 TikZ 图形的 LaTeX 手稿(该图形的代码基本上是从 3.0.1a 版 TikZ 和 PGF 手册第 260 页复制而来的)。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{quotes}
\begin{document}
    \begin{tikzpicture}
        \graph{a ->[red, "foo"] b --[thick, "bar"] {c, d};};
    \end{tikzpicture}
\end{document}

最终渲染的图片为(不按比例)

                                        TikZ 图

参照此示例,手册指出标签“bar”应用于离开节点的两条边b。 如果我们希望为这两条边指定不同的标签,我们应该在相应的节点选项列表前面加上大于号,如下所示(再次,基本上是从第 260 页复制而来):

\documentclass[convert]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{quotes}
\begin{document}
    \begin{tikzpicture}
        \graph{a -> b -- {c[> "foo"], d[> "bar"']};};
    \end{tikzpicture}
\end{document}

最终渲染的图片为(不按比例)

                                        TikZ 图在不同的传入边上具有不同的标签。

该手册继续说道(第 260 页):

对称地,在选项前面加上<会导致选项和标签应用于节点的“传出”边缘

为了说明这一点,给出了下面的代码(第 260 页),我添加了必要的内容以使其成为完整且可编译的 LaTeX 程序。

\documentclass[convert]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{quotes}
\begin{document}
    \begin{tikzpicture}
        \graph{a[< red] -> b -- {c[> blue], d[> "bar"']};};
    \end{tikzpicture}
\end{document}

最终渲染的图片为(不按比例)

                                        在传出边上带有标签的 TikZ 图。

现在让我困惑的是,在前面的例子中,不同的标签被附加到不同的传入边,>符号可以使用。相反,在最后一个示例中,无需使用符号<,只需将red标签放在边缘即可实现相同效果:

\graph{a ->[red] b -- {c[> blue], d[> "bar"']};};

事实上,我无法想象任何不出现这种情况的情况,也就是说,我无法想象这种<符号必要的并且不能通过将选项直接放在边缘来重写。

有人能给我举一个例子吗?说明一下使用符号的<必要性,或者至少比将选项直接放在边缘上更有利?

答案1

不存在不对称性;这些案例完全对称。所以我不确定这里的难题是什么。或者说,我不确定为什么一个案例应该令人费解,而另一个案例却不令人费解。要么两者都有充分的动机,要么两者都没有。

比较你的例子揭示的问题,

\begin{tikzpicture}
  \graph {a ->[red, "foo"] b --[thick, "bar"] {c, d};};
\end{tikzpicture}

根据相应案例的揭示,

\begin{tikzpicture}
  \graph { { {a, b } -- [thick, "bar"] c} -> [red, "foo"] d};
\end{tikzpicture}

对称问题

正如你所说,在第一种情况下,这个问题可以通过以下方法解决:

\begin{tikzpicture}
  \graph {a ->[red, "foo"] b -- {c[> "foo"], d[> "bar"']};};
\end{tikzpicture}

并且,在第二种情况下,以完全对称的方式,

\begin{tikzpicture}
  \graph { { {a[< "foo"], b[< "bar"'] } -- c} -> [red, "foo"] d};
\end{tikzpicture}

对称解

此语法不是必要的不管是哪种情况。但各种便利,比如样式和rectangle构造路径时的操作,都不是。

这样的捷径使得编写一致、灵活的代码变得容易得多,就像语义标记通常所做的那样。例如,

\begin{tikzpicture}
  \graph { g -- a[< red, > {densely dashed, bend left}] -> {b, c, d} ; f -- a -- h -- a};
\end{tikzpicture}

<可以不带and 来编写>,但会变得更加混乱,更容易产生不一致的结果,并且更难以维护、阅读和调整。

标记代码输出

但无论问题还是解决方案,这里绝对不存在不对称。

完整代码:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs,quotes}
\begin{document}
\begin{tikzpicture}
  \graph {a ->[red, "foo"] b --[thick, "bar"] {c, d};};
\end{tikzpicture}
\begin{tikzpicture}
  \graph { { {a, b } -- [thick, "bar"] c} -> [red, "foo"] d};
\end{tikzpicture}
\begin{tikzpicture}
  \graph {a ->[red, "foo"] b -- {c[> "foo"], d[> "bar"']};};
\end{tikzpicture}
\begin{tikzpicture}
  \graph { { {a[< "foo"], b[< "bar"'] } -- c} -> [red, "foo"] d};
\end{tikzpicture}
\begin{tikzpicture}
  \graph { g -- a[< red, > {densely dashed, bend left}] -> {b, c, d} ; f -- a -- h -- a};
\end{tikzpicture}
\end{document}

相关内容