Einkreisen einer Sammlung von Objekten in xymatrix

Einkreisen einer Sammlung von Objekten in xymatrix

Ich habe den folgenden Code, der einen Bikomplex erzeugt:

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

das erzeugt

Bildbeschreibung hier eingeben

Ich möchte jede der Diagonalen umkreisen, von links unten nach rechts oben. Ich habe mir vorgenommen, das XYpic-Handbuch durchzuarbeiten (und tue dies auch gerade), aber wie so oft ist es wahrscheinlich schon zu spät.

Meine Frage ist also, ob es möglich ist, die Elemente wie beschrieben einzukreisen (obwohl ich vermute, dass es eher eine Ellipse sein wird), entweder in xymatrix/xypic oder in Tikz (obwohl ich mich mit Tikz kaum auskenne)? Eine schlecht gezeichnete Version finden Sie im Bild unten:

Bildbeschreibung hier eingeben

Ich habe den Ellipsenbefehl in einem XYpic-Referenzhandbuch gefunden, bin aber mit dem umgebenden Code nicht vertraut genug, um ihn zu verwenden. Außerdem bin ich mir nicht sicher, ob grundlegender XYpic-Code in xymatrix eingefügt werden kann. Eine Klarstellung zu beiden Punkten wäre als Teilantwort sehr hilfreich.

Antwort1

Hier ist eine Möglichkeit, zu wechselntikz-cdfür das kommutative Diagramm und unter Verwendung der tikzmarkBibliothek zum Platzieren einiger Markierungen, die später zum Zeichnen der „Rechtecke“ verwendet werden (beachten Sie insbesondere, dass die Syntax für das Diagramm dieselbe ist):

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

Bildbeschreibung hier eingeben

Passen Sie die verwendeten Werte Ihren Bedürfnissen entsprechend xshiftan .yshift

Eine weitere Möglichkeit mit besseren Formen:

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

Bildbeschreibung hier eingeben

Zur Stabilisierung sind drei Durchläufe der Codes erforderlich.

Antwort2

Könnte dies sein, was Sie wollen? Ein neuer Befehl namens circledist definiert und nimmt ein Argument an. Über tikzmüssen Sie nur Folgendes tun circled{object}: .

Aktualisieren: Einsatz der tikzmarkFertigkeit über Tikz, basierend auf den neuen Erklärungen des OP.

Bildbeschreibung hier eingeben

Code: aktualisiert

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

Bildbeschreibung hier eingeben

Code

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

Antwort3

Nur mit tikz:

Bildbeschreibung hier eingeben

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

verwandte Informationen