复制抽象环境并重命名其标题

复制抽象环境并重命名其标题

我想重命名抽象环境的标题,但不丢失原始环境。我正在考虑将环境复制到名为 abstract2 的新环境,然后在其中重命名标题。

目前我只是使用

\begin{abstract}
...
\end{abstract}

这怎么可能?

编辑:

\expandafter\let\csname abstract2\endcsname\abstract

\expandafter\let\csname endabstract2\endcsname\endabstract

将环境复制到 abstract2。我该如何重命名新环境的标题?以下方法通常有效,但它会重命名两者。

\renewcommand{\abstractname}{New Title}

编辑:我解决了这个问题,没有复制环境,而是在每个环境之前使用上面的命令,就像这样

\renewcommand{\abstractname}{New Title}
\begin{abstract}
...
\end{abstract}

答案1

细节取决于原始环境的定义方式,您没有提供任何信息,但这可能是可行的

\expandafter\let\csname abstract2\endcsname\abstract
\expandafter\let\csname endabstract2\endcsname\endabstract
\renewenvironment{abstract}{zz}{zzz}

答案2

需要有关正在使用的文档类和包的信息,以确保抽象环境不会以复制形成环境的底层定义的方式重新定义,从而产生问题和陷阱。

只需使用 LaTeX 2ε 中的文章类,无需额外的包,您就可以根据需要重复抽象环境多次。

如果愿意,您可以\abstractname在该环境的单个实例之间重新定义宏:

\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}

仅使用 LaTeX 2ε 中的 article-class 而无需额外的软件包,您可以通过\let\csname..\endcsname将宏\abstract和的含义分配\endabstract给宏\abstract2\endabstract2。然后您有两个环境。但它们共享相同的占位符宏,即类似的东西\abstractname
由于abstractarticle 类的环境不接受参数,您可以使用此 documentclass 轻松破解\abstractname以检查周围抽象环境的名称并相应地提供名称短语:

\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}

我不保证这也适用于除文章之外的文档类和/或任何附加加载的包。

在此处输入图片描述

答案3

这是针对该类article的,其他类可能需要不同的补丁。

\documentclass{article}

\usepackage{etoolbox}

\let\abstracttwo\abstract
\let\endabstracttwo\endabstract
\patchcmd{\abstracttwo}{\abstractname}{\abstracttwoname}{}{}
\patchcmd{\abstracttwo}{\abstractname}{\abstracttwoname}{}{}

\newcommand{\abstracttwoname}{Abstract Two}

\begin{document}

\begin{abstract}
This is the first abstract.
\end{abstract}

\begin{abstracttwo}
This is the second abstract.
\end{abstracttwo}

\end{document}

在此处输入图片描述

然而,您可能只是想要不同语言的几篇摘要:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french,italian,english]{babel}

\begin{document}

\begin{abstract}
This is the English abstract.
\end{abstract}

\begin{otherlanguage}{french}
\begin{abstract}
Voici le résumé en français.
\end{abstract}
\end{otherlanguage}

\begin{otherlanguage}{italian}
\begin{abstract}
Questo è il sommario in italiano.
\end{abstract}
\end{otherlanguage}

\end{document}

在此处输入图片描述

具有更友好的语法:没有可选参数,则使用主语言。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french,italian,english]{babel}
\usepackage{xparse}

\let\latexabstract\abstract
\let\latexendabstract\endabstract
\RenewDocumentEnvironment{abstract}{o}
 {\IfValueT{#1}{\otherlanguage{#1}}\latexabstract}
 {\latexendabstract\IfValueT{#1}{\endotherlanguage}}

\begin{document}

\begin{abstract}
This is the English abstract.
\end{abstract}

\begin{abstract}[french]
Voici le résumé en français.
\end{abstract}

\begin{abstract}[italian]
Questo è il sommario in italiano.
\end{abstract}

\end{document}

相关内容