为什么imakeidx + nonewpage无法写入idx文件?

为什么imakeidx + nonewpage无法写入idx文件?

例子:

\documentclass{article}

\usepackage[nonewpage]{imakeidx}
\makeindex

\begin{document}

stuff\index{test}

\printindex

\end{document}

当我运行lualatex此文件时,我看到标准输出中的输出:

[1{/usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map}
\indexentry{test}{1}
] (./mwe.aux) )

似乎\indexentry被写入了标准输出而不是文件.idx——.idx文件最终为空,因此我根本没有得到索引。

如果我删除nonewpageimakeidx 选项,.idx文件就会按预期生成。或者,添加\clearpagebefore\printindex也可以使事情按预期进行。

这是怎么回事?我只是想删除索引前的分页符!

值得一提的是,我在使用 MacTeX 2013,昨天刚刚运行了 TeX Live 更新程序。

答案1

我担心这是一个错误,即使(暗示)有效,也imakeidx要求idx过早关闭文件。noautomaticnonewpage

目前,您可以给出正确的定义\imki@putindex

\documentclass{article}

\usepackage[nonewpage]{imakeidx}
\makeatletter
\def\imki@putindex#1{%
  \ifimki@nonewpage\else
    \imki@clearpage
%%% The following two lines are incorrectly switched in the package
    \immediate\closeout\csname #1@idxfile\endcsname
  \fi
  \let\imki@indexname\indexname % keep \indexname
  \@nameuse{imki@set@#1}\imki@decide
  \if@tempswa % we can call the external program
    \imki@exec{\imki@program\imki@options#1.idx}%
  \else
    \imki@finalmessage{#1}%
  \fi
  \ifKV@imki@intoc
    \def\imki@maybeaddtotoc{\@nameuse{phantomsection}%
      \addcontentsline{toc}{\imki@toclevel}{\imki@title}}%
  \else
    \def\imki@maybeaddtotoc{}%
  \fi
  \ifx\imki@title\imki@check@indexname\else
    \def\indexname{\imki@title}%
  \fi
  \@input@{#1.ind}
  \let\indexname\imki@indexname % restore \indexname
}
\makeatother
\makeindex

\begin{document}

stuff\index{test}

\printindex

\end{document}

该软件包的修复版本正在发送至 CTAN。

相关内容