如何在报告中声明类似于摘要的新环境?

如何在报告中声明类似于摘要的新环境?

也有人问过类似的问题,但没有一个能回答我的具体问题。

我试图在报告中声明一个与该环境类似的新环境abstract。我查看了代码report.cls并找到了该环境的定义abstract

\if@titlepage
  \newenvironment{abstract}{%
      \titlepage
      \null\vfil
      \@beginparpenalty\@lowpenalty
      \begin{center}%
        \bfseries \abstractname
        \@endparpenalty\@M
      \end{center}}%
     {\par\vfil\null\endtitlepage}
\else
  \newenvironment{abstract}{%
      \if@twocolumn
        \section*{\abstractname}%
      \else
        \small
        \begin{center}%
          {\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}%
        \end{center}%
        \quotation
      \fi}
      {\if@twocolumn\else\endquotation\fi}
\fi

test在我的文档中,我以相同的方式声明了环境,并按照我将使用的方式使用它abstract

\documentclass[]{report}

\newcommand\testname{Test}

\newenvironment{test}{%
    \small
    \begin{center}%
        {\bfseries \testname\vspace{-.5em}\vspace{\z@}}%
    \end{center}%
    \quotation}
    {\endquotation}

\begin{document}

\begin{test}
Test
\end{test}

\end{document}

这会导致以下错误:

./test.tex:15: Undefined control sequence. [\begin{test}]
./test.tex:15: Missing number, treated as zero. [\begin{test}]
If you can't figure out why I needed to see a number,:15: Illegal unit of measure . [\begin{test}]

我知道问题出在这里,\z@但我不明白为什么以及如何解决这个问题。

答案1

由于定义涉及@字符(类别代码为12),因此需要将其括在 之中\makeatletter,在定义期间\makeatother将其类别代码更改为,定义结束后再改回 :1112

\documentclass[]{report}

\newcommand\testname{Test}

\makeatletter
\newenvironment{test}{%
    \small
    \begin{center}%
        {\bfseries \testname\vspace{-.5em}\vspace{\z@}}%
    \end{center}%
    \quotation}
    {\endquotation}
\makeatother

\begin{document}

\begin{test}
Test
\end{test}

\end{document}

如果\z@您使用0pt,则不需要\makeatletter\makeatother

\documentclass[]{report}

\newcommand\testname{Test}

\newenvironment{test}{%
    \small
    \begin{center}%
        {\bfseries \testname\vspace{-.5em}\vspace{0pt}}%
    \end{center}%
    \quotation}
    {\endquotation}

\begin{document}

\begin{test}
Test
\end{test}

\end{document}

然而,更简单的方法是:

\documentclass[]{report}

\newcommand\testname{Test}
\newenvironment{test}
  {\renewcommand\abstractname{\testname}\begin{abstract}}
  {\end{abstract}}

\begin{document}

\begin{test}
Test
\end{test}

\end{document}

相关内容