如何找到被拒绝的索引条目

如何找到被拒绝的索引条目

由于某些原因,我的一些索引条目被拒绝。如何确定哪些索引条目被拒绝了?

例如,如果我取消注释\def下面 MWE 顶部的 ,我会在控制台中看到该消息。它所做的就是从 切换\tiny\small。不确定为什么一个没问题,而另一个却不行。

扫描输入文件 TestIndex.idx...完成(接受 0 个条目,拒绝 10 个条目)

我搜索了该单词rejectedimakeidx.sty但该单词不在该文件中,因此不确定该消息来自哪里。

以上只是条目被拒绝的原因之一。我需要知道其他原因是什么,因为我有一些条目在未使用 的情况下被拒绝\small

参考:

代码:

%\def\UseSmallInIndex{}%

\documentclass{article}
\usepackage{datatool}% database
\usepackage{imakeidx}% indexing
\usepackage{hyperref}% For cross references
\usepackage{xcolor}%
\makeindex

% ---------- Process Each Word:
%
% https://tex.stackexchange.com/questions/12810/how-do-i-split-a-string
\makeatletter
\def\ProcessEachWord#1{%
    \begingroup%
    \edef\@tempa{#1\space}%
    \gdef\@tempb{#1}%
    \expandafter\endgroup%
    \expandafter\ReadWords\@tempa\relax%
}%
\def\ReadWords#1 #2\relax{%
      \ProcessWord[\@tempb]{#1}%  #1 = substr, #2 = rest of string
      \begingroup%
      \ifx\relax#2\relax% is #2 empty?
         \def\next{\endgroup\EndProcessWords}% your own end-macro if required
      \else%
         \def\next{\endgroup\ReadWords#2\relax}%
      \fi%
      \next%
}%
\makeatother
% ---------- 


\newcommand{\ProcessWord}[2][]{%
    \ifdefined\UseSmallInIndex%
        \index{#2!#1\href{run:#1.pdf}{\small\textcolor{red}{pdf}}}%
    \else%
        \index{#2!#1\href{run:#1.pdf}{\tiny\textcolor{red}{pdf}}}%
    \fi%
}%
\newcommand{\EndProcessWords}{}

\begin{document}
\DTLnewdb{DB}%
\DTLnewrow{DB}% 
\DTLnewdbentry{DB}{FileName}{Now good enough}% 
\DTLnewrow{DB}% 
\DTLnewdbentry{DB}{FileName}{Now good enough for you and me}% 

\DTLforeach{DB}{\FileName=FileName}{%
    \section{\FileName}%
    \par\noindent\href{run:\FileName.pdf}{\FileName}%
    \ProcessEachWord{\FileName}%
}%

\printindex
\end{document}

答案1

您会在文件中找到被拒绝的条目.ilg,这是 Makeindex 活动的日志。

问题出在哪里?如果你查看\UseSmallInIndex未定义时生成的条目,你会发现它们的形式如下

\indexentry{Now!Now good enough\href  {run:Now good enough.pdf}{\relax \fontsize  {5}{6}\selectfont  \leavevmode {\color  {red}pdf}}|hyperpage}{1}

并且你会看到\tiny已被其扩展所取代。 的扩展\small改为

\indexentry{Now!Now good enough\href  {run:Now good enough.pdf}{\relax \fontsize  {9}{11}\selectfont  \abovedisplayskip 8.5\p@ plus3\p@ minus4\p@ \abovedisplayshortskip \z@ plus2\p@ \belowdisplayshortskip 4\p@ plus2\p@ minus2\p@ \def \leftmargin \leftmargini \parsep 4\p@ plus2\p@ minus\p@ \topsep 8\p@ plus2\p@ minus4\p@ \itemsep 4\p@ plus2\p@ minus\p@ {\leftmargin \leftmargini \topsep 4\p@ plus2\p@ minus2\p@ \parsep 2\p@ plus\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip \leavevmode {\color  {red}pdf}}|hyperpage}{1}

这正是 Makindex 失败之处。

解决方案:

\newcommand{\ProcessWord}[2][]{%
  \ifdefined\UseSmallInIndex
    \index{#2!#1\href{run:#1.pdf}{\protect\small\protect\textcolor{red}{pdf}}}%
  \else
    \index{#2!#1\href{run:#1.pdf}{\protect\tiny\protect\textcolor{red}{pdf}}}%
  \fi 
}

出于类似的原因,我也将\protected@edef在定义中使用\ProcessEachWord

相关内容