我编写了一个自定义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
下列的艾伦·芒恩的评论,这里有一个可能的选项,使用newfloat
,endfloat
和caption
包:首先,我们声明一个新的浮动环境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}
并获得的文件:
现在,原始问题中已经添加了附加信息,很明显我之前的建议没有用,因为有些示例可能包含分页符,而浮动对象不允许它们。
现在可能的解决方案是使用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}
输出图像:
我保留了原始定义的水平规则,但如果示例要收集到每章末尾的单独一节中,则这些规则是多余的,可以删除。