索引中的分组条目不会溢出到下一列

索引中的分组条目不会溢出到下一列

我正在尝试编写一个宏,在 MainText 中的单词和 Index 中的相应条目之间创建超链接,这样人们可以通过单击前者从文本中的单词跳转到索引中的条目,并通过单击索引中的页码返回。这是通过下面给出的 MWE 实现的。但是,在生成的索引中,分组条目(所有以 a 开头的单词或所有以 b 开头的单词)将被视为不会溢出到下一个索引列的单元。相反,给定组内的行距被拉伸,以便 a 组填满页面底部,而 b 组从下一列开始。这会导致行距看起来很尴尬,如 MWE 下方所示。如何让 b 组跨两列拆分?(我应该补充一点,我需要坚持使用NewDocumentCommandxparse 包的功能,因为我的实际代码要复杂得多,有\xindex许多可选参数。)

 \documentclass{book}                 
 \usepackage{xparse}     
 \usepackage{makeidx}
 \makeindex

 \NewDocumentCommand{\xindex}{m}% 
 {\protect\hyperlink{ind:#1}{#1}%             write #1 to MainText
 \index{#1@\protect\hypertarget{ind:#1}{#1}}% write #1 to Index
 }%

 \usepackage[hyperindex]{hyperref}
 \hypersetup{linktocpage=true,colorlinks}
 \begin{document}

 \xindex{aa}
 \xindex{ab}
 \xindex{ab}
 \xindex{ac}
 \xindex{ad}
 \xindex{af}
 \xindex{af} 
 \xindex{ag}
 \xindex{ah}
 \xindex{ai}
 \xindex{aj}
 \xindex{ak}
 \xindex{al}
 \xindex{am}
 \xindex{an}
 \xindex{ao}
 \xindex{ap}
 \xindex{aq}
 \xindex{ar}
 \xindex{as}
 \xindex{at}
 \xindex{au}
 \xindex{av}
 \xindex{aw}
 \xindex{ay}
 \xindex{az}

 \xindex{ba}
 \xindex{bb}
 \xindex{bc}
 \xindex{bd}
 \xindex{be}
 \xindex{bb}
 \xindex{bb}
 \xindex{bb}
 \xindex{bc}
 \xindex{bd}
 \xindex{bf}
 \xindex{bf}
 \xindex{bg}
 \xindex{bh}
 \xindex{bi}
 \xindex{bj}
 \xindex{bk}
 \xindex{bl}
 \xindex{bm}
 \xindex{bn}
 \xindex{bo}
 \xindex{bp}
 \xindex{bq}
 \xindex{br}
 \xindex{bs}
 \xindex{bt}
 \xindex{bu}
 \xindex{bv}
 \xindex{bw}
 \xindex{by}
 \xindex{bz}

 \printindex
 \end{document}

下面的第一张图片给出了上述代码对 Index 的输出,其中有可用的超链接,但 a-grou 的行距很不合适。第二张图片给出了用 替换所有\xindex{}命令后获得的输出\index,结果行距正确,但没有超链接。我想获得一个超链接 Index,但格式与第二种情况相同。

第一张图片

第二张图片

答案1

你需要

 \NewDocumentCommand{\xindex}{m}% 
 {\protect\hyperlink{ind:#1}{#1}%             write #1 to MainText
 \index{#1@\protect\leavevmode\protect\hypertarget{ind:#1}{#1}}% write #1 to Index
 }%

相关内容