在环境中嵌套列表

在环境中嵌套列表

我正在尝试定义一个外部环境lstlisting(用作quotation示例)。我试过:

\newenvironment{quotelst}{%
\begin{quotation}
\begin{lstlisting}[]
}{%
\end{lstlisting}
\end{quotation}
}

\lstnewenvironment{lstquote}{%
\begin{quotation}
}{%
\end{quotation}
}

两者都不起作用(no legal \end found),尽管这个可以正常工作:

\begin{quotation}
  \begin{lstlisting}
    some code
  \end{lstlisting}
\end{quotation}

我怀疑Verbatim与此有关,但我在论坛上找不到答案(尽管有很多相关问题)。这可行吗?

答案1

如果你希望环境有更大的余地,你可以使用listings特征。你也可以用 来做quotation,但我看不出有什么优势。不管怎样,诀窍是使用“命令形式”,\quotation\endquotation

您会注意到 的间距非常宽,因为 LaTeX在 的间距中quotation添加了 适当的间距。quotationlstlisting

在这两种情况下,我都为底层lstlisting环境的选项定义了一个可选参数。我使用它来添加一个显示实际边距的框。

\documentclass{article}
\usepackage{listings}

\usepackage{lipsum} % for mock text

\lstset{basicstyle=\ttfamily,columns=fullflexible,breaklines}

\lstnewenvironment{lstquote}[1][]
 {\lstset{#1}\quotation}
 {\endquotation}

\lstnewenvironment{lstnarrow}[1][]
 {\lstset{xleftmargin=\leftmargini,xrightmargin=\leftmargini,#1}}
 {}

\begin{document}

\lipsum[1][1-5]

\begin{lstquote}[escapeinside=@@]
aaaaaaa bbbbbbbb ccccccccc dddddddddddd eeeeeeeeee fffff
@\makebox[\linewidth][s]{x\hfil x}@
\end{lstquote}

\lipsum[2][1-5]

\begin{lstnarrow}[escapeinside=@@]
aaaaaaa bbbbbbbb ccccccccc dddddddddddd eeeeeeeeee fffff
@\makebox[\linewidth][s]{x\hfil x}@
\end{lstnarrow}

\lipsum[3][1-5]

\end{document}

在此处输入图片描述

相关内容