在我的索引配置中,该.mst
文件包含以下内容:
delim_0 "\\IndexDotfill " % Filler between section heading and page number
delim_1 "\\IndexDotfill " % Filler between subsection heading and page number
该命令\IndexDotfill
的定义如下:
\newcommand*{\IndexDotfill}
{
\leaders \hbox to .67em {\hss \textcolor{main-text!15!paper}{.} \hss} \hfill
}
这通常很有效,但当索引文本的宽度恰好等于页码之前的空格时,我得到了一些奇怪的事情:
从图片中你可以看到,
- 第一行是预期的通常行为;
- 第二行显示的是文本和页码之间没有任何点的效果,看上去不太好看,但是可以忍受;
- 第三行是最糟糕的情况,甚至页码也放错了位置。
期望的行为是所有页码均显示在右侧(即使这意味着将页码推到下一行),并且始终页码前至少有两个点(必要时可拆分文本)。目前,当文本过长时,页码会被推到下一行,但不会位于最右边,而且发生这种情况时第二行上也没有点(如上述情况 3)。
这个问题(@campa 在评论中友好地建议)并且其解决方案似乎与实现这样的结果非常相关。但是,那里的答案是通过使用\itemlex
接收两个参数的命令来实现的。但在这里.ind
文件中,只有一个具有以下结构:
\begin{theindex}
\item ...\IndexDotfill \hyperpage{...}
如何通过改进当前的定义来实现上述期望的行为\IndexDotfill
?(特别是,我读过这个答案,但添加的\hskip
似乎不适合我的情况)。
提前感谢您的建议!
以下是 MWE:
\documentclass{article}
\usepackage{xcolor}
\usepackage{imakeidx}
\makeindex[intoc]
\begin{filecontents*}[overwrite]{\jobname.mst}
delim_0 "\\IndexDotfill " % Filler between section heading and page number
delim_1 "\\IndexDotfill " % Filler between subsection heading and page number
\end{filecontents*}
\ExplSyntaxOn
\newcommand*{\IndexDotfill}
{
\leaders \hbox to .67em {\hss \textcolor{gray!55}{.} \hss} \hfill
}
\ExplSyntaxOff
\begin{document}
Text in case of empty.
\index{Normal}
\index{Test a text test text test text test}
\index{Test ab text test text test text test}
\printindex
\end{document}