xymatrix でコレクションオブジェクトを囲む

xymatrix でコレクションオブジェクトを囲む

双複素数を生成する次のコードがあります:

\begin{displaymath}
\xymatrix{
0 \ar[r] & \Omega^0_X \ar[d] \ar[r] & \Omega_X^1 \ar[r] \ar[d] & \ldots \ar[r] & \Omega_X^n \ar[d] \ar[r] & 0 \\ 
0 \ar[r] & C^0(\Omega^0_X) \ar[d] \ar[r] & C^0(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^0(\Omega_X^n) \ar[d] \ar[r] & 0 \\
0 \ar[r] & C^1(\Omega^0_X) \ar[d] \ar[r] & C^1(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^1(\Omega_X^n) \ar[d] \ar[r] & 0 \\
&   \vdots                       & \vdots                        & \ldots        & \vdots                        & \\
}\end{displaymath}

生成する

ここに画像の説明を入力してください

左下から右上の方向に、各対角線を丸で囲みたいと思います。XYpic マニュアルを読み進めていくことにしました (現在も読み進めています) が、よくあることですが、おそらく手遅れでしょう。

そこで質問なのですが、xymatrix/xypic または Tikz (Tikz についてはほとんど知りませんが) で、説明されているように要素を丸で囲む (楕円になると思いますが) ことは可能でしょうか? 下手な図で示したバージョンについては、下の図を参照してください。

ここに画像の説明を入力してください

XYpic リファレンス マニュアルで ellipse コマンドを見つけましたが、それを使用するには周囲のコードに十分精通していません。さらに、基本的な XYpic コードを xymatrix に組み込めるかどうかもわかりません。どちらかの点について明確にしていただければ、部分的な回答として非常に役立ちます。

答え1

切り替える可能性は1つありますtikz-cd可換図については、tikzmarkライブラリを使用して、後で「長方形」を描画するために使用するマークをいくつか配置します (特に、図の構文は同じであることに注意してください)。

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd} 
\usetikzlibrary{tikzmark}

\begin{document}

\begin{tikzcd}[column sep=1cm,row sep=1cm]
0 \ar[r] & \tikzmark{startc}\Omega^0_X \ar[d] \ar[r] & \tikzmark{startb}\Omega_X^1 \ar[r] \ar[d] & \tikzmark{starta}\ldots \ar[r] & \Omega_X^n \ar[d] \ar[r] & 0 \\ 
\tikzmark{endc}0 \ar[r] & C^0(\Omega^0_X) \ar[d] \ar[r] & C^0(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^0(\Omega_X^n) \ar[d] \ar[r] & 0 \\
\tikzmark{endb}0 \ar[r] & \tikzmark{enda}C^1(\Omega^0_X) \ar[d] \ar[r] & C^1(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^1(\Omega_X^n) \ar[d] \ar[r] & 0 \\
&   \vdots                       & \vdots                        & \ldots        & \vdots                        & \\
\end{tikzcd}

\begin{tikzpicture}[remember picture,overlay]
\draw[rounded corners=20pt]
  ([xshift=-5pt,yshift=15pt]{pic cs:starta}) -- 
  ([xshift=50pt,yshift=15pt]pic cs:starta) --
  ([xshift=30pt,yshift=-15pt]pic cs:enda) --
  ([xshift=-30pt,yshift=-15pt]pic cs:enda) --
  cycle
  ;
\draw[rounded corners=20pt]
  ([xshift=-10pt,yshift=15pt]{pic cs:startb}) -- 
  ([xshift=42pt,yshift=15pt]pic cs:startb) --
  ([xshift=0pt,yshift=-15pt]pic cs:endb) --
  ([xshift=-48pt,yshift=-15pt]pic cs:endb) --
  cycle
  ;
\draw[rounded corners=20pt]
  ([xshift=-6pt,yshift=15pt]{pic cs:startc}) -- 
  ([xshift=42pt,yshift=15pt]pic cs:startc) --
  ([xshift=-6pt,yshift=-15pt]pic cs:endc) --
  ([xshift=-46pt,yshift=-15pt]pic cs:endc) --
  cycle
  ;
\end{tikzpicture}

\end{document}

ここに画像の説明を入力してください

必要に応じてxshift、およびに使用される値を調整します。yshift

より良い形状の別の可能性:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd} 
\usetikzlibrary{tikzmark}

\tikzset{
Enclose/.style={
  draw,
  opacity=0.2,
  line width=#1,
  line cap=round,
  color=gray
  }
}

\begin{document}


\begin{tikzpicture}[remember picture,overlay]
\draw[Enclose=30pt] ([xshift=10pt]pic cs:starta) -- ([xshift=15pt]pic cs:enda);
\draw[Enclose=30pt] ([xshift=5pt]pic cs:startb) -- ([xshift=-10pt]pic cs:endb);
\draw[Enclose=30pt] ([xshift=10pt]pic cs:startc) -- ([xshift=-10pt]pic cs:endc);
\end{tikzpicture}

\begin{tikzcd}[column sep=1cm,row sep=1cm]
0 \ar[r] & \tikzmark{startc}\Omega^0_X \ar[d] \ar[r] & \tikzmark{startb}\Omega_X^1 \ar[r] \ar[d] & \tikzmark{starta}\ldots \ar[r] & \Omega_X^n \ar[d] \ar[r] & 0 \\ 
\tikzmark{endc}0 \ar[r] & C^0(\Omega^0_X) \ar[d] \ar[r] & C^0(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^0(\Omega_X^n) \ar[d] \ar[r] & 0 \\
\tikzmark{endb}0 \ar[r] & \tikzmark{enda}C^1(\Omega^0_X) \ar[d] \ar[r] & C^1(\Omega_X^1) \ar[r] \ar[d] & \ldots \ar[r] & C^1(\Omega_X^n) \ar[d] \ar[r] & 0 \\
&   \vdots                       & \vdots                        & \ldots        & \vdots                        & \\
\end{tikzcd}

\end{document}

ここに画像の説明を入力してください

コードを安定させるには 3 回実行する必要があります。

答え2

これがあなたが求めているものでしょうか? と呼ばれる新しいコマンドcircledが定義され、 を介して 1 つの引数を取るのでtikz、必要なのは だけですcircled{object}

アップデート:tikzmarkOP の新しい説明に基づいて、tikz を介したスキル の使用。

ここに画像の説明を入力してください

コード: 更新されました

\documentclass[12pt]{article}
\usepackage[margin=1cm,paper size={20cm,15cm}]{geometry}
\usepackage{tabularx,array}
\usepackage{amsmath,tikz}
\usepackage[all]{xy}
\usetikzlibrary{calc,positioning}
\thispagestyle{empty}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node[outer sep=0pt, inner sep=0pt] (#1) {};
}

%\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
%    \node[shape=circle,draw,minimum width=2cm,inner sep=2pt] (char) {$#1$};}}

\begin{document}
\begin{displaymath}
\xymatrix{
0 \ar[r] & \tikzmark{d}\Omega^0_X \ar[d] \ar[r] & \Omega_X^1 \ar[r] \ar[d] & \ldots \ar[r] &\tikzmark{b}{\Omega_X^n}  \ar[d] \ar[r] & 0 \\ 
\tikzmark{c}0 \ar[r] & C^0(\Omega^0_X) \ar[d] \ar[r] & C^0(\Omega_X^1) \ar[r] \ar[d] & {\ldots} \ar[r] & C^0(\Omega_X^n) \ar[d] \ar[r] & 0 \\
0 \ar[r] & C^1(\Omega^0_X)\ar[d] \ar[r] & {C^1(\Omega_X^1)} \ar[r] \ar[d] & \ldots \ar[r] & C^1(\Omega_X^n) \ar[d] \ar[r] & 0 \\
&   \tikzmark{a}{\vdots}                      & \vdots                        & \ldots        &   \vdots                        & \\
}
\end{displaymath}

\begin{tikzpicture}[overlay, remember picture]
\draw [rounded corners=10pt]($(a.south west)+(-0.5,-0.5)$) -- ($(a.south west)+(-0.5,0.6)$) -- ($(b.east)+(0.6,0.6)$)-- ($(b.east)+(0.6,-0.5)$)--cycle;
\draw [rounded corners=10pt]($(c.south west)+(-0.5,-0.5)$) -- ($(c.south west)+(-0.5,0.6)$) -- ($(d.east)+(0.6,0.6)$)-- ($(d.east)+(0.6,-0.5)$)--cycle;
\end{tikzpicture}
\end{document}

ここに画像の説明を入力してください

コード

\documentclass[12pt]{article}
\usepackage[margin=1cm,paper size={20cm,15cm}]{geometry}
\usepackage{tabularx,array}
\usepackage{amsmath,tikz}
\usepackage[all]{xy}
\thispagestyle{empty}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
    \node[shape=circle,draw,minimum width=2cm,inner sep=2pt] (char) {$#1$};}}

\begin{document}
\begin{displaymath}
\xymatrix{
0 \ar[r] & \Omega^0_X \ar[d] \ar[r] & \Omega_X^1 \ar[r] \ar[d] & \ldots \ar[r] & \circled{\Omega_X^n} \ar[d] \ar[r] & 0 \\ 
0 \ar[r] & C^0(\Omega^0_X) \ar[d] \ar[r] & C^0(\Omega_X^1) \ar[r] \ar[d] & \circled{\ldots} \ar[r] & C^0(\Omega_X^n) \ar[d] \ar[r] & 0 \\
0 \ar[r] & C^1(\Omega^0_X)\ar[d] \ar[r] & \circled{C^1(\Omega_X^1)} \ar[r] \ar[d] & \ldots \ar[r] & C^1(\Omega_X^n) \ar[d] \ar[r] & 0 \\
&   \circled{\vdots}                      & \vdots                        & \ldots        &   \vdots                        & \\
}
\end{displaymath}
\end{document}

答え3

のみtikz

ここに画像の説明を入力してください

\documentclass[tikz,margin=2pt]{standalone}
\usepackage{}
\usetikzlibrary{calc,fit}

\begin{document}

\begin{tikzpicture}[x=2cm,y=-1.5cm,>=stealth]

\foreach \y [count=\Y from 0] in
    {{0,\Omega^0_X,\Omega_X^1,\ldots,\Omega_X^n ,0},
    {0,C^0(\Omega^0_X),C^0(\Omega_X^1),\ldots,C^0(\Omega_X^n),0},
    {0,C^1(\Omega^0_X),C^1(\Omega_X^1),\ldots,C^1(\Omega_X^n),0},
    {,\vdots,\vdots,\ldots,\vdots,}} {%
    \foreach \x [count=\X from 0] in \y 
    {%
    \node[inner sep=5pt] (\X\Y) at (\X,\Y) {$\x$} ;
    }}

\foreach \y in {0,...,3}
\foreach \x [count=\i from 1] in {0,...,4} {%
    \draw[->] (\x\y) -- (\i\y); 
    }

\foreach \x in {0,...,5}
\foreach \y [count=\i from 1] in {0,...,2} {%
    \draw[->] (\x\y) -- (\x\i); 
    }

\node[draw=red, rounded corners=6pt, rotate fit=-50, inner sep =7pt, fit=(10) (01)] {};
\node[draw=red, rounded corners=6pt, rotate fit=-50, inner sep =1pt, fit=(20) (11) (02)] {};
\node[draw=red, rounded corners=6pt, rotate fit=-50, inner sep =1pt, fit=(12) (21) (30)] {};
\end{tikzpicture}

\end{document}

関連情報