由于某些原因,我的一些索引条目被拒绝。如何确定哪些索引条目被拒绝了?
例如,如果我取消注释\def
下面 MWE 顶部的 ,我会在控制台中看到该消息。它所做的就是从 切换\tiny
到\small
。不确定为什么一个没问题,而另一个却不行。
扫描输入文件 TestIndex.idx...完成(接受 0 个条目,拒绝 10 个条目)
我搜索了该单词rejected
,imakeidx.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
。