我有以下通勤图,我想将方程标签作为(幻影)边标签插入到图内(此处的标签不起作用,它是伪代码):
\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}