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}

여기에 이미지 설명을 입력하세요

사용하지 않은 매개변수로 명령을 정의했습니다. 그러한 매개변수가 필요하다고 가정해 보겠습니다. 그렇다면 \saveboxes는 불편합니다. 그러므로 나는 대안을 추가합니다: 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

a 안에 를 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}

관련 정보