在类函数中终止环境中的环境

在类函数中终止环境中的环境

我正在为文档编写一个类,该类继承自article,我遇到了一个问题:文档应该全部分为两列,摘要除外。对于这两列,我使用了包multicol

asbtract 也会显示在两列中,我的第一次尝试是将 .cls 文件中的抽象环境重新定义为下一个:

\renewenvironment{abstract}
{\end{multicols}\begin{center}{\scshape Resúmen}\end{center} }
{\begin{multicols}{2}}

和...一起:

\AtBeginDocument{\begin{multicols}{2}}
\AtEndDocument{\end{multicols}}

我认为这会“暂停”多列环境,让摘要位于一列中。

第一个问题是我收到错误:

! LaTeX Error: \begin{abstract} on input line 9 ended by \end{multicols}.
! LaTeX Error: \begin{multicols} on input line 11 ended by \end{abstract}.

因此,它不是放在\end{multicols}我认为它应该在的位置,而是放在之前\end{abstract},等等。

第二个问题是,如果删除所有内容,标题也会\maketitle出现在一列中。

我该怎么做?比如在定义的环境中暂停多列环境?如果做不到,我希望能有其他更优雅的解决方案。

我希望它尽可能独立于文件.tex。也就是说,我可以multicol在文件中的文本中写入环境tex,但我希望文件.cls能够处理这个问题。

谢谢

答案1

不要在家里做这个;-)

诀窍是让fake当前环境multicols在 的开始时就处于 状态abstract,然后停止多列环境,正确设置抽象环境并使用包\AfterEndDocumentetoolbox恢复\begin{multicols}{2}

\documentclass{article}


\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage{blindtext}
\usepackage{etoolbox}

\makeatletter
\let\latexabstractend\endabstract

\renewenvironment{abstract}
{\def\@currenvir{multicols}\end{multicols}\def\@currenvir{abstract}\begin{center}{\scshape \abstractname}\end{center} }
{\latexabstractend}%

\AfterEndEnvironment{abstract}{\begin{multicols}{2}}

\AtBeginDocument{\begin{multicols}{2}}
\AtEndDocument{\end{multicols}}

\begin{document}
\blindtext
\begin{abstract}
\blindtext
\end{abstract}

\blindtext

\end{document}

在此处输入图片描述

答案2

如果您想考虑使用twocolumndocumentclass 的选项,那么您可以使用包(bundle)中的@twocolumnfalse环境或环境。stripcutedsttools

@twocolumnfalse 环境:

\documentclass[a4paper, twoside, spanish]{article}%
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel} 
\usepackage{geometry}
\usepackage{fourier, erewhon}
\usepackage{lipsum}
\title{A nice title}
\author{Ye author}
\date{\today}
\setlength\columnsep{3em}

\begin{document}

\twocolumn[%
  \begin{@twocolumnfalse}
    \maketitle
    \begin{abstract}
      This is a test for an abstract in a two column environment. This is a test for an abstract in a two column environment. This is a test for an abstract in a two column environment. This is a test for an abstract in a two column environment.
    \end{abstract}
    \vskip2\baselineskip
  \end{@twocolumnfalse}

]% {%

  \lipsum[1-6]

}%

\end{document} 

在此处输入图片描述

剥离环境: \documentclass[a4paper, twocolumn, twoside, spanish]{article}% \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{babel} \usepackage{geometry} \usepackage{fourier, cuted, erewhon} \usepackage{lipsum} \title{一个不错的标题} \author{Ye author} \date{\today} \setlength\columnsep{3em}

\begin{document}

\begin{strip}
  \vspace*{\dimexpr-\baselineskip-\stripsep\relax}
  \centering
  \maketitle
  \begin{abstract}
    \begin{minipage}{0.9\linewidth}
      This is a test for an abstract in two column mode. This is a test for an abstract in two column mode. This is a test for an abstract in two column mode. This is a test for an abstract in two column mode. This is a test for an abstract in two column mode.
    \end{minipage}
  \end{abstract}
  \vskip2\baselineskip
\end{strip}

\lipsum[1-6]

\end{document} 

在此处输入图片描述

相关内容