如何在 TikZ 中绘制如下的简单图形?似乎开始学习 TikZ 的唯一方法是通过示例,但我发现只有两个与我想要的相当相关的示例对于我在这里试图实现的目标来说太复杂了。我通过获取此图形的一段代码试图实现的不仅是图形本身,还有对如何TikZ 可以绘制这样的图形,所以我将来可以用它来制作类似的图形。
答案1
其实这很简单。有几种方法可以做到这一点。一种方法是使用 放置第一个节点\node (NAME) at (POSITION) {TEXT};
,然后使用 等放置\node (NAME) [below left=Y and X of NODE] {TEXT};
其他节点。可以使用 绘制箭头。在 前\draw [->] (NODE1) -- (NODE2);
添加一个尾随以向箭头添加标签。node [OPTIONS] {TEXT}
;
\documentclass{standalone}% For the example only, any class will do
\usepackage{tikz}
\usetikzlibrary{positioning}% To get more advances positioning options
\usetikzlibrary{arrows}% To get more arrow heads
\begin{document}
\begin{tikzpicture}[>=triangle 45,font=\sffamily]
\node (X) at (0,0) {x};
\node (Y) [below left=2cm and 1cm of X] {y};% 2cm below, 1cm to the left (optional)
\node (Z) [below right=2cm and 1cm of X] {z};
\node (U) [below left=2cm and 1cm of Z] {u};
\draw [semithick,->] (X) -- (Y);
\draw [semithick,->] (X) -- (Z);
\draw [semithick,->] (Y) -- (U) node [midway,below,sloped] {*};
\draw [semithick,->] (Z) -- (U) node [midway,below,sloped] {*};
\end{tikzpicture}
\end{document}
答案2
有几种方法可以制作此图。我喜欢的方法是下一个代码。我避免这样做,
\usetikzlibrary{positioning}
因为我更喜欢使用scale
而不是设置node distance
。命令path
是最重要的。我将其与相对坐标一起使用++(-1,-2)
。
++(-1,-2)
表示 below left=2cm and 1cm of X
等。
然后我使用范围来设置一些样式。每个路径都使用semithick,->
,我更喜欢-- node (U)
默认使用pos=.5
。最好使用此语法,因为您可以在to
命令中使用相同的语法。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[> = triangle 45,
font = \sffamily,
scale= 2]
\path (0, 0) node (X) {x}
++(-1,-2) node (Y) {y}
++(1, -2) node (U) {u}
++(1, 2) node (Z) {z};
\begin{scope}[semithick,
->,
every node/.style = {below,sloped}]
\draw (X) -- (Y);
\draw (X) -- (Z);
\draw (Y) -- node {*} (U) ;
\draw (Z) -- node {*} (U) ;
\end{scope}
\end{tikzpicture}
\end{document}
更新这种方法需要解释。与第一种方法一样,我every node
在范围内使用来放置标签*
,但我> = triangle 45
只在范围内放置,因为箭头只在这一部分使用。然后可以使用edge
而不是,--
但比较如何从 x 获取箭头以及如何通过 u 获取箭头很有趣。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[font = \sffamily,
scale = 2]
\path ( 0, 0) node (X) {x}
++(-1, -2) node (Y) {y}
++( 1, -2) node (U) {u}
++( 1, 2) node (Z) {z};
\begin{scope}[semithick,->,
> = triangle 45,
every node/.style = {below,sloped}]
\draw (X) edge (Y)
edge (Z)
(Y) edge node {*} (U)
(Z) edge node {*} (U) ;
\end{scope}
\end{tikzpicture}
\end{document}