我对索引部分有疑问。
我用来tex4ht
将我的手册编译到html
文件中。
如果makeindex
和begin{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
很容易:make4ht
manual.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
创建可用于构建文件的新命令。要使用makeindex
,tex4ht
首先需要使用 后处理idx
文件idxmake.4ht
,并且需要在\filename
命令中定义使用的扩展名。它会创建中间文件,然后由 处理makeindex
。已处理文件的扩展名在
{sext = "idx", iext ="4dx", dext = "ind"}
结果: