我在基于 ( 的)环境中排版了很多列表 (使用包listings
) 。这很有效,但是当我将选项传递给列表时,它就中断了:array
tabular
numbers=
\documentclass{article}
\usepackage{listings}
\usepackage{array}
\begin{document}
\begin{tabular}{p{8cm}}
% The following works if you remove the numbers=left option
\begin{lstlisting}[language=C,basicstyle=\ttfamily, numbers=left, gobble=4]
int main(){
printf("Hello, Bug\n");
}
\end{lstlisting}
\end{tabular}
\end{document}
失败并显示错误消息:
Runaway definition?
#1\\left\unskip \relax \@endpbox \hskip \col@sep
! Forbidden control sequence found while scanning definition of \lst@temp.
<inserted text>
}
l.9 ...sicstyle=\ttfamily, numbers=left, gobble=4]
知道是什么原因导致了这个问题吗?
是否有可能的解决方法(除了外部装箱或回退到\lstinputlisting
)?
答案1
该问题似乎可以通过将lstlisting
环境放在括号中来解决:
\begin{tabular}{p{8cm}}
{\begin{lstlisting}[language=C,basicstyle=\ttfamily, numbers=left, gobble=4]
int main(){
printf("Hello, Bug\n");
}
\end{lstlisting}}
\end{tabular}
似乎没有括号的宏列表走得“太远”,并尝试查看完成表格单元格的内部标记(TeXbook 称之为\endtemplate
,但它实际上无法以任何方式写入文档中)。线索确实是“发现禁止的控制序列”消息。