让两个节点占据一个节点的空间

让两个节点占据一个节点的空间

我想要排版一个像下图这样的格子;在左边,两个节点似乎占据与它们上方的节点相同的水平间距,但仍然可以独立地绘制往返于它们之间的箭头。

倒数第二排间距不均匀的格子

如果我使用虚拟列

\begin{tikzcd}[column sep = tiny]
    &&& &&& &G \\
    &&& &&\<\sigma^2, \tau\>& &\<\sigma\> &&\<\sigma^2, \tau\sigma\> \\
    &&\<**\>& &&\<\sigma^4, \tau\>& &\<\sigma^2\> &&\<**\>& &&\<**\> \\
    &\<\tau \sigma^2\>&&\<**\> &\<**\>&&\<\tau\> &\<\sigma^4\> \\
    &&& &&& &{\bf 1}
\end{tikzcd}

那么它就太宽了。 格子过宽

答案1

\subnode以下是一个解决方案tikzmark包/库。这将需要remember picture密钥并将一些行写入文件.aux。(有一种解决方案可以做到这一点,而无需所有这些,但使用标签,但这tikzmark使得它非常简单并且易于适应两个以上的子节点。)

使用宏\twoparts可以排版一个节点,但tikzmark库会围绕两个部分创建伪节点(名称与实际节点相同,但带有后缀-l和)。稍后可以使用/ / /-r引用这些名称,而无需明确为这些节点指定自定义名称(或弄清楚它们实际上位于哪个单元格中)。from leftfrom rightto leftto right

各部分之间用空格隔开(请注意~),但您可以随意设置。也许用\quad可以更好地区分两个部分。

这一切意味着我们仍然可以使用正常的\ar目标规范,ldru但只需要指定我们想要源或目标单元格的左侧还是右侧。

为了更容易地指定这些箭头,我定义了几个键:

  • to left/ to right
  • from left/ from right
  • to Left与 相同,to left但选择南锚点。 也一样to Right。(我认为当边缘来自顶部时,没有必要相同。)这些是针对此用例的,因为这些连接的角度有点不幸(源图像也是如此)。

我还定义了\ar快捷方式,因为您总是需要到两个子节点的边。

  • \tolr向两个子节点添加边,
  • \toLR添加边缘两个子节点,但选择south这些子节点处的锚点。

与业务无关\subnode,但我还添加了\ldrar在源单元格的左、中、右“子”单元格上绘制边缘。

我正在使用适当的 LaTeX 宏\mathbf\bf不是1

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{cd,tikzmark}
\def\<#1\>{\langle#1\rangle}% I guess …
\newcommand*{\twoparts}[3][]{%
  \subnode[#1]{\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn-l}{#2}~%
  \subnode[#1]{\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn-r}{#3}}
\makeatletter
\tikzcdset{
  from left/.style={from/.expanded=\tikzcd@ar@start-l},
  from right/.style={from/.expanded=\tikzcd@ar@start-r},
  to left/.style={to/.expanded=\tikzcd@ar@target-l},
  to right/.style={to/.expanded=\tikzcd@ar@target-r},
}
\makeatother
\tikzcdset{
  to Left/.style={to left, end anchor=south},
  to Right/.style={to right, end anchor=south},
  install my shortcuts/.code={%
    \newcommand*\ldrar{\dlar\dar\drar}%
    \newcommand*\tolr[1][]{\ar[##1,to left]\ar[##1,to right]}%
    \newcommand*\toLR[1][]{\ar[##1,to Left]\ar[##1,to Right]}%
  }
}
\begin{document}
\begin{tikzcd}[
  remember picture,
  column sep = tiny,
  arrows=-, crossing over clearance=3pt,
  install my shortcuts]
  & & G \ldrar \\
  & \<\sigma^2, \tau\> \ldrar 
    & \<\sigma\>  \dar
      & \<\sigma^2, \tau\sigma\> \ldrar  \\
\<**\> \tolr[d]
  & \<\sigma^4, \tau\> \tolr[d]\drar
    & \<**\> \dar
      & \<**\>  \dlar
        & \<**\> \ar[dll] \\
\twoparts{\<\tau \sigma^2\>}{\<**\>}
  & \twoparts{\<**\>}{\<\tau\>}
    & \<\sigma^4\> \dar  \ar[ull, crossing over] \\
  & & \mathbf{1} \toLR[ul]\toLR[ull]
\end{tikzcd}
\end{document}

输出

在此处输入图片描述

相关内容