当设置了输出目录且命名索引不起作用时,imakeidx 不会运行 makeindex

当设置了输出目录且命名索引不起作用时,imakeidx 不会运行 makeindex

我正在尝试制作一个带索引的文档。我遇到了两个问题(可能都是由第一个问题引起的。我使用该软件包是imakeidx因为应该自动运行 makeindex,但它没有运行。我设置了一个output-directory,这似乎是罪魁祸首。

有这个 mwe:

\documentclass[10pt, a4paper]{article}

\usepackage{imakeidx}
\makeindex

\begin{document}
add something to the index \index{something}
add something else to the index \index{somethin else}
add item to the index \index{item}

\printindex

\end{document}

当我跑的时候

pdflatex --shell-escape main.tex
pdflatex --shell-escape main.tex

这将导致文档不包含索引,仅包含:

在此处输入图片描述

现在,当我单独运行 makeindex 时,如下所示:

pdflatex --shell-escape --output-directory=build main.tex
cd build
makeindex main.idx
cd ../
pdflatex --shell-escape --output-directory=build main.tex

我确实在 PDF 中获得了索引。但是,当我尝试命名索引时(这是必需的,因为我在最终文档中需要多个索引),按照这种方式操作会失败,因此这将失败:

\documentclass[10pt, a4paper]{article}

\usepackage{imakeidx}
\makeindex[name=references,title=References used]

\begin{document}
add something to the index \index[references]{something}
add something else to the index \index[references]{else}
add item to the index \index[references]{item}

\printindex[references]

\end{document}

通过阅读手册和 SO 上的其他答案,使用imakeid和运行pdflatex应该shell-escape是全部。我错过了什么?我在 Windows 上运行了最新版本的 miktex,所有软件包都是最新的。

答案1

我遇到了类似的问题,并使用 imakeidx 的一个小补丁解决了它。

实际上,唯一的问题是我们必须在调用相应(或类似)程序cd之前进入构建目录。makeindex

我的补丁是

\usepackage{etoolbox}
\makeatletter
\patchcmd\imki@putindex
  {\imki@exec{\imki@program \imki@options #1.idx}}          %% OLD CODE
  {\imki@exec{cd build;\imki@program\imki@options#1.idx}}   %% NEW CODE: cd to build directory first
  {\message{Patch succeeded in imki@putindex}}
  {\errmessage{Patch failed in imki@putindex}}
\makeatother

当我将它插入到您的两个示例行之后时\usepackage{imakeidx},对我来说效果都很好。

答案2

不幸的是,makeindex 根本不支持 output-directory,这一点您可以在我的问题评论中看到。我可以用一些中间脚本之类的东西来解决这个问题,但让我们弯曲而不是打破,然后丢掉输出目录,现在一切都正常了。

答案3

针对目录结构复杂的书籍中 makeindex 不写入文件保护问题的解决方案,如下所示

( openout_any = p)

在错误消息中是转到/usr/local/texlive/NNNN/tex-mf.conf并添加(使用例如sudo nano tex-mf.conf

openout_any = a

请注意保护程度可能会降低。

相关内容