在 tikz(cd) 图表中插入方程标签

在 tikz(cd) 图表中插入方程标签

我有以下通勤图,我想将方程标签作为(幻影)边标签插入到图内(此处的标签不起作用,它是伪代码):

\begin{tikzcd}
      A \arrow["h",dr] \arrow[dd,"j"'] \arrow["f",rr] & \arrow[d,phantom, "\label{eq:foo}" description] & B\arrow[dl, "g"] \\
      \arrow[r,phantom, "\label{eq:bar}" description]& C \\
      D\arrow[ru,"k"]
    \end{tikzcd}

我希望它看起来是这样的:

在此处输入图片描述

有办法吗?基本上,我想使用不同的方程式引用来引用通勤图的不同部分。

答案1

最简单的解决方案是tikzcd使用未编号的显示数学环境,即equation*\[ … \],我们只放置其中带有方程编号的节点。

这似乎兼容hyperref但需要调整cleveref(然后我们也许能够为这些参考文献引入一个单独的类别)。

所有这些宏都是amsmath内部的:

  • \@eqnwstrue在没有方程式数字的数学环境中切换方程式数字的输出
  • \make@display@tag打印实际的方程编号和
  • \ltx@label是在原有的\label宏之前amsmath添加了自己的修改。

代码

\documentclass{article}
\usepackage{tikz, amsmath}
\usetikzlibrary{cd}
\makeatletter
\tikzcdset{
  eq node/.style={
    commutative diagrams/math mode=false, anchor=center},
  eq/.style={
    phantom,
    /tikz/every to/.append style={
      edge node={node[commutative diagrams/eq node]
        {\@eqnswtrue\make@display@tag\ltx@label{#1}}}}}}
\makeatother
\begin{document}
\[
\begin{tikzcd}
A       \arrow["h", dr] \arrow[dd,"j"'] \arrow["f",rr]
  &     \arrow[d, eq=eq:foo]
    & B \arrow[dl, "g"] \\
        \arrow[r, eq=eq:bar]
  & C \\
D       \arrow[ru,"k"]
\end{tikzcd}
\]
Equations \ref{eq:foo} and \eqref{eq:bar}.
\end{document}

输出

在此处输入图片描述

相关内容