索引中的页码(或点填充)未放置在正确的位置

索引中的页码(或点填充)未放置在正确的位置

在我的索引配置中,该.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
  }

这通常很有效,但当索引文本的宽度恰好等于页码之前的空格时,我得到了一些奇怪的事情:

在此处输入图片描述

从图片中你可以看到,

  1. 第一行是预期的通常行为;
  2. 第二行显示的是文本和页码之间没有任何点的效果,看上去不太好看,但是可以忍受;
  3. 第三行是最糟糕的情况,甚至页码也放错了位置。

期望的行为是所有页码均显示在右侧(即使这意味着将页码推到下一行),并且始终页码前至少有两个点(必要时可拆分文本)。目前,当文本过长时,页码会被推到下一行,但不会位于最右边,而且发生这种情况时第二行上也没有点(如上述情况 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}

在此处输入图片描述

相关内容