默认情况下,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
我的问题的答案可以在hyperref
README 中找到(而不是在手册中):
对于索引中的超链接支持,
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}