将索引页引用格式化为“1 sq.”,且不将“sq.”作为超链接的一部分

将索引页引用格式化为“1 sq.”,且不将“sq.”作为超链接的一部分

默认情况下,MakeIndex 会将由两页或三页连续页面组成的页面引用格式化为(例如)“1, 2”/“1-3”。使用合适的索引样式文件,格式可以更改为“1 sq.”/“1 sqq。”(“sq.”代表“sequens”,“sqq.”代表“sequentes”)。但是,使用hyperref包加载后,“sq.”和“sqq.”将成为相应页面引用超链接的一部分。我如何将这些超链接限制为实际页码?

\documentclass{article}

\usepackage{makeidx}
\makeindex

\usepackage{hyperref}

\usepackage{filecontents}

\begin{filecontents}{\jobname.mst}
suffix_2p "~sq."
suffix_3p "~sqq."
\end{filecontents}

\begin{document}

Some text about foo\index{foo}.

\clearpage

Another text about foo\index{foo}.

\printindex

\end{document}

在此处输入图片描述

答案1

我的问题的答案可以在hyperrefREADME 中找到(而不是在手册中):

对于索引中的超链接支持,hyperref插入\hyperpage 到索引宏中。使用 Makeindex 处理后,\hyperpage 分析其参数以检测页面范围和页面逗号列表。但是,仅直接支持标准设置:

delim_r "--"
delim_n ", "

(请参阅 Makeindex 手册页/文档,其中解释了 Makeindex 样式文件中可以使用的键。)

delim_r, delim_n, suffix_2p, suffix_3p, suffix_mp

需要\hyperpage能够检测并知道这些内容不属于页码的标记。Makro\nohyperpage充当此标记。将这些键的自定义代码放入其中\nohyperpage,例如:

suffix_2p "\\nohyperpage{f.}"
suffix_3p "\\nohyperpage{ff.}"

(根据排版惯例,\\,在里面的第一个 f 前面应该添加空格“ ”或“~” \nohyperpage。)

在我的例子中,索引样式文件必须是 modifield,如下所示:

suffix_2p "\\nohyperpage{~sq.}"
suffix_3p "\\nohyperpage{~sqq.}"

在此处输入图片描述

答案2

使用 hyperref 您还可以操作分组机制。

使用 makeindex 意味着完整的页码格式为\command{...}

}{因此,您可以简单地在后缀声明中添加:

suffix_2p "}{~sq."

这是完整的代码(我用来imakeidx简化编译)

\documentclass{article}

\usepackage{imakeidx}
\makeindex

\usepackage{hyperref}

\usepackage{filecontents}

\begin{filecontents}{\jobname.mst}
suffix_2p "}{~sq."
suffix_3p "~sqq."
\end{filecontents}

\begin{document}

Some text about foo\index{foo}.

\clearpage

Another text about foo\index{foo}.

\printindex

\end{document}

相关内容