
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
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:
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-cd
für das kommutative Diagramm und unter Verwendung der tikzmark
Bibliothek 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}
Passen Sie die verwendeten Werte Ihren Bedürfnissen entsprechend xshift
an .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}
Zur Stabilisierung sind drei Durchläufe der Codes erforderlich.
Antwort2
Könnte dies sein, was Sie wollen? Ein neuer Befehl namens circled
ist definiert und nimmt ein Argument an. Über tikz
müssen Sie nur Folgendes tun circled{object}
: .
Aktualisieren: Einsatz der tikzmark
Fertigkeit über Tikz, basierend auf den neuen Erklärungen des OP.
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}
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
:
\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}