我想以递归方式绘制一个巨大的 QCircuit 图。所以我想要一个像这样的递归宏:
\documentclass{article}
\usepackage{qcircuit}
\newcommand\recurse[1]{
\ifnum1=#1
\gate{Y}
\else
\gate{X} & \recurse{\numexpr#1-1}
\fi
}
\begin{document}
\Qcircuit @C=1em @R=0.7em {
& \recurse{3}
}
\end{document}
这给了我几个错误,全部针对第 16 行:
Missing number, treated as zero.<to be read again> < }
Xy-pic error: in entry "1,5":No [0,-1] (is "1,4") from here....
Incomplete ifnum; all text was ignored after line 16.<inserted text>\fi
Missing } inserted.<inserted text>} }
但是,以下代码可以完美编译并执行预期的操作:
\documentclass{article}
\usepackage{qcircuit}
\newcommand\recurse[1]{
\ifnum1=#1
$Y$
\else
$X$, \recurse{\numexpr#1-1}
\fi
}
\begin{document}
\recurse{3}
\end{document}
我认为 Qcircuit 可能在宏完成输入所有文本之前尝试以某种方式构建电路表,因此构建的表太小。有什么方法可以解决这个问题吗?或者我应该放弃使用宏来做到这一点?
答案1
稍微重新排列一下递归:
\documentclass{article}
\usepackage{qcircuit}
\newcommand\recurse[2]{%%%
\ifnum1=#1\relax
\afterelse
#2&\gate{Y}%
\else
\afterfi
\recurse{\numexpr#1-1}{#2&\gate{X}}%
\fi}
\def\afterelse#1\else#2\fi{\fi#1}
\def\afterfi#1\fi{\fi#1}
\begin{document}
\Qcircuit @C=1em @R=0.7em {
\recurse{3}{}
}
\end{document}