我想要生成一个其中指定了映射的交换图,如下所示:
到目前为止,我的业余努力主要集中在 tikzcd 上,增加了额外的列和行,例如
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}
Zap \arrow{rrr}{foo}
\arrow{ddd}{bar} & & & Zoom \arrow{ddd}{bar} \\
& Foo \arrow[mapsto]{r}{\alpha}
\arrow[mapsto]{d}{\beta}
& Bar \arrow[mapsto]{d}{\gamma} & \\
& Baz \arrow[mapsto]{r}{\delta}
& Bong & \\
Zip \arrow[anchor=north]{rrr}{foo} & & & Zop
\end{tikzcd}
\]
\end{document}
这比上图丑多了。有什么更好的办法吗?
编辑:
下面 Stephen Segletes 的建议表明,这位先生对交换图的要求更高。我向他致敬,并向你们推荐以下优雅、美丽和力量的宏伟展示:
\documentclass[oneside,english]{amsart}
\usepackage{tikz-cd}
\usepackage{stackengine}[2013-09-11]
\usepackage{graphicx}
\begin{document}
\[
\stackinset{l}{13ex}{b}{6ex}{%
\scalebox{.8}
{%
\begin{tikzcd}[row sep=8ex, column sep = 8ex, ampersand replacement=\&]
1_C
\arrow[mapsto]{r}
\arrow[mapsto]{d}
\& \vartheta_C1_C = x^{\vartheta}
\arrow[mapsto]{d} \\
f
\arrow[mapsto]{r}
\& \begin{array}{c}Ff\left(x^{\vartheta}\right)=\\\vartheta_D\left(f\right)\end{array}
\end{tikzcd}
}
}{%
\begin{tikzcd}[row sep = 20ex, column sep = 20ex, ampersand replacement=\&]
Hom\left(C,C\right)
\arrow{r}{\vartheta_C}
\arrow[swap]{d}{f}
\& FC
\arrow{d}{Ff} \\
Hom\left(D,C\right)
\arrow[swap]{r}{\vartheta_D}
\& FD
\end{tikzcd}
}
\]
\end{document}
渲染结果如下
答案1
请原谅我不懂 tikz,所以我的图表中没有箭头,而是线条。但想法就在这里。创建两个图表,并将一个图表插入另一个图表的中心。在本例中,我在 tikz 中将内部图表缩小(大小 2 对 4),但我还将其缩放了 80%,以在插图上显示较小的字体。
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{stackengine}[2013-09-11]
\usepackage{graphicx}
\begin{document}
\centering
\stackinset{c}{}{c}{}{%
\scalebox{.8}{%
\begin{tikzpicture}
\node (A) at (0,0) {$Foo$};
\node (B) at (2,0) {$Bar$};
\node (C) at (0,-2) {$Baz$};
\node (D) at (2,-2) {$Bong$};
\draw (A) edge node[above] {$\alpha$} (B);
\draw (C) edge node[below] {$\delta$} (D);
\draw (A) edge node[left] {$\beta$} (C);
\draw (B) edge node[right] {$\gamma$} (D);
\end{tikzpicture}
}
}{%
\begin{tikzpicture}
\node (A) at (0,0) {$Zap$};
\node (B) at (4,0) {$Zoom$};
\node (C) at (0,-4) {$Zip$};
\node (D) at (4,-4) {$Zap$};
\draw (A) edge node[above] {$foo$} (B);
\draw (C) edge node[below] {$foo$} (D);
\draw (A) edge node[left] {$bar$} (C);
\draw (B) edge node[right] {$bar$} (D);
\end{tikzpicture}
}
\end{document}