
Existe uma maneira agradável/padronizada de formatar células globulares de 3 células da xy-pic
mesma maneira que fazemos com 2 células?
Para 2 células o comando \rtwocell
gera as setas necessárias e uma modificação que permite digitar\rncell
números naturais n seria incrível para escrever artigos de teoria de categorias enLabPáginas.
Achei umpáginadescrevendo como definir células globulares de 3 células em 2004, mas xy-pic
parece ter mudado significativamente a sintaxe desde então (ou pelo menos sou muito inexperiente para ler o código lá e traduzi-lo para algo que funcione na minha versão do xy-pic
). Alguém com mais conhecimento em LaTeX pode renovar esses códigos para funcionar com xy-pic
sintaxe moderna?
Qualquer estratégia que generalize para células superiores com setas entre setas entre setas entre... seria linda, mas uma solução para 3 células ainda é muito apreciada. Observe também que tikz
as soluções serão um tanto incompreensíveis para mim devido à falta de familiaridade com a sintaxe, no entanto, se não houver xy-pic
solução (e nenhum bom samaritano disposto a criar uma) e tikz
tiver uma solução elegante em mãos, posso aprender algumas coisas novas sintaxe e usar um tikz
diagrama.
O seguinte código
\xymatrix@R5mm@C10mm{ & \ar@{=>}@/^.7pc/[dd]^\Theta \ar@{=>}@/_.7pc/[dd]_{\;\;\;\Theta'} \\ A \ar@/^2.0pc/[rr]^F \ar@/_2.1pc/[rr]_G & {\substack{\mathscr{M} \\ \rightsquigarrow}} & B \\ & }
gera o diagrama abaixo
e é relativamente simples (mas demorado) generalizar ainda mais, mas isso é bastante complicado e demorado para diagramas maiores, portanto, uma solução mais elegante ainda seria muito apreciada.
Responder1
Comtikz-cd
não é difícil.
Os &
são usados para separar as células (e \\
para separar as linhas, se você tiver mais linhas).
\arrow[rr, bend left=40, "F", ""{name=U}]
significa "desenhar uma seta, dobrada para a esquerda em 40 graus, com a etiqueta "F" e chamar o ponto médio de "U"."
\arrow[Rightarrow, "\Theta", shorten <=2pt, shorten >=2pt, bend left=40, from=U, to=D]
significa "desenhar uma seta para a direita, rotulando-a com \Theta
, encurtando um pouco (2pt) a ponta e a cauda da flecha, dobrando para a esquerda do ponto denominado "U" até o ponto denominado "D"."
Não sei nada sobre diagramas globulares, acabei de escrever um exemplo de como usar o tikz-cd
.
Editar:para casos peculiares, uma solução TikZ pura pode ser conveniente.
Eu adicionei um com um TikZ matrix
. Se você usar sem carregar tikz-cd
, terá que carregar \usetikzlibrary{matrix}
.
Você pode consultar as células da matriz com matrixname-rownumber-columnnumber
.
\node[above=16pt of mymatr, inner sep=12pt] (UP) {};
significa "posicionar o nó UP
16pt acima de mymatr
, como o nó tem um texto vazio, atribuí-lhe uma altura com inner sep=12pt
."
\draw[double distance=2pt, -{Implies}] (UP.south) -- (DOWN.north);
significa "desenhar uma flecha, com Implies
ponta de seta, e com distância de 2pt entre as duas fileiras de setas, entre o ponto sul do nó UP
e o ponto norte do ponto DOWN
."
\draw ([xshift=-10pt]UP.south) edge[bend right=60, double distance=2pt, -{Implies}] ([xshift=-10pt]DOWN.north);
significa "desenhar uma Implies
seta, dobrada para a direita em 60 graus, de um ponto deslocado horizontalmente -10pt de UP.south
para um ponto deslocado horizontalmente -10pt de DOWN.north
."
\documentclass{article}
\usepackage{amsmath,amsfonts, amssymb}
\usepackage{tikz-cd}
\usetikzlibrary{positioning, arrows.meta}
\begin{document}
\[
\begin{tikzcd}
A
\arrow[rr, bend left=40, "F", ""{name=U}]
\arrow[rr, bend right=40, "G", swap, ""{name=D}]
&
M
&
B
\arrow[rr, bend left=40, "A", ""{name=A}]
\arrow[rr, bend right=40, "B", swap, ""{name=B}]
&
\Rrightarrow
&
\bullet
\arrow[Rightarrow, "\Theta", shorten <=2pt, shorten >=2pt, bend left=40, from=U, to=D]
\arrow[Rightarrow, "\Theta'", shorten <=2pt, shorten >=2pt, bend right=40, swap, from=U, to=D]
\arrow[Rightarrow, "\Phi", shorten <=2pt, shorten >=2pt, bend left=40, from=A, to=B]
\arrow[Rightarrow, "\Phi'", shorten <=2pt, shorten >=2pt, bend right=40, swap, from=A, to=B]
\end{tikzcd}
\]
\[
\begin{tikzpicture}
\matrix[matrix of math nodes,
nodes in empty cells]
(mymatr) {
\bullet &[20pt] \Rrightarrow &[10pt] \Rrightarrow &[20pt] \bullet\\
};
\node[above=16pt of mymatr, inner sep=12pt] (UP) {};
\node[below=16pt of mymatr, inner sep=12pt] (DOWN) {};
\draw[->, rounded corners=40pt] (mymatr-1-1) -- (UP.north) -- (mymatr-1-4);
\draw[->, rounded corners=40pt] (mymatr-1-1) -- (DOWN.south) -- (mymatr-1-4);
\draw[double distance=2pt, -{Implies}] (UP.south) -- (DOWN.north);
\draw ([xshift=10pt]UP.south) edge[bend left=60, double distance=2pt, -{Implies}] ([xshift=10pt]DOWN.north);
\draw ([xshift=-10pt]UP.south) edge[bend right=60, double distance=2pt, -{Implies}] ([xshift=-10pt]DOWN.north);
\end{tikzpicture}
\]
\end{document}