列表中选项 multicols 的行为

列表中选项 multicols 的行为

我认为以下两个代码表达的是同一件事。然而,第二段代码却引发了错误。

我的问题是:如何使第二个代码与第一个代码一样可行。也就是说,如何使选项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}

在此处输入图片描述

相关内容