在 \newcommand 中使用 \usebox

在 \newcommand 中使用 \usebox

我有这个代码:

%Abstracts
\newcommand{\@spanishabstractname}{{\bfseries Resumen}}
\newsavebox\@sabstract
\newenvironment{spanishabstract}{%
    \lrbox\@sabstract\minipage{1\textwidth}\selectlanguage{spanish}\itshape}%
    {\endminipage\endlrbox\normalfont}

\newcommand{\@englishabstractname}{{\bfseries Abstract}}
\newsavebox\@eabstract
\newenvironment{englishabstract}{%
    \lrbox\@eabstract\minipage{1\textwidth}\selectlanguage{english}\itshape}%
    {\endminipage\endlrbox\normalfont}

%Making Title
\newcommand{\maketitle}{%
    \twocolumn[%
    {\centering \@spanishabstractname\par}\linespace
    \noindent\usebox{\@sabstract}\par\linespace
    \@skeyw\par\onecmskip
    {\centering \@englishabstractname\par}\linespace
    \noindent\usebox{\@eabstract}\par\linespace
    \@ekeyw
    ]
}

\maketitle但是当我在文档中使用命令时,不会显示框\@sabstract\@eabstract,如下所示。

使用 maketitle

如果我将代码定义\maketitle放在\AtEndDocument

\AtEndDocument{%
    \twocolumn[%
    {\centering \@spanishabstractname\par}\linespace
    \noindent\usebox{\@sabstract}\par\linespace
    \@skeyw\par\onecmskip
    {\centering \@englishabstractname\par}\linespace
    \noindent\usebox{\@eabstract}\par\linespace
    \@ekeyw
    ]
}

一切都很完美!

在此处输入图片描述

我该如何修复这个问题?为什么错了?谢谢!

答案1

该框是在组(环境)中定义的,因此在组外不可用。您需要全局设置它:

\newcommand{\@spanishabstractname}{{\bfseries Resumen}}
\newsavebox\@sabstract
\newenvironment{spanishabstract}
  {\begin{lrbox}{8}
   \minipage{1\textwidth}\selectlanguage{spanish}\itshape}
  {\endminipage\end{lrbox}\global\setbox\@sabstract\box8 }

英文摘要亦同。

不建议使用\lrbox和。我会把指令放在后面( 之后),而不是 的定义中。\endlrbox\bfseries\centering\@spanishabstractname

答案2

我尝试创建一个 MWE,其中以下命令我不知道:

  • \@ekeyw
  • \@skeyw
  • \linespace

这里是 MWE

\documentclass{article}
\usepackage[spanish,english]{babel}
\usepackage{blindtext}
\makeatletter
%Abstracts
\newcommand{\@spanishabstractname}{{\bfseries Resumen}}
\newsavebox\@sabstract
\newenvironment{spanishabstract}{%
    \lrbox\@sabstract\minipage{1\textwidth}\selectlanguage{spanish}\itshape}%
    {\endminipage\endlrbox\normalfont}

\newcommand{\@englishabstractname}{{\bfseries Abstract}}
\newsavebox\@eabstract
\newenvironment{englishabstract}{%
    \lrbox\@eabstract\minipage{1\textwidth}\selectlanguage{english}\itshape}%
    {\endminipage\endlrbox\normalfont}

%Making Title
\renewcommand{\maketitle}{%
    \twocolumn[%
    {\centering \@spanishabstractname\par}
    \noindent\usebox{\@sabstract}\par
    \par
    {\centering \@englishabstractname\par}
    \noindent\usebox{\@eabstract}\par
    ]
}
\makeatother

\begin{document}
\begin{spanishabstract}
\blindtext
\end{spanishabstract}
\begin{englishabstract}
\blindtext
\end{englishabstract}

\maketitle
\end{document}

相关内容