
私は 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
なぜこの方程式を描く必要があるのでしょうか? 配列として記述する方が簡単なようです。たとえば、質問の最後の 2 つの例の場合:
\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}