我正在尝试定义一个外部环境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
添加了 适当的间距。quotation
lstlisting
在这两种情况下,我都为底层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}