使用pandoc将Markdown转PDF时调用makeindex生成索引失败如何解决
你直接用pandoc一步生成PDF时没有索引,核心原因是pandoc默认调用LaTeX引擎的流程不会自动执行makeindex命令。LaTeX生成索引需要多步编译:第一次编译生成记录索引条目的.idx文件,执行makeindex处理.idx生成格式化的索引内容文件.ind,再编译两次才能把索引渲染到PDF里。你一步转PDF的流程跳过了makeindex的步骤,自然看不到索引内容。
你现在用的临时方案需要修改原Markdown文件,流程比较冗余,更简洁的处理方式如下:
- 第一步:用pandoc将Markdown导出为LaTeX文件,原命令只需要把输出文件后缀改成
.tex即可:
pandoc "test.md" \ --from markdown --to latex \ --toc \ --toc-depth=1 \ --include-in-header index.tex \ --include-in-header chapter_break.tex \ --include-in-header inline_code.tex \ --include-in-header bullet_style.tex \ --include-in-header pdf_properties.tex \ --highlight-style pygments.theme \ -V toc-title='Inhaltsverzeichnis' \ -V title='Mein Titel' \ -V author='Ich' \ -V book=true \ -V date="24. Mai 2021" \ -V classoption='oneside' \ --template ./eisvogel.latex \ --listings \ -o "test.tex"
- 第二步:依次执行LaTeX编译和索引处理命令:
# 第一次编译生成.idx索引条目文件 pdflatex test.tex # 处理索引生成.ind文件 makeindex test.idx # 再编译两次,把索引插入文档并更新所有交叉引用 pdflatex test.tex pdflatex test.tex
执行完成后生成的test.pdf就包含完整的索引内容了。
如果想实现一步生成带索引的PDF,可以安装latexmk工具,它会自动识别编译流程需要的步骤,你只需要在原pandoc命令里加一个参数--pdf-engine=latexmk即可,不需要手动走多步流程。
内容的提问来源于stack exchange,提问作者astridx
相关产品推荐
相关产品推荐

