Circulando objetos de uma coleção em xymatrix

Circulando objetos de uma coleção em xymatrix

Tenho o seguinte código que produz um bicomplexo:

\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}

que produz

insira a descrição da imagem aqui

Eu gostaria de circular cada uma das diagonais, da parte inferior esquerda para a parte superior direita. Resolvi (e estou atualmente) trabalhando no manual do XYpic, mas como costuma acontecer, provavelmente é tarde demais.

Então, minha pergunta é: é possível circular (embora eu ache que será mais uma elipse) os elementos conforme descrito, seja em xymatrix/xypic ou em Tikz (embora eu conheça muito pouco Tikz)? Veja a imagem abaixo para uma versão mal desenhada:

insira a descrição da imagem aqui

Encontrei o comando ellipse em um manual de referência do XYpic, mas não estou familiarizado o suficiente com o código circundante para usá-lo. Além disso, não tenho certeza se o código XYpic básico pode ser colocado no xymatrix. Esclarecimentos sobre qualquer um dos pontos seriam muito úteis como resposta parcial.

Responder1

Aqui está uma possibilidade de mudar paratikz-cdpara o diagrama comutativo e utilizando a tikzmarkbiblioteca para colocar algumas marcas posteriormente utilizadas para desenhar os "retângulos" (observe, em particular, que a sintaxe do diagrama é a mesma):

\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}

insira a descrição da imagem aqui

Ajuste os valores utilizados para xshifte yshiftde acordo com suas necessidades.

Outra possibilidade com formatos melhores:

\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}

insira a descrição da imagem aqui

Os códigos precisam de três execuções para se estabilizarem.

Responder2

Poderia ser isso que você quer? um novo comando chamado circledé definido, recebendo um argumento, via tikz, tudo o que você precisa fazer é circled{object}.

Atualizar: Uso de tikzmarkhabilidade via tikz, com base nas novas explicações do OP.

insira a descrição da imagem aqui

Código: atualizado

\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}

insira a descrição da imagem aqui

Código

\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}

Responder3

Com tikzapenas :

insira a descrição da imagem aqui

\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}

informação relacionada