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