自定义环境移至章节末尾

自定义环境移至章节末尾

我编写了一个自定义example环境来格式化数学算例。这些算例目前包含在与其相关的部分中,但有时看起来有点混乱。

我正在考虑将所有示例分组放在每章末尾。您能想出一种简单的方法让我重写自定义环境,以便将所有文本移动到每章末尾,并按书写顺序显示它们吗?(我想这有点像一些尾注包!)

谢谢!

编辑- 在评论中添加请求的 MWE...

\documentclass{book}
\usepackage[english]{babel}
\usepackage{blindtext}


%%%%% SET UP THE ENVIRONMENT HERE %%%%%
\newcounter{examplecounter}
\setcounter{examplecounter}{0}
    \newenvironment{example}[1]{
        \refstepcounter{examplecounter}%
        \vspace{3mm}\hspace{3mm}\\%
        \noindent\rule{\textwidth}{0.07cm}\\%
        \textbf{Worked Example \arabic{examplecounter}: #1}\\
    }{
        \hfill\\%
        \noindent\rule{\textwidth}{0.07cm}
    }


\begin{document}
    \chapter{First Chapter}
        \blindtext

        \begin{example}{Some are several pages}
           \blindtext[10]
        \end{example}

        \section{First Section}
            \blindtext
            \begin{example}{Others are shorter}
                Second Example
            \end{example}
\end{document}

答案1

下列的艾伦·芒恩的评论,这里有一个可能的选项,使用newfloatendfloatcaption包:首先,我们声明一个新的浮动环境example,然后我们将该环境声明为延迟感知环境。

可以使用带有空参数example的定制版本来获取每个的标题。\caption

添加了一些选项,以允许同一页面中出现多个对象,并防止在每组延迟示例的开头自动生成示例列表;在文档开头仅生成一个列表,使用\listofexamples

使用\processdelayedfloats,可以在每章末尾处理示例,并且由于重新定义\chapter沃纳,这是自动完成的。

代码:

\documentclass{report}
\usepackage{caption}
\usepackage{newfloat}
\usepackage[nomarkers]{endfloat}

% the delayed floats will be automatically processed at the end of each chapter
\let\oldchapter\chapter
\renewcommand\chapter{%
  \processdelayedfloats%
  \oldchapter}
\AtEndDocument{\processdelayedfloats}

\DeclareFloatingEnvironment{example}
\DeclareDelayedFloat{example}{Examples}

 % we allow several floats per page
\renewcommand\efloatseparator{\mbox{}}
% no automatic list of examples; it will be manually generated with \listofexamples
\SetupDelayedFloat{example}{nolist}

% captions flushed to the left margin and boldfaced
\captionsetup[example]{singlelinecheck=off,labelfont=bf,skip=.4\baselineskip}

\begin{document}
\listofexamples

\chapter{Test Chapter One}
\begin{example}
\caption{}
Test example one.
\end{example}

\begin{example}
\caption{}
Test example two.
\end{example}

\chapter{Test Chapter Two}
\begin{example}
\caption{}
Test example three.
\end{example}

\begin{example}
\caption{}
Test example four.
\end{example}

\end{document}

并获得的文件:

enter image description here

enter image description here

enter image description here

现在,原始问题中已经添加了附加信息,很明显我之前的建议没有用,因为有些示例可能包含分页符,而浮动对象不允许它们。

现在可能的解决方案是使用collect来自collect包;下面是其用法的一个例子。

我们声明exa集合并定义一个example使用该collect环境的新环境;的两个强制参数collect用于格式化(见下面的注释)。etoolbox包用于修补\includecollection,因此该命令将以无编号章节的形式生成标题。

\documentclass[openany]{book}% openany just for the example
\usepackage{etoolbox}
\usepackage{collect}
\usepackage{lipsum}

\definecollection{exa}
\newcounter{examplecounter}[chapter]

\makeatletter
\newenvironment{example}[1]
  {\@nameuse{collect}{exa}{%
    \refstepcounter{examplecounter}
    \vspace{3mm}%
    \noindent\rule{\textwidth}{0.07cm}\par\nobreak\noindent
    \textbf{Worked Example \arabic{examplecounter}: #1}\par
    }{%
    \par\nobreak\vskip.1\baselineskip\noindent\rule{\textwidth}{0.07cm}%
    }
  }%
  {\@nameuse{endcollect}}
\makeatother

\pretocmd{\includecollection}{\chapter*{Examples for Chapter~\thechapter}}{}{}

\begin{document}

\chapter{First Chapter}
\lipsum[2]

\begin{example}{Some are several pages}
\lipsum[1-6]
\end{example}

\section{First Section of Chapter One}
\lipsum[2]

\begin{example}{Others are shorter}
\lipsum[2]
\end{example}

\includecollection{exa}

\chapter{Second Chapter}
\lipsum[2]

\begin{example}{Another short example}
\lipsum[2]
\end{example}

\section{First Section of Chapter Two}
\lipsum[2]

\begin{example}{Another long example}
\lipsum[1-6]
\end{example}

\includecollection{exa}

\end{document}

输出图像:

enter image description here

enter image description here

enter image description here

我保留了原始定义的水平规则,但如果示例要收集到每章末尾的单独一节中,则这些规则是多余的,可以删除。

相关内容