在 setcounter{page} 中使用罗马页码

在 setcounter{page} 中使用罗马页码

我想使用标签的页码作为 的输入\setcounter{page}{label's page}。我尝试使用zref abspage,但是,在我的文档中,在我开始实际页码之前,有几页未计数,因此abspage偏移了 2 页。我也尝试使用newcommand和 变量,但无法使其正常工作。另一个障碍似乎是罗马风格的页码使其难以转换(使用 etoolbox 的 得到 -1 \rmntonum)。

在使用阿拉伯数字之前,如何使用放置在第一部分末尾的标签恢复罗马页码?解决方案应尽可能通用,即不减去硬编码偏移量。

\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}

\begin{document}
    this is my title
    \thispagestyle{empty}
    \newpage

    some declarations
    \thispagestyle{empty}
    \newpage

    \setcounter{page}{1}
    \pagenumbering{Roman}
    \tableofcontents
    \newpage

    \addcontentsline{toc}{chapter}{List of Figures}
    \listoffigures
    \label{end of intro}
    \newpage

    \pagenumbering{arabic}
    \chapter{chapter one}
    \lipsum[2-5]
    \cite{kastenholz}

    \chapter{chapter two}
    \lipsum[2-4]

    \clearpage
    \pagenumbering{roman}
    \setcounter{page}{3}    % <-- set this value based on label 'end of intro', zref abspage gives 4

    \addcontentsline{toc}{chapter}{References} 
    \printbibliography

\end{document}

答案1

你必须使用 吗\label?你也可以使用\newcount并使用它的值来设置你的计数器:

\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\newcount\pagebak

\begin{document}
    this is my title
    \thispagestyle{empty}
    \newpage

    some declarations
    \thispagestyle{empty}
    \newpage

    \setcounter{page}{1}
    \pagenumbering{Roman}
    \tableofcontents
    \newpage

    \addcontentsline{toc}{chapter}{List of Figures}
    \listoffigures
    \pagebak=\arabic{page}
    \label{end of intro}
    \newpage

    \pagenumbering{arabic}
    \chapter{chapter one}
    \lipsum[2-5]
    \cite{kastenholz}

    \chapter{chapter two}
    \lipsum[2-4]

    \clearpage
    \pagenumbering{roman}
    %\setcounter{page}{3}    % <-- set this value based on label 'end of intro', zref abspage gives 4
    \setcounter{page}{\numexpr\pagebak+1}    % <-- set this value based on label 'end of intro', zref abspage gives 4

    \addcontentsline{toc}{chapter}{References} 
    \printbibliography

\end{document}

答案2

这里有一种方法zref

\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}

\usepackage[nottoc]{tocbibind} % no need for \addcontentsline
\usepackage[user,abspage]{zref}

\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}

\usepackage{lipsum}

\makeatletter
\newcommand{\startfront}{\clearpage\pagenumbering{Roman}\zlabel{startfront}}
\newcommand{\startmain}{\clearpage\pagenumbering{arabic}\zlabel{startmain}}
\newcommand\startback{%
  \clearpage
  \pagenumbering{Roman}%
  \setcounter{page}{%
    \numexpr
      \zref@extractdefault{startmain}{abspage}{0}-
      \zref@extractdefault{startfront}{abspage}{0}+1
    \relax
  }%
}
\makeatother

\begin{document}

\thispagestyle{empty}
this is my title
\clearpage

\thispagestyle{empty}
some declarations
\clearpage

\startfront
\tableofcontents
\listoffigures

\startmain

\chapter{chapter one}
\lipsum[2-5]
\cite{kastenholz}

\chapter{chapter two}
\lipsum[2-4]

\startback

\printbibliography[heading=bibintoc]

\end{document}

详细信息隐藏在\startfront\startmain和中\startback

请注意,您不需要任何\addcontentsline说明。

在此处输入图片描述

相关内容