花括号之间的 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 会覆盖此默认值。对于单行图,它将以节点基线位于周围文本基线上的方式放置。
对于任何其他图,其基线将是矩阵的中心(而不是整个图片),这也是= 默认为 0 pt。

这通常是一个不错的选择,因为图表要么位于其自己的行上(例如在环境中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

在此处输入图片描述

你会看到相同的情况,\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}

相关内容