短索引页范围的一致格式

短索引页范围的一致格式

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

相关内容