我已经开始使用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}