将工作代码转换为宏会导致“缺少数字,视为零 --- \let”

将工作代码转换为宏会导致“缺少数字,视为零 --- \let”

这是一个最小工作示例(MWE):

\documentclass{scrartcl}

\usepackage{listings}

\begin{document}

\noindent\minipage[t]{0.45\linewidth}
\lstlisting
  foo
\endlstlisting
\endminipage \qquad \minipage[t]{0.45\linewidth}
\lstlisting
  bar
\endlstlisting
\endminipage

\end{document}

由于我经常使用这种模式(左边的代码转换为右边的代码),所以像一个优秀的程序员一样,我将其封装在一个宏中:

\newcommand{\twocol}[2]{
\noindent\minipage[t]{0.45\linewidth}
  #1
\endminipage \qquad \minipage[t]{0.45\linewidth}
  #2
\endminipage
}

然后在我的文档中尝试一下:

\twocol{
\lstlisting
  foo
\endlstlisting
}{
\lstlisting
  bar
\endlstlisting
} %% line 33, see below

此时 LaTeX 就会不高兴:

! Missing number, treated as zero.
<to be read again> 
    \let 
l.33 }

第 33 行是 的结束括号twocol。这只是一个简单的文本替换(我复制粘贴了列表命令),那么出了什么问题,我该如何修复它?

注意:\begin{} ... \end{}到处使用表格并没有帮助。

答案1

那么按照如下方式逐一构建它怎么样:

\documentclass{scrartcl}

\usepackage{listings}

\newenvironment{twocol}{\noindent\minipage[t]{0.45\linewidth}}{\endminipage}  
\newcommand{\twcbr}{\endminipage\qquad\minipage[t]{0.45\linewidth}}

\begin{document}

\begin{twocol}
\lstlisting
  foo
\endlstlisting
\twcbr
\lstlisting
  bar
\endlstlisting
\end{twocol}

\end{document}

相关内容