如何改变 `\pageref` 单个实例的格式?

如何改变 `\pageref` 单个实例的格式?

由于某种原因,我需要将页码格式化为,S-\arabic但想要使用 来引用单个页面,\pageref而不包括S-前缀,而只是\arabic。如何做到这一点?

梅威瑟:

\documentclass{article}

\begin{document}

\renewcommand{\thepage}{S-\arabic{page}}

There is a total of \pageref{page:last page} page in the document.

\label{page:last page}

\end{document}

电流产生

平均能量损失

我希望这里的句子打印为“...总共 1 页...”。

答案1

这将从S-字符串中删除。由于\pageref受到保护,\getpagerefnumber因此请使用。

\documentclass{article}
\usepackage{refcount}% or hyperref
\usepackage{xstring}

\renewcommand{\thepage}{S-\arabic{page}}

\begin{document}

There is a total of {\StrDel{\getpagerefnumber{page:last page}}{S-}} page in the document.

\label{page:last page}

\end{document

答案2

您可以使用最新版本的 LaTeX \@abspage@last

当文件中尚未设置值时.aux\maxdimen将会返回,因此在这种情况下我使用??

\documentclass{article}

\renewcommand{\thepage}{S-\arabic{page}}

\makeatletter
\newcommand{\numberofpages}{%
  \ifnum\@abspage@last=\maxdimen ??\else\@abspage@last\fi
  ~page\ifnum\@abspage@last=1 \else s\fi
}
\makeatother

\begin{document}

There is a total of \numberofpages\ in the document.

\end{document}

在此处输入图片描述

(已编辑图像以使页码可见。)

如果您确实需要\label,您可以使用适当的钩子手动完成。

\documentclass{article}

\renewcommand{\thepage}{S-\arabic{page}}

\makeatletter
\AddToHook{shipout/lastpage}{%
  \protected@write\@auxout{}{\string\newlabel{LastPage}{{}{\arabic{page}}}}%
}
\makeatother

\textheight=1cm

\begin{document}

\label{test}

This is page \pageref{test}.

There is a total of \pageref{LastPage} pages in the document.

\end{document}

在此处输入图片描述

相关内容