我想创建一个类似于的“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}