递归 QCircuit 图 - “缺失数字视为零”

递归 QCircuit 图 - “缺失数字视为零”

我想以递归方式绘制一个巨大的 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}

相关内容