最初的愚蠢解决方案

最初的愚蠢解决方案

我知道我可以使用\thepage来获取当前页码。但是我想打印出上一页的页码。我该怎么做?

背景:
我没有为文档的第一页编号,而希望从第二页开始编号为 1。但是我无法\setcounter{page}{1}在该网站上使用,因为我希望每个机制(即包bindingoffsetgeometry)都将页码视为第一页有数字 1。简而言之,我希望将(当时)偶数页码的页面视为奇数页,反之亦然。

答案1

您可以使用以下表达式获取上一页的页码: \the\numexpr\value{page}-1\relax

答案2

使用\thepage不能保证得出当前页的编号。

例子:

\documentclass{article}

\usepackage{lipsum} % for mock text

\setlength{\textheight}{2cm} % to make smaller pictures

\begin{document}

\lipsum*[2] \\
--\thepage-- is wrong

\end{document}

在此处输入图片描述

您需要使用\label-\ref机制来确保正确性。

\documentclass{article}
\usepackage{refcount}

\usepackage{lipsum} % for mock text

\newcounter{printpagecount}
\newcommand{\printpage}[1]{%
  \refstepcounter{printpagecount}%
  \label{\theprintpagecount}%
  \the\numexpr\getpagerefnumber{\theprintpagecount}+(#1)\relax
}

\setlength{\textheight}{2cm} % to make smaller pictures

\begin{document}

\lipsum*[2] \\
\printpage{0} (current) and \printpage{-1} (previous)

\end{document}

在此处输入图片描述

如果您的目的是通过在左侧放置奇数页而在右侧放置偶数页来使读者感到困惑,那么只需进行适当的定义\thepage

\documentclass[twoside,a5paper]{article}
\usepackage{geometry}

\usepackage{lipsum} % for mock text

\renewcommand{\thepage}{\the\numexpr\value{page}-1\relax}


\begin{document}

\thispagestyle{empty}

\lipsum[1-30]


\end{document}

在此处输入图片描述

A5 纸仅用于制作较小的图片。

答案3

我意识到我最初这样做的方式有点愚蠢并且完全没有必要......

您可以暂时更改页面计数器的值并调用\thepage。谁知道我在想什么。当时可能已经是深夜了。

\documentclass{article}
\newcommand{\thepagelessone}{%
  \addtocounter{page}{-1}%
  \thepage
  \stepcounter{page}}
\begin{document}
\setcounter{page}{5}
\verb|\thepage|: \thepage; \verb|\thepagelessone|: \thepagelessone

\pagenumbering{roman}
\setcounter{page}{7}
\verb|\thepage|: \thepage; \verb|\thepagelessone|: \thepagelessone
\end{document}

输出


最初的愚蠢解决方案

这是一个使用的解决方案expl3。它可以正确处理各种页码样式(阿拉伯文、罗马文等)。

它的工作原理是先展开\thepage一次,然后对结果进行去标记化。当前页码 ( \c@page) 将从标记列表的末尾删除,并用此数字减一替换。

\documentclass{article}
\usepackage{xparse}
\makeatletter
\ExplSyntaxOn
\tl_new:N \l__raven_thepage_tl
\int_new:N \l__raven_page_int
\cs_new:Nn \__raven_page_less_one:n
  {
    \tl_set:Nn \l__raven_thepage_tl { #1 }
    \tl_remove_once:Nn \l__raven_thepage_tl { \c@page }
    \int_set_eq:NN \l__raven_page_int \c@page
    \int_decr:N \l__raven_page_int
    \tl_put_right:Nn \l__raven_thepage_tl { \l__raven_page_int }
    \tl_use:N \l__raven_thepage_tl
  }
\cs_generate_variant:Nn \__raven_page_less_one:n { o }
\NewDocumentCommand \thepagelessone { }
  {
    \__raven_page_less_one:o { \thepage }
  }
\ExplSyntaxOff
\makeatother
\begin{document}
\setcounter{page}{5}
\verb|\thepage|: \thepage; \verb|\thepagelessone|: \thepagelessone

\pagenumbering{roman}
\setcounter{page}{7}
\verb|\thepage|: \thepage; \verb|\thepagelessone|: \thepagelessone
\end{document}

相关内容