중괄호 사이의 TikZcd 문제

중괄호 사이의 TikZcd 문제

대답하려고 했는데질문그러나 제가 조판하고 싶은 TikZcd는 중괄호 사이에 수직으로 위치가 잘 맞지 않습니다(문제를 더 잘 보여주기 위해 빨간색 선이 그려져 있습니다).

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}

\usepackage{tikz-cd}
\newcommand{\tricd}[3]{%
    \begin{tikzcd}[
        ampersand replacement=\&, 
        every matrix/.append style={nodes={inner sep=0pt, draw=red}, draw=red}, 
        row sep=0pt,
        column sep=10pt,
        ]
        #1\ar[rr]\ar[dr]\&\&#2\ar[dl]\\
        \&#3
    \end{tikzcd}%
    }
    
\begin{document}
Why is the Ti\emph{k}Zcd not well
vertically aligned between braces? \(
\left\{\tricd{X}{Y}{Z}\right\}
\)
\end{document}

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

답변1

TikZ 그림이 생성되면 기준선에 있는 경계 상자의 가장 낮은 지점이 있는 상자일 뿐입니다.

TikZ-CD는 이 기본값을 덮어씁니다. 1행 다이어그램의 경우 노드의 기준선이 주변 텍스트의 기준선에 위치하도록 배치됩니다.
다른 다이어그램의 경우 기준선은 매트릭스의 중심(전체 그림이 아님)이 됩니다.와이= 기본적으로 0pt입니다.

다이어그램이 자체 라인(예: 환경 figure)에 있거나 디스플레이 수학 환경의 유일한 요소이기 때문에 이는 일반적으로 좋은 선택입니다.

인라인 다이어그램의 경우 행렬의 중심이 버팀대 너브 높이에 오도록 상자를 위로 이동해야 합니다. TikZ-CD는 axis_heightPGF/TikZ 내부에서 이 거리를 사용할 수 있는 PGFMath 기능을 제공합니다 .

따라서, 당신은 필요합니다

baseline={([yshift=-axis_height]\tikzcdmatrixname)}
% or, if no vertical shifting of the matrix has been applied, just
baseline=-axis_height

인라인 다이어그램용.


노드와 행렬이 촘촘하게 채워지도록 일부 내부 및 외부 sep를 자유롭게 조정했지만 노드에는 여전히 왼쪽 화살표에 대한 약간의 패딩이 있습니다. 레이블, 즉 화살표를 따라 있는 노드를 사용할 수 있어야 하는 경우 해당 레이블을 기본값 outer sep으로 다시 설정해야 합니다 .0pt.5\pgflinewidth

노트:

  • overlay교정기 측정 방법을 방해하지 않는 구부러진(그러나 ed) 화살표를 추가했습니다 .

  • 라이브러리 matrixleft delimiterright delimiter. 그러나 \left/는 \right구분 기호의 정확한 길이를 출력하지 않으며 라이브러리는 구분 기호를 다소 불운하게 배치하기 때문에 TikZ가 배치하는 방법을 조정하지 않고는 여기에서 사용할 수 없습니다.

    TikZ의 구분 기호를 사용한 솔루션은 아래 코드에 설명되어 있습니다.

암호

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{tikz-cd}
%\makeatletter
%\tikzset{better delimiters/.style={
%  /tikz/every left delimiter/.append style={at=(\tikz@last@[email protected]),anchor=east},
%  /tikz/every right delimiter/.append style={at=(\tikz@last@[email protected]),anchor=west}}}
%\makeatother
\newcommand{\tricd}[3]{%
  \begin{tikzcd}[
    baseline={([yshift=-axis_height]\tikzcdmatrixname)},
    ampersand replacement=\&,
%    /tikz/better delimiters,
    every matrix/.append style={% https://tex.stackexchange.com/a/653533/16595
%      left delimiter=\{, right delimiter=\},
      every outer matrix/.append style={inner sep=+0pt, outer sep=+0pt},
      cells={nodes={inner sep=+0pt, outer sep=+.15em, draw=red}},
      draw=red},
    row sep=0pt, column sep=10pt]
    #1\ar[rr]\ar[dr]\&\&#2\ar[dl] \ar[ll, bend right, overlay]\\
    \&#3
  \end{tikzcd}}
\begin{document}
Why is the Ti\emph{k}Zcd not well vertically aligned between braces?
\( \left\{ \tricd{X}{Y}{Z} \right\} \)
\end{document}

산출

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

답변2

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

\left\{\begin{array}[t]... X가 기준선에 정렬되어 구조의 깊이가 크지만 \{수직 중앙에 위치하는 것과 동일한 것을 볼 수 있습니다 . Tikz의 기준선을 살짝 이동합니다.

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}

\usepackage{tikz-cd}
\newcommand{\tricd}[3]{%
    \begin{tikzcd}[
baseline=-2pt,
        ampersand replacement=\&, 
        every matrix/.append style={nodes={inner sep=0pt, draw=red}, draw=red}, 
        row sep=0pt,
        column sep=10pt,
        ]
        #1\ar[rr]\ar[dr]\&\&#2\ar[dl]\\
        \&#3
    \end{tikzcd}%
    }
    
\begin{document}
Why is the Ti\emph{k}Zcd not well
vertically aligned between braces? \(
\left\{\tricd{X}{Y}{Z}\right\}
\)
\end{document}

답변3

사용 gathered.

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{tikz-cd}

\newcommand{\tricd}[3]{%
  \begin{gathered}%
    \begin{tikzcd}[
        ampersand replacement=\&,
        every matrix/.append style={nodes={inner sep=0pt}},
        row sep=0pt,
        column sep=10pt,
        ]
        #1\ar[rr]\ar[dr]\&\&#2\ar[dl]\\
        \&#3
    \end{tikzcd}%
  \end{gathered}%
}

\begin{document}

The Ti\emph{k}Zcd is well
vertically aligned between braces! \(
\left\{\tricd{X}{Y}{Z}\right\}
\)

\end{document}

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

답변4

\vcenter{\hbox{...}}주위에 추가할 수 있습니다 tikzcd.

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

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}

\usepackage{tikz-cd}
\newcommand{\tricd}[3]{%
    \vcenter{\hbox{\begin{tikzcd}[
        ampersand replacement=\&, 
        every matrix/.append style={nodes={inner sep=0pt, draw=red}, draw=red}, 
        row sep=0pt,
        column sep=10pt,
        ]
        #1\ar[rr]\ar[dr]\&\&#2\ar[dl]\\
        \&#3
    \end{tikzcd}}}%
    }
    
\begin{document}
Why is the Ti\emph{k}Zcd not well
vertically aligned between braces? \(
\left\{\tricd{X}{Y}{Z}\right\}
\)
\end{document}

관련 정보