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:
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:
O que deve aparecer é algo assim (desenhado no MSpaint):
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 tikzpicture
s. 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}
Você definiu seu comando com um parâmetro que não usou. Vamos supor que haja necessidade de tais parâmetros. Então \savebox
eles são pouco úteis. Portanto, adiciono uma alternativa: path picture
com 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}
Responder2
Por que você simplesmente não insere o \lrcorner
sí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}
Responder3
Dentro de a tikzpicture
, junto a path
, você pode colocar não só node
mas também pic
.
\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}