如何制作递归宏

如何制作递归宏

下面是一个递归排版的简单例子,运行代码时出现(a)(b)(c)(d)错误信息,这是哪里出了问题?ERROR: LaTeX Error: \begin{document} ended by \end{)}.

\documentclass{article}
\begin{document}
\newcommand\RecursiveTraversal[1]{(#1)\RecursiveTraversal}
\RecursiveTraversal{a}{b}{c}{d}\relax
\end{document}

答案1

定义递归宏没有错,但你必须编写一种方法来中断递归。我猜你想要类似的东西

\documentclass{article}
\begin{document}
\newcommand\RecursiveTraversal[1]{\ifx#1\relax\else(#1)\expandafter\RecursiveTraversal\fi}
\RecursiveTraversal{a}{b}{c}{d}\relax
\end{document}

在此处输入图片描述

答案2

请注意,您应该始终查看来自 TeX 的实际错误消息,而不是来自编辑器的一些损坏的“摘要”,因为 TeX 提供了更多信息。

错误是

! LaTeX Error: \begin{document} ended by \end{)}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.5 \end
        {document}
? 

在出现错误时显示 TeX 已经读取\end(但还没有读取)。{document}

正如 campa 所示,你还没有终止递归,所以最终你已经达到了

\RecursiveTraversal\end{document}

所以#1也是\end如此

(\end)\RecursiveTraversal

(然后执行 \end)此typesets\end{)}并引发

! LaTeX Error: \begin{document} ended by \end{)}.

相关内容