是否可以破解 imakeidx 以使其不同的索引具有不同的扩展名?

是否可以破解 imakeidx 以使其不同的索引具有不同的扩展名?

我提出这个问题的原因$makeindex latexmk 的配置变量如何适应多个 .idx 文件(与源文件名不同)?曾是:

  1. imakeidx可以处理多个索引,但通过相应的文件名而不是文件扩展名来区分,
  2. latexmk自定义依赖项和子例程基于扩展而不是文件名,

因此我询问是否可以为通过相应的源文件名区分的不同文件创建不同latexmk$makeindex配置变量。.idx

我为此赢得了“风滚草”徽章(我不知道是该笑还是该哭;)所以可能需要采取不同的方法。

以下 MWE (例如test.tex),需要用以下代码进行编译:

  1. pdflatex test
  2. latexmk -norc -r latexmkrc.tex test

表明,使用该index包(可以处理多个索引,但通过相应的文件扩展名来区分---而不是文件名),可以latexmk根据扩展名创建自定义依赖项和子例程,从而用于latexmk自动化编译文档的过程。

\documentclass{article}
\usepackage{index}
\usepackage{filecontents}

\newindex{indexA}{adx}{and}{Index A}
\newindex{indexB}{bdx}{bnd}{Index B}

\begin{filecontents*}{latexmkrc}
add_cus_dep('adx', 'and', 0, 'texindyA');
sub texindyA{
    system("texindy -o \"$_[0].and\" \"$_[0].adx\"");
}

add_cus_dep('bdx', 'bnd', 0, 'texindyB');
sub texindyB{
    system("texindy -o \"$_[0].bnd\" \"$_[0].bdx\"");
}

$pdf_mode = 1; #$
\end{filecontents*}

\begin{document}
Term A\index[indexA]{Term from index A}
\par
Term B\index[indexB]{Term from index B}
\printindex[indexA]
\printindex[indexB]
\end{document}

出于某些原因,我坚持这样做imakeidx,因此我的问题是:是否可以对其进行破解以使其不同的索引具有不同的扩展(为了使其尽可能简单,imakeidxsplitindex不会使用)?

答案1

就在这儿。我还隐藏了选项发出的信息消息noautomatic,因为你正在使用latexmk

但是,没有它,它也能工作(但使用 Xindy 可能不行,我只用 MakeIndex 测试过)。

我并没有尝试让它与 一起工作splitindexmorewrites如果输出流用完了,请使用 。

\documentclass{article}
\usepackage[noautomatic]{imakeidx}
\usepackage{xpatch}

\makeatletter
\def\imki@finalmessage#1{}% since you're using latexmk
\def\imki@startidx#1#2{%
  \if@filesw
    \def\index{\@bsphack
      \@ifnextchar [{\@index}{\@index[\imki@jobname]}}
    \expandafter\newwrite\csname #1@idxfile\endcsname
    \immediate\openout \csname #1@idxfile\endcsname #1.#2\relax
    \typeout{Writing index file #1.#2}%
  \fi}
\xpatchcmd\imki@makeindex
  {\imki@startidx\imki@name}
  {\imki@startidx\imki@name\imki@extout}
  {}{}
\xpatchcmd\imki@build
  {\imki@dokey\imki@title}
  {\imki@dokey\imki@title
   \imki@dokey\imki@extin
   \imki@dokey\imki@extout}
  {}{}
\xpatchcmd{\imki@putindex}
  {\imki@options}
  {\space -o #1.\imki@extin\imki@options}
  {}{}
\xpatchcmd{\imki@putindex}
  {.idx}
  {.\imki@extout}
  {}{}
\xpatchcmd{\imki@putindex}
  {.ind}
  {.\imki@extin}
  {}{}
\def\imki@extout{idx}\def\imki@extin{ind}
\define@key{imki}{extout}{\def\imki@extout{#1}}
\define@key{imki}{extin}{\def\imki@extin{#1}}
\makeatother

\makeindex[name=indexA,extout=adx,extin=and,title={Index A}]
\makeindex[name=indexB,extout=bdx,extin=bnd,title={Index B}]


\begin{document}
Term A\index[indexA]{Term from index A}
\par
Term B\index[indexB]{Term from index B}
\printindex[indexA]
\printindex[indexB]
\end{document}

在此处输入图片描述

相关内容