Tikzcd プルバックスクエア問題

Tikzcd プルバックスクエア問題

tikzcdダイアグラムがあります

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

これは次のようになります:

プルバックスクエア

これがプルバックスクエアであることを示すシンボルを追加したいと思います。ここそしてここ、独自の tikz-cd シンボルを作成し、それを図に挿入するという解決策を見つけました。

私のシンボルのコードは次のとおりです:

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

これは基本的に正方形の下端と右端です。

このシンボルを図に追加するには、図のコードを次のように変更します。

\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}

私の知る限り、これは目に見えない矢印を作成し、その先頭にシンボルを配置するはずです。確かに何かが表示されますが、それは私が望んでいるものではありません。

ここに画像の説明を入力してください

表示されるのは次のようになります (MSpaint で設計)。

ここに画像の説明を入力してください

正しい記号が付いているシンボルを除いて同じものです。

何が間違っているのでしょうか? 別の方法でアプローチしたほうがよいでしょうか?

答え1

あなたのアプローチはtikzpicturesをネストしています。これを避ける標準的な方法は\saveboxesを使用する

\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}

ここに画像の説明を入力してください

コマンドにパラメータを定義しましたが、使用しませんでした。そのようなパラメータが必要だと仮定しましょう。その場合、\saveboxは使いにくくなります。そのため、代替案として、path picture考えられる限り多くのことを固定した を追加します。たとえば、-矢印などがあってはならないと指定します。(シンボルを赤にすることはほとんどないと思いますが、これはパラメータがここで機能することを示すためだけのものです。)

\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}

ここに画像の説明を入力してください

答え2

単に記号を挿入してみてはいかがでしょうか\lrcorner?

 \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} 

ここに画像の説明を入力してください

答え3

の内側にはtikzpicture、 に沿って、 だけでなく もpath置くことができます。nodepic

ここに画像の説明を入力してください

\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}

関連情報