大括號之間的 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 行圖,其放置方式應使節點的基線位於周圍文字的基線上。
對於任何其他圖表,其基線將是矩陣的中心(而不是整個圖片),這也是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 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

在此輸入影像描述

您會看到與 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]\&\&#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}

相關內容