如何在 \lstnewenvironment 中使用多个参数

如何在 \lstnewenvironment 中使用多个参数

我怎样才能将多个可选参数传递给\lstnewenvironment

我只需要固定数量的选项,所有选项都会出现。

我想将frame类型和font size作为参数传递给我的自定义lstlisting

更新

我当前的定义。我目前正在传递font size。我还需要frame类型(例如singleleftline等等)

\lstnewenvironment{pyout}[1][\tiny]{
    \lstset{ %
            basicstyle=\ttfamily#1\setstretch{1},
            showstringspaces=false,
            upquote=true,
            aboveskip=0pt,
            belowskip=2pt,
            breaklines=true,
            frame=leftline,
    }
}{}

答案1

您可以添加一个新fontsize密钥:

\documentclass{article}

\usepackage{listings,setspace,textcomp}

\makeatletter
\newif\ifATOfontsize
\lst@Key{fontsize}{\tiny}{\def\ATOfontsize{#1}\global\ATOfontsizetrue}
\makeatother

\lstnewenvironment{pyout}[1][]{%
  \global\ATOfontsizefalse
  \lstset{%
    basicstyle=\ttfamily\tiny\setstretch{1},
    showstringspaces=false,
    upquote=true,
    aboveskip=0pt,
    belowskip=2pt,
    breaklines=true,
    frame=leftline,
    #1,
    }
  \ifATOfontsize
    \lstset{basicstyle=\ttfamily\ATOfontsize\setstretch{1}}
  \fi
  }{}

\begin{document}
\begin{pyout}[fontsize=\normalsize]
abc
\end{pyout}
\begin{pyout}[frame=single]
abc
\end{pyout}
\begin{pyout}[fontsize=\normalsize,frame=single]
abc
\end{pyout}
\end{document}

如果指定了键,\lstset则会执行第二个命令,用于设置字体大小。

在下图中我只减少了文本宽度。

在此处输入图片描述

相关内容