我提出这个问题的原因$makeindex latexmk 的配置变量如何适应多个 .idx 文件(与源文件名不同)?曾是:
imakeidx
可以处理多个索引,但通过相应的文件名而不是文件扩展名来区分,latexmk
自定义依赖项和子例程基于扩展而不是文件名,
因此我询问是否可以为通过相应的源文件名区分的不同文件创建不同latexmk
的$makeindex
配置变量。.idx
我为此赢得了“风滚草”徽章(我不知道是该笑还是该哭;)所以可能需要采取不同的方法。
以下 MWE (例如test.tex)
,需要用以下代码进行编译:
pdflatex test
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
,因此我的问题是:是否可以对其进行破解以使其不同的索引具有不同的扩展(为了使其尽可能简单,imakeidx
将splitindex
不会使用)?
答案1
就在这儿。我还隐藏了选项发出的信息消息noautomatic
,因为你正在使用latexmk
。
但是,没有它,它也能工作(但使用 Xindy 可能不行,我只用 MakeIndex 测试过)。
我并没有尝试让它与 一起工作splitindex
。morewrites
如果输出流用完了,请使用 。
\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}