tikzcd에 수동으로 셀 배치

Aug 22 2020

제 경우 에는 tikz-cd 다이어그램에서 수동 셀 이동을 시도 했지만 다이어그램이 너무 커지면 몇 가지 문제가 발생합니다.

내 원하는 다이어그램은 다음과 같습니다.

\documentclass[a41empaperpt]{article}
\usepackage{tikz-cd}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\begin{document}
\begin{equation}
    \begin{tikzcd}
    & S(F) \arrow[ddddl, "\operatorname{id}"']\arrow[dd, "\operatorname{pr}^*"] \arrow{rr} & &  F \arrow[dd, "\operatorname{pr}^*"]\rar{R} & Z(F) \arrow[ddddddl, bend left = 75, dotted, "\beta"]\arrow[dd, "\operatorname{pr}^*"] \\
    & & \circled{2} & & \\
    & IS(F) \arrow[ddl, "\partial_0^*", "\simeq"' ] \arrow[dddd, bend left = 90, "0", "\circled{3}"'] \arrow[dd, "\operatorname{id}"]\arrow[rr] & & I(F) \arrow[dddd, bend left = 30, "\partial_1^*-\partial_0^*"] \rar{R} & IZ(F) \arrow[ddddl, bend left = 45, dotted, "\alpha"]\\
    \\
    S(F) \arrow[ddr,  "0"']\arrow[r, "\operatorname{pr}^*", "\simeq"'] &[-10pt] IS(F) \arrow[dd, "\operatorname{\partial_1^*-\partial_0^*}"] &  & \circled{1} \\
    \\
    & S(F)\arrow[rr]  & & F
    \end{tikzcd}
\end{equation}
\end{document}

그러나 구부러진 화살표는 통과 \circled{3}합니다. 화살표와의 충돌을 피하기 위해 수동으로 왼쪽으로 이동하고 싶습니다. 편집 : 이제 구부러진 화살표가 충돌하지 않지만 \circled{3}다른 화살표 보다 작습니다.

연결된 질문을 사용하여 다음과 같이 할 수 있습니다.

\begin{equation}
\begin{tikzcd}
    & IS(F) \arrow[rrr] \arrow[d, "\operatorname{id}"]\arrow[dd, bend left = 75, "0"]&[-30pt] & & I(F)\\
    S(F) & IS(F) \arrow[d, "\partial_1^*-\partial_0^*"]&\circled{3}& \circled{1}& \\
    & S(F) &&& F \\
    \end{tikzcd} 
\end{equtation}

내가 맨 윗줄을 추가 할 때를 제외하고는 작동하는 것 같습니다.

\begin{equation}
\begin{tikzcd}
    & S(F) & F \\
    & IS(F) \arrow[rrr] \arrow[d, "\operatorname{id}"]\arrow[dd, bend left = 75, "0"]&[-30pt] & & I(F)\\
    S(F) & IS(F) \arrow[d, "\partial_1^*-\partial_0^*"]&\circled{3}& \circled{1}& \\
    & S(F) &&& F \\
    \end{tikzcd}
\end{equation}

도움을 주시면 감사하겠습니다!

답변

3 AndréC Aug 22 2020 at 00:27

주석에서 설명했듯이 문제는 \circled{3}셀에 배치되어 이동할 수 없다는 것입니다. 화살표에 두 번째 노드를 배치 3하여 원하는 위치 에 배치하십시오 . 이를 위해 스타일 circled 2이 생성됩니다.

변화를 볼 수 있도록 파란색으로 채색했습니다. 라는 스타일을 만들었습니다 circled 2. 코드는%<--

\documentclass[a41empaperpt]{article}
\usepackage{tikz-cd}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\tikzset{circled 2/.style={draw,circle,font=\normalsize,inner sep=2pt}}     %<-- new style circled 2
            
\begin{document}
\begin{equation}
    \begin{tikzcd}
    & S(F) \arrow[ddddl, "\operatorname{id}"']\arrow[dd, "\operatorname{pr}^*"] \arrow{rr} & &  F \arrow[dd, "\operatorname{pr}^*"]\rar{R} & Z(F) \arrow[ddddddl, bend left = 75, dotted, "\beta"]\arrow[dd, "\operatorname{pr}^*"] \\
    & & \circled{2} & & \\
    & IS(F) \arrow[ddl, "\partial_0^*", "\simeq"' ] \arrow[dddd,blue, bend left = 90, "0", "3"{circled 2,swap,xshift=-2pt}] \arrow[dd, "\operatorname{id}"]\arrow[rr] & & I(F) \arrow[dddd, bend left = 30, "\partial_1^*-\partial_0^*"] \rar{R} & IZ(F) \arrow[ddddl, bend left = 45, dotted, "\alpha"]\\
    \\
    S(F) \arrow[ddr,  "0"']\arrow[r, "\operatorname{pr}^*", "\simeq"'] &[-10pt] IS(F) \arrow[dd, "\operatorname{\partial_1^*-\partial_0^*}"] &  & \circled{1} \\
    \\
    & S(F)\arrow[rr]  & & F
    \end{tikzcd}
\end{equation}

\end{document}
3 LuisTurcio Aug 22 2020 at 00:57

나는 오류가 일부 추가에서 비롯된 것이라고 믿습니다 '. 나는 그것들을 삭제하고 당신의 코드에서 약간의 변경을 가했다. 당신은 쉽게 변화를 찾을 수있다 : some {name=...}, an |[alias=is]|. 키를 사용하여 원으로 표시된 숫자를 배치했습니다 phantom. 새 화살표 from S(F)to I(F)와 두 개의 화살표 끝에서 사용을 확인할 수 있습니다 .

\documentclass[a41empaperpt]{article}
\usepackage{tikz-cd}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
            
\begin{document}
\begin{equation}
\begin{tikzcd}[row sep=5em]
  & S(F)\arrow[rr] \arrow[d,"\operatorname{pr}^*"]
             \arrow[ddl,"\operatorname{id}"swap]
             \arrow[rrd,phantom,"\circled{2}"]
  && F\arrow[r,"R"]\arrow[d,"\operatorname{pr}^*"] 
  & Z(F)\arrow[d,"\operatorname{pr}^*"]
            \arrow[dddl, bend left = 75, dotted, "\beta"] \\ 
  &IS(F)\arrow[rr] \arrow[d,"\operatorname{id}"] 
             \arrow[dl,"\partial_0^*", "\simeq"swap]
             \arrow[dd,bend left = 90, "0"{name=0},""{name=o,left}]
  && I(F)\arrow[r,"R"]
       \arrow[dd,bend left = 30, "\partial_1^*-\partial_0^*",""{name=p,left}]
  & IZ(F)\arrow[ddl, bend left = 45, dotted, "\alpha"]\\
  S(F)\arrow[r,"\operatorname{pr}^*", "\simeq"swap] \arrow[dr,"0"swap]
  & |[alias=is]| IS(F)\arrow[d,"\operatorname{\partial_1^*-\partial_0^*}"]\\
  & S(F)\arrow[rr]
  && F
  \arrow[Rightarrow,from=0,to=p,phantom,"\circled{1}"]
  \arrow[Rightarrow,from=is,to=o,phantom,"\circled{3}"]
\end{tikzcd}
\end{equation}
\end{document}

원으로 표시된 숫자는 항상 해당 레이블 사이의 중앙에 표시됩니다. 배치하기 위해 추가 행이 필요하지 않습니다. 나는 또한 swap가장 왼쪽 화살표에 추가 했습니다. id0화살표가 삼각형 외부에 배치 되면 더 좋아 보인다고 생각합니다 .