![避免在索引中的页码前换行](https://linux22.com/image/362519/%E9%81%BF%E5%85%8D%E5%9C%A8%E7%B4%A2%E5%BC%95%E4%B8%AD%E7%9A%84%E9%A1%B5%E7%A0%81%E5%89%8D%E6%8D%A2%E8%A1%8C.png)
这是一个有点牵强的例子,因为真实的例子取决于我不能在这里发布的特定字体。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 ",~~")
输出: