私は答えようとしていた質問しかし、私がタイプセットしたい 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行の図の場合、ノードのベースラインが周囲のテキストのベースラインに一致するように配置されます。
他の図の場合、そのベースラインはマトリックスの中心(画像全体ではない)になります。ええ= デフォルトでは 0 pt です。
これは通常、図が独自の行 (環境内などfigure
) にあるか、display-math 環境の唯一の要素であるため、適切な選択です。
インライン ダイアグラムの場合、ボックスを上に移動して、マトリックスの中心がそのブレースの突起の高さにくるようにする必要があります。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
インライン図用。
ノードとマトリックスが密集しているものの、矢印の左側にノードのパディングが少し残るように、内部と外部のセパレータを自由に調整しました。ラベル、つまり矢印に沿ったノードを使用できるようにするには、ラベルをまたはデフォルトouter sep
に設定する必要があります。0pt
.5\pgflinewidth
ノート:
overlay
ブレースの測定方法に影響しない、曲がった(ただし ed)矢印を追加しました。ライブラリはと を
matrix
提供します。ただし、/ は区切り文字の正確な長さを出力せず、ライブラリは区切り文字をやや不運な場所に配置するため、TikZ が区切り文字を配置する方法を調整せずにここでこれらを使用することはできません。left delimiter
right delimiter
\left
\right
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でも見られます。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}