将摘要文本作为宏提供

将摘要文本作为宏提供

有没有一种简单的方法可以让摘要的文本在宏中可用\theabstract?我可以使用以下代码执行此操作:

\documentclass{article}
\usepackage{collect}

\title{A test document}
\author{John Smith}
\date{\today}

\begin{document}
\maketitle
\begin{abstract}
\begin{collectinmacro}{\theabstract}{}{}
This is a test.
\end{collectinmacro}
\theabstract
\end{abstract}

The abstract is: \theabstract

\end{document}

不过,我更希望抽象代码简单一点,即:

\begin{abstract}
This is a test.
\end{abstract}

我尝试过使用\AtBeginEnvironment\AtEndEnvironmentfrom etoolbox(虽然我不太明白它们是如何工作的),并且重新定义了抽象环境,但没有成功。两者都返回错误! File ended while scanning use of \@tempa.。最小工作示例:

\documentclass{article}
\usepackage{collect,etoolbox}

\title{A test document}
\author{John Smith}
\date{\today}

\AtBeginEnvironment{abstract}{\begin{collectinmacro}{\theabstract}{}{}}
\AtEndEnvironment{abstract}{\end{collectinmacro}\theabstract}
% ! File ended while scanning use of \@tempa.

%\renewenvironment{abstract}{%
%\begin{collectinmacro}{\theabstract}{}{}
%}{%
%\end{collectinmacro}
%\theabstract
%}
% ! File ended while scanning use of \@tempa.

\begin{document}
\maketitle
\begin{abstract}
This is a test.
\end{abstract}

The abstract is: \theabstract

\end{document}

虽然我使用的是collect上述软件包,但我也愿意接受没有此软件包的解决方案。我通常使用 LuaLaTeX,因此 LuaTeX 解决方案会受到欢迎。

(当然也可以简单地编写\newcommand{\theabstract}{This is a test}然后放入\theabstract抽象环境中,但最终我希望抽象环境的代码与正常的相同。)

答案1

environ包裹。

\documentclass{article}
\usepackage{environ}

\title{A test document}
\author{John Smith}
\date{\today}
\let\svabstract\abstract
\let\svendabstract\endabstract
\RenewEnviron{abstract}{
  \svabstract\BODY\svendabstract
  \expandafter\gdef\expandafter\theabstract\expandafter{\BODY}
}
\begin{document}
\maketitle
\begin{abstract}
This is a test.
\end{abstract}

The abstract is: \theabstract
\end{document}

在此处输入图片描述

并不是说这种方法比上面给出的方法更好,但我想确保我可以使用tokcycle伪环境来实现,这需要稍微不同的调用语法。这种tokcycle方法只有在人们想要自动调整抽象内容时才有优势,例如:

\documentclass{article}
\usepackage{tokcycle}

\title{A test document}
\author{John Smith}
\date{\today}
\let\svabstract\abstract
\let\svendabstract\endabstract
\xtokcycleenvironment\abstract
{\if T\capnext\addcytoks{{\LARGE##1}}\else
  \addcytoks{##1}\fi\def\capnext{F}}
{\processtoks{##1}}
{\addcytoks{##1}\ifx\par##1\def\capnext{T}\fi}
{\addcytoks{##1}}
{\tcafterenv{\expandafter\def\expandafter\theabstract
  \expandafter{\the\cytoks}}\def\capnext{T}}
{\addcytoks{\svendabstract}\svabstract}

\begin{document}
\maketitle
\abstract
This is a test to see if the abstract is automatically adjusted
  to my specifications.

Multi-paragraphs.
\endabstract

The abstract is: \theabstract
\end{document}

在此处输入图片描述

答案2

使用较新版本的 LaTeX,它整合了的功能environ,但使管理更容易,并且具有强大的复制命令方法。

\documentclass{article}

\NewCommandCopy{\originalabstract}{\abstract}
\NewCommandCopy{\originalendabstract}{\endabstract}

\RenewDocumentEnvironment{abstract}{+b}
 {% save the contents
  \gdef\theabstract{#1}% 
  % now typeset the abstract
  \originalabstract
  #1%
 }
 {% finish
  \originalendabstract
 }

\begin{document}

\title{A test document}
\author{John Smith}
\date{\today}

\maketitle

\begin{abstract}
This is a test.
\end{abstract}

The abstract is: \theabstract

\end{document}

在此处输入图片描述

相关内容