
我正在嘗試在 TikZ 中建立如下圖所示的圖表(我包含了一些不同的範例)。目前,我沿著 x 軸手動移動節點以使其稍微合適,但這顯然效果不佳。除了嘗試不同的值直到它起作用之外,節點甚至沒有正確對齊。最後一個例子很好地說明了這一點(a_0
和a_n
應該分別在上面b_0
和b_n
)。
這是我目前的方法,MWE 對於提供的範例:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\node (a) at (0, 0) {$(p, \bar{u}) = c_1$};
\node[rotate=90] (leq1) at (0.6, -0.35) {$\leq$};
\node (b) at (1.2, -0.7) {$(p, \bar{u}') = c_1' \longrightarrow c_2' = (q, \bar{v}')$};
\node[rotate=90] (leq2) at (1.7, -1.05) {$\leq$};
\node (c) at (2.4, -1.4) {$c_2 = (q, \bar{v})$};
\end{tikzpicture}
\begin{tikzpicture}
\node (a) at (0, 0) {$(p, \bar{v})$};
\node[rotate=90] (leq1) at (0, -0.35) {$\leq$};
\node (b) at (0.9, -0.7) {$(p, \bar{v}') \longrightarrow (q, \bar{w}')$};
\node[rotate=90] (leq2) at (1.7, -1.05) {$\leq$};
\node (c) at (1.7, -1.4) {$(q, \bar{w})$};
\end{tikzpicture}
\begin{tikzpicture}
\node (a) at (0, 0) {$(p, u)$};
\node[rotate=90] (leq1) at (0, -0.35) {$\leq$};
\node (b) at (-0.3, -0.7) {$A \ni (p, u')$};
\node[rotate=90] (leq2) at (0, -1.05) {$\leq$};
\node (c) at (0, -1.4) {$(p, u'')$};
\node[rotate=90] (leq2) at (0, -1.75) {$\leq$};
\node (d) at (0.75, -2.1) {$B \ni (p, u''') \longrightarrow (q, v) \in C$};
\end{tikzpicture}
\begin{tikzpicture}
\node (a) at (0, 0) {$\circ \longrightarrow^* \circ$};
\node[rotate=90] (leq1) at (-0.5, -0.35) {$\leq$};
\node[rotate=90] (leq2) at (0.5, -0.35) {$\leq$};
\node (b) at (0.5, -0.7) {$\circ \longrightarrow \circ \longrightarrow^* \circ$};
\node[rotate=90] (leq3) at (1.5, -1.05) {$\leq$};
\node (c) at (1.9, -1.4) {$\circ \in A$};
\end{tikzpicture}
\begin{tikzpicture}
\node (a) at (0, 0) {$a = a_0 \longrightarrow^* a_1 \longrightarrow^* a_2 \longrightarrow^* \ldots \longrightarrow^* a_n$};
\node[rotate=90] (leq1) at (-2.1, -0.35) {$\leq$};
\node[rotate=90] (leq2) at (2.6, -0.35) {$\leq$};
\node (b) at (0, -0.7) {$b = b_0 \longrightarrow b_1 \longrightarrow b_2 \longrightarrow \ldots \longrightarrow b_n$};
\end{tikzpicture}
\end{document}
如何正確建立這些類型的圖表?
答案1
為什麼需要畫這個方程式?看來把它們寫成數組比較簡單。例如,對於您最後兩個有問題的例子:
\documentclass{article}
\usepackage{adjustbox}
\begin{document}
\[\setlength\arraycolsep{1pt}
\begin{array}{ccc cccc c}
\circ & \longrightarrow^* & \circ & & & & \\
\adjustbox{rotate=90}{$\leq$}
& & \adjustbox{rotate=90}{$\leq$} & & & & \\
\circ & \longrightarrow^* & \circ
& \longrightarrow^* & \circ & & \\
& & & & \adjustbox{rotate=90}{$\leq$} & & & & \\
& & & & \circ & \in & A \\
\end{array}
\]
\bigskip
\[\setlength\arraycolsep{1pt}
\begin{array}{rclcl clcl cl}
a & = & a_0
& \longrightarrow^* & a_1 & \longrightarrow^* & a_2
& \longrightarrow^* & \ldots & \longrightarrow^* & a_n \\
&& \adjustbox{rotate=90}{$\leq$} && &&&& && \adjustbox{rotate=90}{$\leq$} \\
b & = & b_0
& \longrightarrow & b_1 & \longrightarrow & b_2
& \longrightarrow & \ldots & \longrightarrow & b_n
\end{array}
\]
\end{document}
如果您出於某種原因希望在tikz
圖片中包含這些數組,那麼您只需將它們插入節點的內容中:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{adjustbox}
\begin{document}
\begin{tikzpicture}[node distance=2mm and 0mm,
every node/.style = {fill=cyan!15}
]
\setlength\arraycolsep{1pt}
\node (n1) {$\begin{array}{ccc ccc c}
\circ & \longrightarrow^* & \circ & & & & \\
\adjustbox{rotate=90}{$\leq$}
& & \adjustbox{rotate=90}{$\leq$} & & & & \\
\circ & \longrightarrow^* & \circ
& \longrightarrow^* & \circ & & \\
& & & & \adjustbox{rotate=90}{$\leq$} & & \\
& & & & \circ & \in & A
\end{array}$};
\node (n2) [below right=of n1.south west]
{$\begin{array}{rclcl clcl cl}
a & = & a_0
& \longrightarrow^* & a_1 & \longrightarrow^* & a_2
& \longrightarrow^* & \ldots & \longrightarrow^* & a_n \\
&& \adjustbox{rotate=90}{$\leq$} && &&&& && \adjustbox{rotate=90}{$\leq$} \\
b & = & b_0
& \longrightarrow & b_1 & \longrightarrow & b_2
& \longrightarrow & \ldots & \longrightarrow & b_n
\end{array}$};
\end{tikzpicture}
\end{document}
(為了更好地查看節點,fill=cyan!15
將其添加到節點的樣式中)
答案2
使用 可以非常方便地繪製此類圖表tikz-cd
。帶有星號的箭頭來自這裡。旋轉\ge
符號可以透過 獲得\arrow[d,draw=none,"\ge" marking]
。
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{mathtools}
\usetikzlibrary{arrows.meta}
\newcommand{\mysym}{\vphantom{\to}^{*}}
\begin{document}
\tikzset{% https://tex.stackexchange.com/a/492664
startip/.tip={Glyph[glyph math command=mysym]},
Rightarrow*/.style={double equal sign distance,>={Implies},->.startip},
to*/.style={->.startip}}
%Diagram 1
\begin{tikzcd}[cramped,row sep=0.8em,every label/.style={font=\normalsize}]
|[label={[xshift=4pt]left:(p, \bar{u})=}]| c_1
\arrow[d,draw=none,"\ge" marking] & \\
|[label={[xshift=4pt]left:(p, \bar{u}')=}]| c_1' \arrow[r]
& |[label={[xshift=-4pt]right:= (q, \bar{v}')}]| c_2'
\arrow[d,draw=none,"\ge" marking] \\
& |[label={[xshift=-4pt]right:= (q, \bar{v})}]| c_2 \\
\end{tikzcd}
\bigskip
%Diagram 2
\begin{tikzcd}[cramped,row sep=0.8em,every label/.style={font=\normalsize}]
(p,\bar v)\arrow[d,draw=none,"\ge" marking] & \\
(p,\bar v) \arrow[r]& (q,\bar w')\arrow[d,draw=none,"\ge" marking] \\
& (q,\bar w) \\
\end{tikzcd}
\bigskip
%Diagram 3
\begin{tikzcd}[cramped,row sep=0.8em,every label/.style={font=\normalsize}]
(p,u)\arrow[d,draw=none,"\ge" marking] & \\
|[label={[xshift=4pt]left:A\ni}]|(p,u')\arrow[d,draw=none,"\ge" marking] & \\
(p,u'')\arrow[d,draw=none,"\ge" marking] & \\
|[label={[xshift=4pt]left:B\ni}]|(p,u''')\arrow[r]&
(q,v)\in C\\
\end{tikzcd}
\bigskip
%Diagram 4
\begin{tikzcd}[cramped,row sep=0.8em,every label/.style={font=\normalsize}]
\circ\arrow[r,to*]\arrow[d,draw=none,"\ge" marking] &
\circ\arrow[d,draw=none,"\ge" marking] &\\
\circ \arrow[r] & \circ \arrow[r,to*] & \circ\arrow[d,draw=none,"\ge" marking]\\
& & \circ \mathrlap{\,\in A}\\
\end{tikzcd}
\bigskip
%Diagram 5
\begin{tikzcd}[cramped,row sep=0.8em,every label/.style={font=\normalsize}]
|[label={[xshift=4pt]left:a=}]|a_0 \arrow[d,draw=none,"\ge" marking]\arrow[r,to*] & a_1 \arrow[r,to*] & a_2 \arrow[r,to*]
&\dots \arrow[r,to*]& a_n\arrow[d,draw=none,"\ge" marking] \\
|[label={[xshift=4pt]left:b=}]|b_0 \arrow[r,to*] & b_1 \arrow[r,to*] & b_2 \arrow[r,to*]
&\dots \arrow[r,to*]& b_n \\
\end{tikzcd}
\end{document}