tikz-cd 和 etoolbox 的问题

tikz-cd 和 etoolbox 的问题

我已经开始使用tikz-cd,似乎与切换的交互存在问题。特别是,当我尝试向图表添加第二个“列”时,代码中断。更具体地说,这

\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz-cd}
\newtoggle{mytoggle}
\toggletrue{mytoggle}

\begin{document}

Hello
\iftoggle{mytoggle}{
\begin{tikzcd}
X
\end{tikzcd}
}{goodbye}

\end{document}

X可以,但如果我用替换该行X & Y,我的代码将无法编译,并且会出现一堆“未定义的控制序列。 }{goodbye}”和“程序包 pgf 错误:单个 & 符号与错误的 catcode 一起使用。 }{goodbye}”。有什么建议吗?

答案1

tikz-cd使用与 TikZ 矩阵相同的机制,因此&当图表位于另一个命令的参数中时无法使用。

\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz-cd}
\newtoggle{mytoggle}
\toggletrue{mytoggle}

\begin{document}

Hello
\iftoggle{mytoggle}{%
  \begin{tikzcd}[ampersand replacement=\&]
  X \arrow[r] \& Y
  \end{tikzcd}
}{goodbye}

\end{document}

将工作。

答案2

环境tikzcd会更改类别代码&并使其处于活动状态。在另一个宏的参数中,环境已被读取,类别更改来得太晚了。这也是为什么逐字命令在其他参数的宏中不起作用的原因。

可以使用 TeX 开关作为解决方法:

documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz-cd}
\newtoggle{mytoggle}
\toggletrue{mytoggle}

\begin{document}

Hello
\iftoggle{mytoggle}{\iftrue}{goodbye\iffalse}%
\begin{tikzcd}
X & Y
\end{tikzcd}
\fi

\end{document}

结果

相关内容