我試著回答一個問題但是我想要排版的 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 行圖,其放置方式應使節點的基線位於周圍文字的基線上。
對於任何其他圖表,其基線將是矩陣的中心(而不是整個圖片),這也是y預設 = 0 分。
這通常是一個不錯的選擇,因為圖表要么在自己的行上(例如在環境中figure
),要么是顯示數學環境的唯一元素。
對於內聯圖,需要將框向上移動,以便矩陣的中心位於該支撐塊的高度。 TikZ-CD 附帶了 PGFMath 函數axis_height
,可讓您在 PGF/TikZ 內部使用此距離。
因此,您將需要
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
經過編輯的)箭頭,它不會幹擾大括號的測量方式。圖書館
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
您會看到與 X 相同的情況,\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}