我有一个使用 amsthm 的新定理定义的环境 thm,其中一个定理有多个小代码 (lstlisting) 和文本。这个定理大约占了 2/3 页,我希望整个定理包含在一页内。
我最初的解决方案是将整个定理包含在一个小页面中,这是成功的。问题是现在分页符很糟糕,我希望我的定理是浮动的。
我的第一个直觉是使用
\usepackage{float}
\newfloat{floatingstuff}{t}{lop}
\floatname{floatingstuff}{}
但:
- 我无法编译。似乎我的定理中的列表标题和标签会破坏将其包含在浮点中。
- 我不需要额外的标题或名称。我希望使用 floatingstuff 不会为我的整个定理引入额外的标题……我真的希望使用通过 newtheorem 定义的定理。
因此,我正在寻找一个除了改变元素位置外几乎不做任何事情的浮动环境。但我还没有找到,尽管浮动可能基于它...
如果有人知道如何定义这样的环境,我们将不胜感激。
[编辑] afterpage 解决方案是一个很好的解决方案,但我无法让它工作。下面给出了一个不起作用的简化代码。评论列表或 afterpage 都可以。
\documentclass{article}
\usepackage{amsthm}
\newtheorem{thm}{Theorem}
\usepackage{afterpage} % for '\afterpage' macro
\usepackage{lipsum}
\usepackage{listings}
\usepackage{afterpage}
\usepackage{xcolor}
\lstdefinestyle{def}{
language=C++,
mathescape,
belowcaptionskip=1\baselineskip,
breaklines=true,
literate={<-}{$\leftarrow{}$}{2},
literate={<>}{$\ne{}$}{2},
frame=none,
numbers=none,
basicstyle=\footnotesize\ttfamily,
keywordstyle=\bfseries\color{green!40!black},
commentstyle=\itshape\color{purple!40!black},
identifierstyle=\color{blue},
backgroundcolor=\color{gray!10!white},
emphstyle={[2]\ttfamily\bfseries\color{blue!50!black}},
emphstyle={[1]\color{orange!70!black}},
}
\lstset{style=def}
\begin{document}
\lipsum[1-4]
\afterpage{
\begin{thm}[$insts_P^{abs}(expr, ctx), relevant(a_{var}, \omega)$] $\ $\\\label{alg:cell:inst}
\begin{lstlisting}[language=caml, mathescape, caption={Instantiation heuristic for cell abstraction.}, label={lst:insts:cell}]
let $insts_P^{abs}$ expr ctx =
let $a_{var}$ = new_variable () in (* We need $a_{var}$ to be unused in expr and ctx*)
let R = relevant $a_{var}$ ($a_{var} = expr \wedge \neg ctx$) in
ler R' = filter (fun e -> e $\ne \top$) R in (*We remove $\top$*)
if R = [] then [(($\bot$, expr[$\bot$]), ())] (*We need $R$ non-empty*)
else map (fun e -> ((e, expr[e]), ())) R
Blabla
\end{lstlisting}
Some result about this function
\bigskip
\begin{lstlisting}[language=caml, mathescape, caption={Computation of a relevant set of cells for basic array theory.}, label={lst:relevant}]
let relevant $a_{var}$ $\omega$ =
(*We add two parameters that we set in first position
to keep track of full context and visited variables*)
relevant_impl $\omega$ [] $a_{var}$ $\omega$
Blabla
\end{lstlisting}
Some result about this function
\end{thm}
\clearpage}
\lipsum[1-3]
\end{document}