文档开头的索引

文档开头的索引

是否可以在文档开头插入索引,如下所示?:

\documentclass[11pt]{article}
\usepackage{imakeidx}
%\indexsetup{othercode=\small}
\makeindex[name=definitions,title=Definitions,columns=1,intoc=true,program=makeindex,options={-s index_style.ist}]

\begin{document}
\printindex[definitions]

bla bla \index[definitions]{bla}, lorem ipsum \index[definitions]{ipsum}

\end{document}

仅供参考,index_style.ist 的内容是:

headings_flag 1
heading_prefix "{\\large\\bfseries "
heading_suffix "}\\nopagebreak\n"
delim_0 " \\dotfill "
delim_1 " \\dotfill "
delim_2 " \\dotfill "

答案1

您必须imakeidx使用该nonewpage选项进行调用并手动运行makeindex

不幸的是,还需要对一个错误打补丁,该错误应在下一版本中得到解决imakeidx;请参阅为什么imakeidx + nonewpage无法写入idx文件?

为了实现工作自动化,有两条路可走:

  1. 使用latexmk

  2. 使用arara

我更喜欢后者,因为它更容易定制。

示例(感谢的arara作者 Paulo Cereda 提出这一files技巧)。

% arara: pdflatex
% arara: makeindex: { files: [definitions], style: index_style.ist}
% arara: pdflatex
\documentclass[11pt]{article}
\usepackage[nonewpage]{imakeidx}

% work around the bug. :(
\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
%%% end of bug fix

%\indexsetup{othercode=\small}
\makeindex[name=definitions,
  title=Definitions,
  columns=1,
  intoc=true,
  program=makeindex,
  options={-s index_style.ist}]

\begin{document}
\printindex[definitions]

bla bla \index[definitions]{bla}, lorem ipsum \index[definitions]{ipsum}

\end{document}

如果你运行arara -v filename,你将得到这个输出。

在此处输入图片描述

在这种情况下,标准自动化无法实现是有原因的imakeidx:为了运行makeindex.idx必须关闭文件并包含所有必需的条目,如果索引不在文档末尾,则无法做到这一点。.idx上次运行期间写入的文件不再可用,因为声明\makeindex在文档开始时打开它们(因此清空它们)。

latexmk filename

应该可以开箱即用(使用补丁)。

相关内容