![在书中定义抽象环境](https://linux22.com/image/254183/%E5%9C%A8%E4%B9%A6%E4%B8%AD%E5%AE%9A%E4%B9%89%E6%8A%BD%E8%B1%A1%E7%8E%AF%E5%A2%83.png)
我想为 定义一个抽象环境。因此,我从中\documentclass{book}
复制了相关定义report.cls
这里到我的序言中。但是它不起作用。问题出在哪里?
\documentclass[11pt, a4paper]{book}
\usepackage{lipsum}
\makeatletter
\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
\makeatother
\begin{document}
\begin{titlepage}
\begin{abstract}
\lipsum[1]
\end{abstract}
\end{titlepage}
\chapter{This and That}
\lipsum[2]
\end{document}
我知道网上有很多关于如何在书本课程中撰写摘要的解决方案。我主要感兴趣的是为什么我的定义环境的解决方案在技术上不起作用。
答案1
您在环境中使用\abstractname
,但 latex 不知道它。这是您得到的错误。因此定义它解决了这个问题。您必须\abstractname
通过以下方式定义
\newcommand\abstractname{Abstract}
您的 MWE 将成为:
\documentclass[11pt, a4paper]{book}
\usepackage{lipsum}
\newcommand\abstractname{Abstract} %%% here
\makeatletter
\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
\makeatother
\begin{document}
\begin{titlepage}
\begin{abstract}
\lipsum[1]
\end{abstract}
\end{titlepage}
\chapter{This and That}
\lipsum[2]
\end{document}