verbatim 环境或 lstlisting 作为 newenvironment 的一部分,具有 samepage 和 \ill?

verbatim 环境或 lstlisting 作为 newenvironment 的一部分,具有 samepage 和 \ill?

我想创建一个类似于的“codeillustration”环境:

\newenvironment{codeillustration}[1]{
\begin{samepage}
{\ill{#1}}
\VerbatimEnvironment
\begin{Verbatim}{\end{Verbatim}}
\end{samepage}
}

一个例子:

\codeillustration{Some great code.}{
  code = 'great'
  print(code)
}

会表现得像

\begin{samepage}
{\ill{Some great code.}}
\begin{verbatim}
  code = 'great'
  print(code)
\end{verbatim}
\end{samepage}

上面的Icodeillustration定义给出了以下错误:

! FancyVerb Error:
  Extraneous input `{\end {Verbatim}} \end {samepage} {' between \begin{samepag
e}[<key=value>] and line end
.
\FV@Error ... {FancyVerb Error:
\space \space #1
}

这可能意味着我不知道如何很好地编写乳胶宏。

我看见这个问题并阅读一些fancyvrb 文档,但我不知道该怎么做。我可以添加到自定义逐字环境,但如何进入并保持在同一页面上samepage=true并不明显。\ill

我也很乐意使用lstlisting示例而不是逐字逐句。我只想将\ill(编号标题)和代码放在同一页上。这些通常是简短的代码示例。

编辑

我刚刚在 lstlisting 包中看到这个获取背景颜色的示例(不同的问题,但显示了自定义这样的东西):

\begin{verbatimwrite}{temp.c}
/* the following code computes $\displaystyle\sum_{i=1}^{n}i$ */
for (i = 1; i <= limit; i++) {
sum += i;
}
\end{verbatimwrite}
\begin{mdframed}[backgroundcolor=yellow!10, rightline=false]
\lstinputlisting[language=C,mathescape,frame={}]{./temp.c}
\end{mdframed}

这让我也想将其包装lstlisting成一个newenvironment

我的观点是,我只想要自己的codeillustration环境,并且能够在不改变呼叫者的情况下使用设置。

编辑:注释\ill定义为

\newtheorem{ill}{Illustration}[chapter]

答案1

您正在定义一个环境并尝试使用命令。环境的工作方式并非如此。

\documentclass{book}
\usepackage{fancyvrb}

\newenvironment{codeillustration}[1]
 {\VerbatimEnvironment
  \par\begin{samepage}
  \begin{ill}#1\end{ill}
  \begin{Verbatim}
 }
 {\end{Verbatim}\end{samepage}}

\newtheorem{ill}{Illustration}[chapter]

\begin{document}

\chapter{title}

\begin{codeillustration}{Some great code}
code = 'great'
print(code)
\end{codeillustration}

\end{document}

在此处输入图片描述

相关内容