我有一份复杂的文档(实际上是一本书),其中有多种页码格式,这些页码基于书中的不同部分(罗马字母、阿拉伯字母,以及诸如 1*、[1] 和 <<1>> 之类的格式)。每个编号部分都从 1 重新开始,并以此格式进行区分。
目标是能够发出命令\label{item}
并让稍后\pageref{item}
提供格式化的页码。这些参考资料可能跨部门,因此我需要在页码编号的部分中获取像 3* 这样的参考资料,例如 [7]。
我之前问过两个关于索引的复杂问题,并找到了解决方案。然而,它们破坏了我使此引用起作用的方案。
我已经发出命令
\renewcommand{\thepage}{\arabic{page}*}
例如,在每个部分的开头。这既可以控制文档中页码的格式,也可以使\label
和做我想要的事情,但由于 makdindex 拒绝允许非数字页码,所以\pageref
不起作用- 直接写入 [1] 会破坏一切。\index
我可以使用 fancyhdr 轻松修复页脚中的页码。
我怎样才能\label
编写格式化的页面引用,以便\pageref
可以将其拉出来而不需要知道引用的项目来自哪个部分?
接下来是不起作用的 MWE。对于名称为“item”的页面引用,我希望\pageref
返回 1*。对于名称为“this”的页面引用,我希望\pageref
返回 [1]。
\documentclass[12pt,twoside,latin]{book}
\usepackage{fancyhdr}
\fancyhf{}
\fancyfoot[C]{\thepage*}
\pagestyle{fancy}
\begin{document}
This is an item.\label{item}
\newpage
You can read about {\itshape item\/} here: \pageref{item}.
\newpage
\setcounter{page}{1}
\fancyfoot[C]{[\thepage]}
You've read about {\itshape item\/} here: \pageref{item}. But you should also read about this.\label{this}
\newpage
Have you read about {\itshape this\/} here: \pageref{this}.
\end{document}
答案1
事实证明,只需重新定义 \label 即可。我在文档中每个新部分的开头执行此操作,其中页码格式会发生变化。
\documentclass[12pt,twoside,latin]{book}
\usepackage{fancyhdr}
\usepackage{imakeidx}
\fancyhf{}
\fancyfoot[C]{\thepage*}
\pagestyle{fancy}
\begin{document}
\makeatletter
\renewcommand{\label}[1]{\@bsphack \protected@write \@auxout {}{\string \newlabel {#1}{{\@currentlabel }{\thepage* }}}\@esphack}
\makeatother
This is an item.\label{item}
\newpage
You can read about {\itshape item\/} here: \pageref{item}.
\newpage
\setcounter{page}{1}
\fancyfoot[C]{[\thepage]}
\makeatletter
\renewcommand{\label}[1]{\@bsphack \protected@write \@auxout {}{\string \newlabel {#1}{{\@currentlabel }{[\thepage] }}}\@esphack}
\makeatother
You've read about {\itshape item\/} here: \pageref{item}. But you should also read about this.\label{this}
\newpage
Have you read about {\itshape this\/} here: \pageref{this}.
\end{document}