Problema de quadrado de pullback do Tikzcd

Problema de quadrado de pullback do Tikzcd

Eu tenho um diagrama tikzcd

\begin{center}
\begin{tikzcd}
F \arrow[r] \arrow[d] 
& * \arrow[d] \\
X \arrow[r, "f"] & Y \\
\end{tikzcd}
\end{center}

que se parece com isso:

Quadrado de recuo

Desejo adicionar um símbolo que indique que este é um quadrado de retrocesso. Tendo olhado ambosaquieaqui, encontrei a solução para criar meu próprio símbolo tikz-cd e inseri-lo no diagrama.

O código do meu símbolo é este:

\newcommand{\foo}[1]{%
\begin{tikzpicture}[#1]%
\draw (0,0) -- (1ex,0ex);%
\draw (1ex,0ex) -- (1ex,1ex);%
\end{tikzpicture}%
 }

Esta é basicamente a borda inferior e direita de um quadrado.

Para adicionar este símbolo ao diagrama, estou alterando o código do diagrama para:

\begin{center}
\begin{tikzcd}
F \arrow[r] \arrow[d] 
\arrow[dr, phantom, "\foo{} " , very near start, color=black]
& * \arrow[d] \\
X \arrow[r, "f"] & Y \\
\end{tikzcd}
\end{center}

Pelo que eu sei, isso deveria ser criar uma seta invisível e colocar meu símbolo em sua cabeça. Na verdade, algo aparece, mas não é o que eu quero:

insira a descrição da imagem aqui

O que deve aparecer é algo assim (desenhado no MSpaint):

insira a descrição da imagem aqui

O que é a mesma coisa, exceto o símbolo com o símbolo correto.

O que está errado? Devo abordar isso de uma maneira diferente?

Responder1

Sua abordagem se aninha tikzpictures. A maneira padrão de evitar isso éusar \saveboxé.

\documentclass{article}
\usepackage{tikz-cd}
\newsavebox{\pullback}
\sbox\pullback{%
\begin{tikzpicture}%
\draw (0,0) -- (1ex,0ex);%
\draw (1ex,0ex) -- (1ex,1ex);%
\end{tikzpicture}}
\begin{document}
\begin{center}
\begin{tikzcd}
F \arrow[r] \arrow[d] 
\arrow[dr, phantom, "\usebox\pullback" , very near start, color=black]
& * \arrow[d] \\
X \arrow[r, "f"] & Y \\
\end{tikzcd}
\end{center}
\end{document}

insira a descrição da imagem aqui

Você definiu seu comando com um parâmetro que não usou. Vamos supor que haja necessidade de tais parâmetros. Então \saveboxeles são pouco úteis. Portanto, adiciono uma alternativa: path picturecom tantas coisas consertadas quanto você puder imaginar. Por exemplo, -é para dizer que não deveria haver uma seta, etc. (entendo que é muito improvável que você queira que o símbolo seja vermelho, isso é apenas para ilustrar que os parâmetros funcionam aqui).

\documentclass{article}
\usepackage{tikz-cd}
\tikzset{pullback/.style={minimum size=1.2ex,path picture={
\draw[opacity=1,black,-,#1] (-0.5ex,-0.5ex) -- (0.5ex,-0.5ex) -- (0.5ex,0.5ex);%
}}}
\begin{document}
\begin{center}
\begin{tikzcd}
F \arrow[r] \arrow[d] 
\arrow[dr, phantom," " {pullback=red}, very near start, color=black]
& * \arrow[d] \\
X \arrow[r, "f"] & Y \\
\end{tikzcd}
\end{center}
\end{document}

insira a descrição da imagem aqui

Responder2

Por que você simplesmente não insere o \lrcornersímbolo?

 \documentclass[svgnames]{article}
\usepackage{tikz-cd, amsmath, amssymb}%

\begin{document}

\begin{center}
\begin{tikzcd}
F \arrow[r] \arrow[d]
\arrow[dr, phantom, "\scalebox{1.5}{\color{IndianRed}$\lrcorner$}" , very near start, color=black]
& * \arrow[d] \\
X \arrow[r, "f"] & Y \\
\end{tikzcd}
\end{center}

\end{document} 

insira a descrição da imagem aqui

Responder3

Dentro de a tikzpicture, junto a path, você pode colocar não só nodemas também pic.

insira a descrição da imagem aqui

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[bmr/.pic={
\draw (2mm,0)--++(-90:2mm)--++(180:2mm);
}]
\path
(0,0)     node (F) {$F$}
+(-45:.2) pic[scale=.8,red]{bmr}
+(0:1.5)  node (star) {$*$}
++(-90:1) node (X) {$X$}
+(0:1.5)  node (Y) {$Y$};
\draw[->] (F)--(star);
\draw[->] (F)--(X);
\draw[->] (X)--(Y) node[midway,above,scale=.6]{$f$};
\draw[->] (star)--(Y);
\end{tikzpicture}   
\end{document}

informação relacionada