Information about documentclass and packages in use is needed for ensuring that the abstract environment is not redefined in a way which provides problems and pitfalls with copying those underlying definitions that form the environment.
Using just the article-class from LaTeX 2ε with no extra packages, you can repeat the abstract-environment as many times as you wish.
If you wish, you can redefine the macro \abstractname
between the single instances of that environment:
\documentclass{article}
\begin{document}
\begin{abstract}
This is an abstract.
\end{abstract}
\renewcommand\abstractname{Another abstract}
\begin{abstract}
This is another abstract.
\end{abstract}
\section{\dots}
\end{document}
Using just the article-class from LaTeX 2ε with no extra packages, you can—via \let
and \csname..\endcsname
—assign the meanings of the macros \abstract
and \endabstract
to macros \abstract2
and \endabstract2
. Then you have two environments. But they share the same placeholder-macros, i.e., things like \abstractname
.
As the abstract
-environment of the article class does not take arguments, you can with this documentclass easily hack \abstractname
to check for the name of the surrounding abstract-environment and deliver name-phrases accordingly:
\documentclass{article}
\makeatletter
%\show\abstract
\newcommand\@currabs[2]{#2#1}%
\expandafter\renewcommand\expandafter\abstract\expandafter{%
\romannumeral0\expandafter
\@currabs\expandafter{\abstract}{ \let\@currabs=\@currenvir}%
}%
%\show\abstract
\renewcommand\abstractname{%
\csname abstract\ifx\@currabs\abstractthreeenvname three\else
\ifx\@currabs\abstracttwoenvname two\else
one%
\fi
\fi
name\endcsname
}
\makeatother
\expandafter\newcommand\csname abstract2\endcsname{}%
\expandafter\let\csname abstract2\endcsname=\abstract
\expandafter\let\csname endabstract2\endcsname=\endabstract
\expandafter\newcommand\csname abstract3\endcsname{}%
\expandafter\let\csname abstract3\endcsname=\abstract
\expandafter\let\csname endabstract3\endcsname=\endabstract
\newcommand*\abstracttwoenvname{abstract2}
\newcommand*\abstractthreeenvname{abstract3}
\newcommand*\abstractonename{Abstract}
\newcommand*\abstracttwoname{Abstract Two}
\newcommand*\abstractthreename{Abstract Three}
\begin{document}
\begin{abstract}
This is an abstract.
\end{abstract}
\begin{abstract2}
This is another abstract.
\end{abstract2}
\begin{abstract3}
This is yet another abstract.
\end{abstract3}
\section{\dots}
\end{document}
I give no warranties that this also works with documentclasses other than article and/or with whatsoever additional packages loaded.