我正在尝试编写一些宏来制作 tikz-cd 交换图。在 tikz-cd 中,您可以在逗号分隔的列表中为箭头提供“向左弯曲”或“虚线”等选项:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[ \begin{tikzcd}
A \arrow[bend left, dotted]{r}{f^*} & B
\end{tikzcd} \]
\end{document}
这样就没问题了!但是因为我想编写宏,所以我想做一些事情,比如把这些参数放在字符串中。所以我尝试了以下方法:
\documentclass{article}
\usepackage{tikz-cd}
\newcommand{\arrowformatting}{bend left, dotted}
\begin{document}
\[ \begin{tikzcd}
A \arrow[\arrowformatting]{r}{f^*} & B
\end{tikzcd} \]
\end{document}
但这会中断;tikz-cd 将整个字符串解释为一个参数并忽略逗号,从而给出错误
!软件包 pgfkeys 错误:我不知道键 '/tikz/bend left, dotted',我将忽略它。也许你拼错了。
我如何定义一个字符串\arrowformatting
以便 tikz-cd 能够正确解释逗号?
答案1
这会起到一定作用,但如果您每次都限制自己直接输入,那么治疗可能比疾病更糟糕。
\documentclass{article}
\usepackage{tikz-cd}
\newcommand{\arrowformatting}{bend left, dotted}
\begin{document}
\[ \begin{tikzcd}
A \expandafter\arrow\expandafter[\arrowformatting]{r}{f^*} & B
\end{tikzcd} \]
\end{document}
也许这个替代方案会适合,创建\xarrow
,它在发出之前扩展下一个标记\arrow
:
\documentclass{article}
\usepackage{tikz-cd}
\edef\arrowformatting{bend left, dotted}
\def\xarrow{\expandafter\arrow\expandafter}
\begin{document}
\[ \begin{tikzcd}
A \xarrow[\arrowformatting]{r}{f^*} & B
\end{tikzcd} \]
\[ \begin{tikzcd}
A \xarrow{r}{f^*} & B
\end{tikzcd} \]
\end{document}
如果后一种方法在没有可选参数的情况下存在问题(我认为不应该),那么这里有另一种更安全的形式。但是,它需要语法
A \xarrow\arrowformatting{r}{f^*} & B
不带括号\arrowformatting
:
\documentclass{article}
\usepackage{tikz-cd}
\edef\arrowformatting{\expandafter[bend left, dotted]}
\def\xarrow{\expandafter\arrow}
\begin{document}
\[ \begin{tikzcd}
A \xarrow\arrowformatting{r}{f^*} & B
\end{tikzcd} \]
\[ \begin{tikzcd}
A \xarrow{r}{f^*} & B
\end{tikzcd} \]
\end{document}