
Tengo el siguiente código que produce un bicomplejo:
\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 produce
Me gustaría rodear cada una de las diagonales, desde la parte inferior izquierda hasta la parte superior derecha. He decidido (y estoy actualmente) trabajando en el manual de XYpic, pero como suele ser el caso, probablemente sea demasiado tarde.
Entonces mi pregunta es, ¿es posible rodear (aunque supongo que será más una elipse) los elementos como se describen, ya sea en xymatrix/xypic o en Tikz (aunque sé muy poco de Tikz)? Vea la imagen a continuación para ver una versión mal dibujada:
Encontré el comando elipse en un manual de referencia de XYpic, pero no estoy lo suficientemente familiarizado con el código circundante como para utilizarlo. Además, no estoy seguro de si el código XYpic básico se puede introducir en xymatrix. Una aclaración sobre cualquiera de los puntos sería muy útil como respuesta parcial.
Respuesta1
Aquí hay una posibilidad de cambiar atikz-cd
para el diagrama conmutativo y usando la tikzmark
biblioteca para colocar algunas marcas que luego se usaron para dibujar los "rectángulos" (observe, en particular, que la sintaxis para el diagrama es la misma):
\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}
Ajuste los valores utilizados xshift
según yshift
sus necesidades.
Otra posibilidad con mejores formas:
\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}
Los códigos necesitan tres ejecuciones para estabilizarse.
Respuesta2
¿Podría ser esto lo que quieres? se define un nuevo comando llamado circled
, tomando un argumento, a través de tikz
, todo lo que necesita hacer es circled{object}
.
Actualizar: Uso de tikzmark
habilidad vía tikz, basado en las nuevas explicaciones de OP.
Código: actualizado
\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}
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}
Respuesta3
Con tikz
solo :
\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}