대답하려고 했는데질문그러나 제가 조판하고 싶은 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]\&\\ar[dl]\\
\
\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_height
PGF/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) 화살표를 추가했습니다 .라이브러리
matrix
는left delimiter
및right 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]\&\\ar[dl] \ar[ll, bend right, overlay]\\
\
\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]\&\\ar[dl]\\
\
\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]\&\\ar[dl]\\
\
\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]\&\\ar[dl]\\
\
\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}