避免在索引中的页码前换行

避免在索引中的页码前换行

这是一个有点牵强的例子,因为真实的例子取决于我不能在这里发布的特定字体。MWE:

\documentclass{scrbook}
\usepackage{makeidx}
\usepackage[unbalanced,columns=3,justific=RaggedRight,columnsep=70pt]{idxlayout}
\usepackage[colorlinks=true]{hyperref}
\makeindex
\begin{document}
text\index{this-should-break}
\index{thisss-should-break}
\index{this-one-does-break}
\printindex
\end{document}

输出:

在此处输入图片描述

我想要:

在此处输入图片描述

IDX 文件:

\indexentry{this-should-break|hyperpage}{1}
\indexentry{thisss-should-break|hyperpage}{1}
\indexentry{this-one-does-break|hyperpage}{1}

IND 文件:

\begin{theindex}

  \item this-one-does-break, \hyperpage{1}
  \item this-should-break, \hyperpage{1}
  \item thisss-should-break, \hyperpage{1}

\end{theindex}

我想避免在第二个条目的页码前换行。我不知道这是否可行。我假设我正在寻找一种解决方案,可以产生类似的东西\item this-should-break,~\hyperpage{1},但话又说回来,\hyperpage内部可能会做一些事情让它仍然中断。

编辑

由于我现在不仅找到了常规解决方案,而且还找到了 xindy 解决方案,因此我对其进行了相应的重新标记。

答案1

如果你知道如何做的话,这似乎实际上很容易实现。关键点是:

  • 使用包imakeidx代替makeidx
  • 创建重新定义的样式文件delim_0

测试.ist:

delim_0 ",~"

测试.tex:

\documentclass{scrbook}
\usepackage{imakeidx}
\usepackage[unbalanced,columns=3,justific=RaggedRight,columnsep=70pt]{idxlayout}
\usepackage[colorlinks=true]{hyperref}
\makeindex[options=-s test.ist]
\begin{document}
text\index{this-should-break}
\index{thisss-should-break}
\index{this-one-does-break}
\printindex
\end{document}

生成的 ind 文件:

\begin{theindex}

  \item this-one-does-break,~\hyperpage{1}
  \item this-should-break,~\hyperpage{1}
  \item thisss-should-break,~\hyperpage{1}

\end{theindex}

输出:

在此处输入图片描述

以下是 xindy 的操作方法:

\documentclass{scrbook}
\usepackage[xindy]{imakeidx}
\usepackage[unbalanced,columns=3,justific=RaggedRight,columnsep=70pt]{idxlayout}
\usepackage[colorlinks=true]{hyperref}
\makeindex[options=-M test.xdy]
\begin{document}
text\index{this-should-break}
\index{thisss-should-break}
\index{this-one-does-break}
\printindex
\end{document}

测试.xdy:

(markup-locclass-list :open ",~~")

输出:

在此处输入图片描述

相关内容