Я рисовал коммутативные диаграммы с помощью 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}