Как поместить квадрат внутрь коммутативной диаграммы?

Как поместить квадрат внутрь коммутативной диаграммы?

Как поместить квадрат внутрь коммутативной диаграммы, как на следующем рисунке:

введите описание изображения здесь

Хотелось бы иметь квадрат на следующей диаграмме:

\documentclass[a4paper,12pt]{article}
\usepackage{tikz-cd}
\begin{document}

\begin{tikzcd}
X\times_S Y \arrow{r}{p_2} \arrow{d}[swap]{p_1} &Y \arrow{d}{g} \\   
X \arrow[swap]{r}{f} & Z
\end{tikzcd}
        
\end{document}

решение1

Два решения: одно с pstricksи psmatrixокружением, другое с tikz-cd, в котором я использую короткий синтаксис для стрелок:

\documentclass{article}
\usepackage{mathtools, amssymb}
 \usepackage{pst-node, auto-pst-pdf}
\usepackage{tikz-cd}

\begin{document}

\texttt{psmatrix solution: }
 \[ \psset{arrows=->, arrowinset=0.15, linewidth=0.6pt, nodesep=3pt, rowsep=0.6cm, colsep = 1cm}
 \everypsbox{\scriptstyle}
 \begin{psmatrix}
%%% nodes
  X'' & X' & X \\%
S'' & S' & S
 %%% horizontal arrows
\ncline{1,1}{1,2}\naput{g'} \ncline{1,2}{1,3}\naput{g}
 \ncline{2,1}{2,2}\nbput{f'} \ncline{2,2}{2,3}\nbput{f}
 %%% vertical arrows
\ncline{1,1}{2,1} \ncline{1,2}{2,2}\ncline{1,3}{2,3}
\ncline[linestyle =none, arrows=-]{1,2}{2,3}\ncput{\textstyle\square}
 \end{psmatrix}
 \]
\vskip 1cm

\texttt{tikz-cd solution: }
\[ \begin{tikzcd}[arrows={-Stealth}]
  X''\rar["g'"]\dar & X'\rar["g"]\dar\drar[phantom, "\square"] & X\dar \\%
S''\rar[swap, "f'"] & S'\rar[swap, "f"] & S
\end{tikzcd}
\]

\end{document} 

введите описание изображения здесь

решение2

Правильный способ tikz-cd— использовать «фантомную» стрелку, как в

\arrow[dr, phantom, "\square"]

MWE (для воспроизведения рисунка я использовал код, а не ваш):

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

\begin{document}

\begin{tikzcd}
X'' \arrow[r, "g'"] \arrow[d] & X' \arrow[r, "g"] \arrow[d] \arrow[dr, phantom, "\square"] & X \arrow[d] \\
S'' \arrow[r, "f'"']          & S' \arrow[r, "f"']                                         & S
\end{tikzcd}

\end{document} 

введите описание изображения здесь

решение3

Другим решением может быть использование execute at end picture.
Это менее элегантно, чем ответ Карлкёллера, но позволяет вам расположить узел где угодно, просто изменив его координаты.

\documentclass[a4paper,12pt]{article}
\usepackage{amssymb}
\usepackage{tikz-cd}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzcd}[
    every matrix/.append style={name=mycd},
    execute at end picture={
    \node at ($(mycd-1-1)!0.5!(mycd-2-2)$) {$\square$};
    }
]
X\times_S Y \arrow{r}{p_2} \arrow{d}[swap]{p_1} &Y \arrow{d}{g} \\   
X \arrow[swap]{r}{f} & Z
\end{tikzcd}

\end{document}

введите описание изображения здесь

Связанный контент