报告类摘要中的罗马数字

报告类摘要中的罗马数字

我想为除标题页之外的所有页面添加罗马页码,直到目录末尾。因此我做了以下操作,除了摘要没有任何页码外,该操作有效。

\begin{document}
\pagenumbering{roman}
\maketitle

\include{abstract}

\tableofcontents

\newpage
\pagenumbering{arabic}

abstract.tex文件包含\begin{abstract}\end{abstract}

所以我尝试按照这个问题的解决方案这里这似乎在问同样的问题。

在我的摘要 tex 文件中我输入了:

\begin{abstract}
\thispagestyle{plain} 

My abstract...

\end{abstract}

这确实会将页面“i”添加到摘要页面。但是,问题在于罗马数字部分中的后续页面(例如目录)也会再次获得页面“i”(即在更改为阿拉伯数字之前)。

所以本质上我得到的是:

摘要 - 第 i 页,目录 - 第 i 页

虽然我想要

摘要 - 第 i 页,目录 - 第 ii 页

为什么计数器重置为 1(在更改为阿拉伯数字之前)而不是从摘要中的位置继续?

答案1

\pagenumbering- 更改应在之后进行\clearpage(除非这是开始后立即进行的第一次更改)

\pagenumbering总是将页面计数器重置为1,参见定义

\def\pagenumbering#1{%
  \global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
   \c@page}}

\global\c@page \@ne基本上是Plain TeX为了\setcounter{page}{1}

现在真正的罪魁祸首report是它设置了titlepage选项,即在内部abstract使用titlepage环境,该环境被定义为在最后重置页码。一些代码来自latex.ltx

\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

\if@compatibility
\newenvironment{titlepage}
    {%
      \if@twocolumn
        \@restonecoltrue\onecolumn
      \else
        \@restonecolfalse\newpage
      \fi
      \thispagestyle{empty}%
      \setcounter{page}\z@
    }%
    {\if@restonecol\twocolumn \else \newpage \fi
    }
\else
\newenvironment{titlepage}
    {%
      \if@twocolumn
        \@restonecoltrue\onecolumn
      \else
        \@restonecolfalse\newpage
      \fi
      \thispagestyle{empty}%
      \setcounter{page}\@ne
    }%
    {\if@restonecol\twocolumn \else \newpage \fi
     \if@twoside\else
        \setcounter{page}\@ne
     \fi
    }
\fi

这是真正的代码

titlepage如果重新定义为满足 OP 的特殊需求,通过设置\@abstractmode为 true 并设置页面样式并相应地调整页面计数器,但在环境结束时不要重置页面计数器,则可以解决整个问题titlepage

\documentclass{report}

\usepackage{etoolbox}
\makeatletter
\newif\if@abstractmode

\renewenvironment{titlepage}
{
  \if@twocolumn
  \@restonecoltrue\onecolumn
  \else
  \@restonecolfalse\newpage
  \fi
  \if@abstractmode
  \thispagestyle{plain}%
  \stepcounter{page}%
  \else
  \thispagestyle{empty}%
  \setcounter{page}\@ne%
  \fi
}%
{\if@restonecol\twocolumn \else \newpage \fi
  \if@twoside\else
  \if@abstractmode
  \else
  \setcounter{page}\@ne%
  \fi
  \fi
}

\AtBeginEnvironment{abstract}{%
  \@abstractmodetrue%
}


\makeatother



\usepackage{blindtext}
\title{Theory of Brontosaurs}
\author{Ann Elk}
\begin{document}
\pagenumbering{roman}
\maketitle
\clearpage
\begin{abstract}
\blindtext[2]
\end{abstract}
\tableofcontents
\cleardoublepage
\pagenumbering{arabic}

\section{First}
\blindtext[10]
\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容