在 tikzcd 中规范化条目大小的最简单方法

在 tikzcd 中规范化条目大小的最简单方法

我一直在使用 tikzcd 绘制交换图,其中一个条目比其他条目大得多。我希望条目大小以某种方式“标准化”,这样显示就不会太不均匀,并且我希望能够针对每个图表单独进行本地调整。这是一个典型的例子:

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-cd}

\usetikzlibrary{matrix}
\usetikzlibrary{arrows}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{trees}
\usetikzlibrary{backgrounds}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{force}

\tikzset{
  commutative diagrams/.cd, 
  arrow style=tikz, 
  diagrams={>={Straight Barb[scale=0.9]}, semithick}
}

\begin{document}

\[
\begin{tikzcd}
A \arrow[rr, bend right, dashed, "i"'] \arrow[dr, equals] \arrow[rr, phantom, "\bot"] & & \hom_B(B,f) \arrow[dl, two heads, "p_1"] \arrow[ll, bend right, two heads, "p_1"'] \\ & A
\end{tikzcd}
\]
\end{document}

间距不当的附加物

答案1

您可以使用以下方式微调标签的位置pos=<fraction>

\documentclass{article}
\usepackage{tikz-cd}

\usetikzlibrary{arrows}
\usetikzlibrary{arrows.meta}

\tikzset{
  commutative diagrams/.cd, 
  arrow style=tikz, 
  diagrams={>={Straight Barb[scale=0.9]}, semithick}
}

\begin{document}

\[
\begin{tikzcd}[column sep={4em,between origins}]
A
  \arrow[rr, bend right, dashed, "i"' pos=0.57]
  \arrow[dr, equals]
& \bot &
\hom_B(B,f)
  \arrow[dl, two heads, "p_1"]
  \arrow[ll, bend right, two heads, "p_1"' pos=0.43]
\\
& A
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

答案2

像这样?我使用\makebox*小包中的命令makebox,通过简单的语法使最右边的节点与最左边的节点宽度相同。

无关:加载了就无需tikz加载tikz-cd

\documentclass{article}
\usepackage{tikz-cd}

\usetikzlibrary{matrix}
\usetikzlibrary{arrows}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{trees}
\usetikzlibrary{backgrounds}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{force}

\tikzset{
  commutative diagrams/.cd,
  arrow style=tikz,
  diagrams={>={Straight Barb[scale=0.9]}, semithick}
}

\usepackage{makebox} 
\begin{document}

\[
\begin{tikzcd}
A \arrow[rr, bend right, dashed, "i"'] \arrow[dr, equals] \arrow[rr, phantom, "\bot"] & &\makebox*{$A$}{$ \hom_B(B,f) $} \arrow[dl, two heads, "p_1"] \arrow[ll, bend right, two heads, "p_1"'] \\ & A
\end{tikzcd}
\]
\end{document} 

在此处输入图片描述

相关内容