TikZ 中交换图中的同构

TikZ 中交换图中的同构

抱歉,这个问题比较基础。我试图得到如下交换图

\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
$$\begin{tikzpicture}[description/.style={fill=white,inner sep=2pt}]
\matrix (m) [matrix of math nodes, row sep=3em,
column sep=2.5em, text height=1.5ex, text depth=0.25ex]
{A & B \\
C& D \\ };
\path[->,font=\scriptsize]
(m-1-1) edge node[auto] {$\widetilde {f} $} (m-1-2)
(m-2-1) edge node[auto] {$ f $} (m-2-2);
\draw[double equal sign distance,shorten <=5pt,shorten >=5pt] (m-1-2) -- (m-2-2);
\draw[double equal sign distance,shorten <=5pt,shorten >=5pt] (m-1-1) -- (m-2-1);
\end{tikzpicture}$$

我的问题是:如何用垂直同构符号(或的垂直版本)替换连接$A$到的垂直等号?$C$$\simeq$$\approx $

答案1

我尝试修改你的代码,但结果却很奇怪,根本没有达到预期的效果。作为一个有强迫症的控制狂,我总是“手动”定位,所以告诉我这是否适合你:

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}

\begin{document}

\begin{tikzpicture}
\node (A) at (0,0) {A};
\node (B) at (2,0) {B};
\node (C) at (0,-2) {C};
\node (D) at (2,-2) {D};
\draw (A) edge node[above] {$\widetilde {f} $} (B);
\draw (C) edge node[above] {$f$} (D);
\draw (A) edge node[above,rotate=90] {$\simeq$} (C);
\draw (B) edge node[above,rotate=90] {$\approx$} (D);
\end{tikzpicture}

\end{document}

在此处输入图片描述


编辑1:有一些“作弊”的改变白色建议的:

\draw[white] (A) edge node[rotate=90,black] {$\simeq$} (C);
\draw[white] (B) edge node[rotate=90,black] {$\approx$} (D);

在此处输入图片描述


编辑2:当然,在非白色背景上仍然可以看到线条,所以这样应该更好:

\draw[transparent] (A) edge node[rotate=90,opacity=1] {$\simeq$} (C);
\draw[transparent] (B) edge node[rotate=90,opacity=1] {$\approx$} (D);

编辑3:我现在想不出任何自动化的方法,但你可以使用\resizebox

\draw[transparent] (A) edge node[rotate=90,opacity=1] {\resizebox{1.5cm}{0.3cm}{$\simeq$}} (C);
\draw[transparent] (B) edge node[rotate=90,opacity=1] {\resizebox{1.5cm}{0.3cm}{$\approx$}} (D);

在此处输入图片描述

答案2

我喜欢使用 tikz-cd 来绘制交换图。下面是我表示同构的方法。 在此处输入图片描述

\documentclass{amsart}
\usepackage{tikz-cd}
\usepackage{rotating}
\newcommand*{\isoarrow}[1]{\arrow[#1,"\rotatebox{90}{\(\sim\)}"
]}
\begin{document}
\[
\begin{tikzcd}
0 \arrow{r} & A \arrow{r} \isoarrow{d} & B \arrow{r} \isoarrow{d} & C \arrow{r} \isoarrow{d} & 0 \\ 
0 \arrow{r} & A' \arrow{r} & B' \arrow{r} & C'  \arrow{r} & 0 
\end{tikzcd}
\]
\end{document}

答案3

我从 Subseteq 的样式中取出了垂直或水平的样式。

\tikzset{cong/.style={draw=none,edge node={node [sloped, allow upside down, auto=false]{$\cong$}}},
         Isom/.style={draw=none,every to/.append style={edge node={node [sloped, allow upside down, auto=false]{$\cong$}}}}}

在序言中加载代码,然后在tikzcd

$\begin{tikzcd}
\ker(f)\arrow[hook]{r}&B\\
A\arrow{ur}{i}\arrow[Isom]{u}
\end{tikzcd}$

对我来说它似乎效果很好。

相关内容