在 LaTeX 中一致更改页码格式的最佳方法?

在 LaTeX 中一致更改页码格式的最佳方法?

有没有推荐的方法来更改 LaTeX 中参考文献的页码格式,即 \pageref 输出的内容?我查看了内核源代码以及 cleveref.sty 和 varioref.sty 等。我想我可以破解一些东西,但我不清楚推荐什么方法(如果有的话)。

原因:对于 TUGboat,我们以草稿模式运行文章,页码从 901 开始。Frank(Mittelbach)建议打印诸如“?1”、“?2”......之类的页码,以便明确表明页码不是真实的并且不应被引用(确实发生过)。

我可以轻松地在页眉和页脚中执行此操作,因为 ltugboat.cls(即 tugboat.dtx)已经重新定义了它们;我可以运行一个宏来检查值是否 >900 并执行正确的操作,而不是简单地排版 \thepage。没问题。对于目录也是如此,因为 ltugboat 也已经重新定义了 \l@section。

因为这是为 TUGboat 准备的,所以我实际上无法加载 cleveref 或 varioref 或它们的无数关系;这样太脆弱了。我需要在自己的宏中进行更改,尽可能不造成侵入。

这是一个例子(下面的输出)。我没有费心使用索引等,尽管同样的问题也适用于 LaTeX 排版页码的任何地方。

\documentclass[draft]{ltugboat}
\begin{document}
\tableofcontents
\section{Introduction}
\label{intro} Reference to page~\pageref{intro}.
\end{document}

如果您运行此命令,除非您使用 tugboat svn 中未发布的 tugboat.dtx->ltugboat.cls,否则您将不会在标题或目录中看到“?1”。但这并不重要;我的问题是关于 \pageref 的。我希望“901”也是“?1”。提前致谢...

拖船草稿输出页面参考

答案1

\thepage是个表示页码随处可见,改变页码是合乎逻辑的命令:您可以重新定义它以获得 a、b、c、... 或 i、ii、iii、... 作为编号,也可以重新定义它以获得您的编号。即使 hyperref 也会在页面标签中处理它,只要它扩展到合理的文本(因此最好不要添加框架或颜色)。

陷阱

  • 索引将失败。问题不在于“数字”无法打印,而是 makeindex 无法对其进行排序,它只能处理一些标准数字系统,如罗马数字和数字。如果索引很重要,您必须重新定义\@wrindex以编写不同的东西\thepage或使用其他允许定义自定义页码的索引程序。在下面的示例中,我利用了索引包的一个功能:它允许将不同的计数器与索引命令关联起来。

  • 无论出于什么原因,尝试比较页码的包也会失败(对于罗马数字或字母数字也会失败,因此它对您的编号来说并不特殊),但通常如果有需要,这应该是可以解决的。

我使用三个???来表明我覆盖了 ltugboat 设置:

\documentclass[draft]{ltugboat}
\usepackage{index}
\newcommand\specialthepage{\inteval{\value{page}-900}}
\newindex[specialthepage]*{default}{idx}{ind}{Index}

\usepackage{hyperref}
\renewcommand\thepage{???\inteval{\value{page}-900}}

\begin{document}
\tableofcontents
\section{Introduction}
\label{intro} Reference to page~\pageref{intro}.
\index{Bär}, \index{Duck}
\printindex
\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容