tex4ht:索引编译问题

tex4ht:索引编译问题

我对索引部分有疑问。

我用来tex4ht将我的手册编译到html文件中。

如果makeindexbegin{document}/end{document}命令位于包含文件中,则编译失败。

简单示例

manual.tex 文件:

\documentclass{article}
\usepackage{makeidx}

\include{index}

索引.tex

\makeindex
\title{A Title}
\author{An Author}
\date{July 19, 2004}

\begin{document}
\maketitle  \tableofcontents
\section{First Section}
    Some text.
    \index{first}
\section{Second Section}
\subsection{A Subsection}
    Some text 2
    \index{Second}
\printindex
\end{document}

编译错误:

! \idx:extI 的参数有一个额外的}。\par l.11 \ section{第二节} ?

!!! 但是如果文件内容位于一个文件中,则编译成功。

对我来说,将文本分成两个文件是强制性的条件。

有人能帮助我吗?

答案1

编辑:

这个答案已经过时了。make4ht现在有内置索引支持。参见这个答案举个例子。

原始答案:

问题出在包含文件的名称上,因为 tex4ht 会尝试包含.4ht每个包含的文件的文件。在你的情况下,这会导致问题,因为文件index.4ht存在,而该文件应该包含在内index.sty。一个明显的解决方法是将包含的文件重命名为某个安全的名称,例如text-index.tex或类似的名称。

现在你只需要编译可用形式的索引。使用构建文件tex4ht很容易:make4htmanual.mk4

Make:add("makeindex", function(arg)
  os.execute("tex '\\def\\filename{{${input}}{${sext}}{${iext}}{${dext}}} \\input idxmake.4ht'" % arg) 
  os.execute("makeindex -o ${input}.${dext} ${input}.${iext}" % arg)
end,{sext = "idx", iext ="4dx", dext = "ind"} )

if mode == "draft" then
  Make:htlatex {}
else
  Make:htlatex {}
  Make:makeindex {}
  Make:htlatex {}
  Make:htlatex {}
end

使用以下方法编译文件

make4ht -u 手册.tex

构建文件中有趣的部分是:

Make:add("makeindex", function(arg)
  os.execute("tex '\\def\\filename{{${input}}{${sext}}{${iext}}{${dext}}}  \\input idxmake.4ht'" % arg) 
   os.execute("makeindex -o ${input}.${dext} ${input}.${iext}" % arg)
 end,{sext = "idx", iext ="4dx", dext = "ind"} )

Make:add创建可用于构建文件的新命令。要使用makeindextex4ht首先需要使用 后处理idx文件idxmake.4ht,并且需要在\filename命令中定义使用的扩展名。它会创建中间文件,然后由 处理makeindex。已处理文件的扩展名在

{sext = "idx", iext ="4dx", dext = "ind"}

结果:

在此处输入图片描述

相关内容