我认为以下两个代码表达的是同一件事。然而,第二段代码却引发了错误。
我的问题是:如何使第二个代码与第一个代码一样可行。也就是说,如何使选项multicols
接受来自宏的值。
\documentclass{article}
\usepackage{listings,multicol}
\parindent0pt
\begin{document}
Code 1:
\begin{minipage}{3in}
\begin{lstlisting}[multicols={},frame=single]
aa bb
cc dd
ee
\end{lstlisting}
\end{minipage}
Code 2:
\def\aaa{}
\begin{minipage}{3in}
\begin{lstlisting}[multicols=\aaa,frame=single]
aa bb
cc dd
ee
\end{lstlisting}
\end{minipage}
\end{document}
答案1
您可以修改键的定义multicols
。
\documentclass{article}
\usepackage{listings,multicol}
\makeatletter
% use \edef rather than \def
\lst@Key{multicols}{}{\@tempcnta=0#1\relax\edef\lst@multicols{#1}}
\makeatother
\parindent0pt
\begin{document}
Code 1:
\begin{lstlisting}[multicols={},frame=single]
aa bb
cc dd
ee
\end{lstlisting}
Code 2:
\def\aaa{}
\begin{lstlisting}[multicols=\aaa,frame=single]
aa bb
cc dd
ee
\end{lstlisting}
\end{document}