答案1
您实际上并不想使用该center
环境,但主要问题是&
:
\newcommand{\fork}[6]{%
\begin{tikzcd}[ampersand replacement=\&]
#1 \arrow[r, "#2"] \& #3 \arrow[r,shift left, "#4"]
\arrow[r,shift right, "#5"'] \& #6
\end{tikzcd}%
}
ampersand replacement
每次Ti钾Z 矩阵(例如tikzcd
图表)用于另一个命令的参数。
在显示环境中使用它,比如
\[
\fork{K}{k}{A}{f}{0}{B}
\]
这是处理均衡器和共均衡器图的另一个建议。图中的每个项目都使用键值方法定义(如果您愿意,可以使用不同的键);指示*
绘制共均衡器图。与大多数键值方法一样,键的顺序无关紧要。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\usepackage{xparse}
\ExplSyntaxOn
\keys_define:nn { soap/forks }
{
s .tl_set:N = \l__soap_fork_source_tl,
t .tl_set:N = \l__soap_fork_target_tl,
e .tl_set:N = \l__soap_fork_end_tl,
u .tl_set:N = \l__soap_fork_up_tl,
d .tl_set:N = \l__soap_fork_down_tl,
c .tl_set:N = \l__soap_fork_center_tl,
* .bool_set:N = \l__soap_fork_co_bool,
* .default:n = true,
}
\NewDocumentCommand{\fork}{m}
{
\keys_set:nn { soap/forks } { #1 }
\begin{tikzcd}[ampersand~replacement=\&]
\bool_if:NF \l__soap_fork_co_bool
{% false, equalizer
\l__soap_fork_end_tl
\arrow[r,"\l__soap_fork_center_tl"] \&
}
\l__soap_fork_source_tl
\arrow[r,shift~left,"\l__soap_fork_up_tl"]
\arrow[r,shift~right,"\l__soap_fork_down_tl",swap] \&
\l__soap_fork_target_tl
\bool_if:NT \l__soap_fork_co_bool
{% true, coequalizer
\arrow[r,"\l__soap_fork_center_tl"] \&
\l__soap_fork_end_tl
}
\end{tikzcd}
}
\ExplSyntaxOff
\begin{document}
\begin{gather}
\fork{s=A,t=B,e=K,u=f,d=0,c=k}
\\
\fork{*,s=A,t=B,e=K,u=f,d=0,c=k}
\end{gather}
\end{document}