
저는 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}