使用字符串列出 tikz-cd 箭头的参数

使用字符串列出 tikz-cd 箭头的参数

我正在尝试编写一些宏来制作 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}

相关内容