MakeIndex 允许对索引条目中的两个、三个或三个以上连续页面的范围进行特殊格式化。可以(借助.ist
样式文件)更改范围分隔符(默认情况下--
)或用后缀(如“sqq.”)替换分隔符和结束页面。还可以为较长的文本块指定“范围”索引引用,例如\index{bla-par|(}
在块的开头和\index{bla-par|)}
结尾使用。但是,恰好两个页面的索引范围的格式不一致:由两个连续页面上的两个“标准”索引引用创建的索引将使用,
分隔符(与较长的范围不同),而由“范围”引用创建的索引将使用--
。必须做什么才能使,
或--
始终用于恰好两个页面的所有范围?
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
Some text.\index{bla}\index{foo}\index{gnu}%
\index{bla-par|(}\index{bla-par|)}\index{foo-par|(}\index{gnu-par|(}
\clearpage
Some text.\index{foo}\index{gnu}\index{foo-par|)}
\clearpage
Some text.\index{gnu}\index{gnu-par|)}
\printindex
\end{document}
答案1
如果页码是普通的阿拉伯数字,则以下.ist
文件和一些宏会拆分两页范围。
文件pagerangemarkup.ist
:
\indexentry{bla}{1}
\indexentry{foo}{1}
\indexentry{gnu}{1}
\indexentry{bla-par|(}{1}
\indexentry{bla-par|)}{1}
\indexentry{foo-par|(}{1}
\indexentry{gnu-par|(textbf}{1}
\indexentry{foo}{2}
\indexentry{gnu}{2}
\indexentry{foo-par|)}{2}
\indexentry{gnu}{3}
\indexentry{gnu-par|)}{3}
one@irwin:~/test> mv pag.ist pagerangemarkup.ist
catone@irwin:~/test> cat pagerangemarkup.ist
delim_0 ", \\IdxPageBegin "
delim_1 ", \\IdxPageBegin "
delim_2 ", \\IdxPageBegin "
delim_n "\\IdxPageEnd, \\IdxPageBegin "
delim_r "\\IdxPageEnd\\IdxRange{--}\\IdxPageBegin "
delim_t "\\IdxPageEnd"
encap_prefix "\\IdxEncapBegin\\"
encap_infix "{\\IdxPageBegin "
encap_suffix "\\IdxPageEnd}\\IdxEncapEnd"
测试文件test.tex
(我已添加\textbf
以获取另一个测试用例):
\documentclass{article}
\usepackage{makeidx}
\makeindex
\makeatletter
\def\IdxEncapBegin#1\IdxEncapEnd{#1}
\def\IdxPageBegin{%
\@ifnextchar\IdxEncapBegin{%
\IdxPage@UnwrapEncap
}{%
\IdxPage@Action
}%
}
\def\IdxPage@UnwrapEncap#1\IdxEncapEnd\IdxPageEnd{%
#1\IdxEncapEnd
}
\def\IdxPage@Action#1\IdxPageEnd{%
\def\IdxPage@LastPage{#1}%
#1%
}
\def\IdxRange#1\IdxPageBegin#2\IdxPageEnd{%
\ifnum#2=\numexpr(1+\IdxPage@LastPage)\relax
, %
\else
#1%
\fi
#2%
}
\begin{document}
Some text.\index{bla}\index{foo}\index{gnu}%
\index{bla-par|(}\index{bla-par|)}\index{foo-par|(}\index{gnu-par|(textbf}
\clearpage
Some text.\index{foo}\index{gnu}\index{foo-par|)}
\clearpage
Some text.\index{gnu}\index{gnu-par|)}
\printindex
\end{document}
呼叫makeindex
:
makeindex -s pagerangemarkup.ist test
答案2
运行texindy <file>.idx
而不是makeindex