我正在尝试制作一个带索引的文档。我遇到了两个问题(可能都是由第一个问题引起的。我使用该软件包是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
请注意保护程度可能会降低。