在 tikz-cd 包中绘制带圆圈节点的交换图

在 tikz-cd 包中绘制带圆圈节点的交换图

我目前有以下第二和第三环同构定理的两个交换图:

二次同构

在此处输入图片描述 在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,fit}
\begin{document}
    \begin{tikzpicture}[x=1.75cm,y=1.75cm]
    \node (r) at (0,2) {$R$};
    \node (apb) at (0,1) {$A+B$};
    \node (a) at (-1,0) {$A$};
    \node (b) at (1,0) {$B$};
    \node(ab) at (0,-1) {$A\cap B$};
    \draw (r)--(apb)--(a)--(ab) (ab)--(b)--(apb);
    \node[rotate=45,ellipse,draw,dashed,inner xsep=-9mm,inner ysep=1mm,fit=(apb)(b)] {};
    \node[rotate=45,ellipse,draw,dashed,inner xsep=-9mm,inner ysep=1mm,fit=(ab)(a)] {};
    \node {$\cong$};
    \end{tikzpicture}
\end{document}

第三同构

在此处输入图片描述 在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,fit}
\begin{document}
    \begin{tikzpicture}[x=1.75cm,y=1.75cm]
    \node (r) at (-1,1) {$R$};
    \node (j) at (-1,0) {$J$};
    \node (i) at (-1,-1) {$I$};
    \node (ri) at (1,1) {$R/I$};
    \node (ji) at (1,0) {$J/I$};
    \node (o) at (1,-1) {$0$};
    \draw (r)--(j)--(i) (ri)--(ji)--(o);
    \node[rotate=0,ellipse,draw,dashed,inner xsep=1mm,inner ysep=-2mm,fit=(r)(j)] {};
    \node[rotate=0,ellipse,draw,dashed,inner xsep=1mm,inner ysep=-2mm,fit=(ri)(ji)] {};
    \end{tikzpicture}
\end{document}
  1. 首先,有没有办法让这些使用tikz-cd包包含环绕的椭圆。对于第一个图表,我有一张 tikzcd 图片,但我找不到添加椭圆的方法。(我更喜欢 tikz-cd,因为它在创建这些图表时更直接)。
  2. 如您所见,我无法完成第三同构图,因为我试图让两个圆圈椭圆之间的箭头位于第一个和第二个节点之间的高度,即它们的连接线的高度。有人能帮我吗?(我还想要一个“同构”,即 $\cong$ 符号作为连接箭头的标题)。

谢谢!

答案1

使用remember pictureoverlay,指令,由于它们至少需要两次编译:

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{fit,
                shapes.geometric}

\begin{document}
\centering
    \begin{tikzcd}[arrows=dash,
every matrix/.append style = {name=m},
remember picture, overlay,
                    ]
    &  R \ar[d]              &           \\
    &  A+B \ar[dl]\ar[dr] 
                             &           \\ 
A   \ar[dr] 
    &  \cong                 & B \ar[dl] \\
    &  A\cap B               &           
    \end{tikzcd}
%
    \begin{tikzpicture}[
remember picture, overlay,
E/.style = {ellipse, draw=blue, dashed,
            inner xsep=-2mm,inner ysep=-4mm, rotate=-30, fit=#1}
                        ]
\node[E = (m-2-2) (m-3-3)] {};
\node[E = (m-3-1) (m-4-2)] {};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

附录: 上述解决方案有一个令人讨厌的缺陷:如果在两个段落之间插入图像,无论它是在center还是figure环境中displaymath,它都会与图像上方和下方的文本重叠。可以通过在图像上方和下方添加垂直空间来消除此问题\vspace{<amount>}˙

可以避免这种情况,如果您使用指令代替 remember picture并按照第一个解决方案中提出的方式overlay,使用execute at end pictureCarLaTeX 答案

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{fit,
                shapes.geometric}
\usepackage{lipsum}

\begin{document}
    \lipsum[65]
    \[
\tikzset{
F/.style = {ellipse, draw=blue, dashed,
            inner xsep=-2mm,inner ysep=-4mm, rotate=-30, 
            fit=#1}
        }
    \begin{tikzcd}[
                arrows = dash,
execute at end picture = {
    \node[F = (tikz@f@1-2-2) (tikz@f@1-3-3)] {};
    \node[F = (tikz@f@1-3-1) (tikz@f@1-4-2)] {};
                        }% end of execute at end picture
                    ]
    &  R \ar[d]             &           \\
    &  A+B \ar[dl]\ar[dr]
                            &           \\
A   \ar[dr]
    &                       & B \ar[dl] \\
    &  A\cap B              &
    \end{tikzcd}
\]
\lipsum[66]   
\end{document}

在此处输入图片描述

相关内容