tex4ht:.ind 文件的索引条目/结构

tex4ht:.ind 文件的索引条目/结构

运行 htlatex 2 次并使用 makeindex 命令会提供一个有效的 .ind 文件,但在相应的 .html 输出中页码作为链接标签,这对于访问网页的用户来说毫无意义。

我如何才能将相应 .ind 的 LNK 部分中的信息交换/添加到自己选择的文本中?

或者我可以在哪里找到有关 .ind 或/和相应的 .4dx 文件的结构的信息?

PS 我的目标是将页码交换为 LaTeX 源的(子)部分条目,以模仿 O'Reilly 在其电子书中使用的索引结构。

答案1

我已经创建了新项目,helpers4ht,它将是各种包的集合,以简化tex4ht使用。这些包可以包含在.cfg文件中。第一个包是indexing4ht,用于处理索引。

将文件indexing4ht.4ht和放在indexing4ht.sty您的工作目录中,并在命令前添加\RequirePackage{indexing4ht}到文件。例如:.cfg\Preamble

\usepackage{indexing4ht}
\Preamble{xhtml,3}
\begin{document}
\EndPreamble

在此示例中,3选项用于将各部分拆分为独立的 html 文件

现在是一些示例文档sample.tex

\documentclass{article}

\usepackage[xindy,noautomatic]{imakeidx}
\makeindex
\makeindex[name=names]
\begin{document}
\section{Hello world}
\index{section}
\subsection{first}

\index[names]{Einstein, Albert}
\index{hello}\index{world}

\subsection{second}
\index[names]{Knuth, Donald}
\index{hello}
\index{not world}
\subsubsection{sub sub section}
\index{hello|definition}
\index{Latex@\LaTeX}
\index{uff|see{hello}}
\index{off|seealso{hello}}
\index{Some bold@\textbf{Some bold}}
\printindex
\printindex[names]
\end{document}

imakeidx目前仅支持包,因为它提供了简单的索引编写自定义方法。请注意,使用了两个不同的索引,默认为关键字和名称。还使用了see和属性。seealso

现在我们可以用以下方式编译文档

htlatex sample cfgfilename

将创建三个重要文件,sample.idxnames.idxsample.xdysample.xdy索引xindy处理器的配置文件。makeindex不受支持。

当你看names.idx

\indexentry{Einstein, Albert}{1.1}
\indexentry{Knuth, Donald}{1.2}

您可以看到section使用数字代替页码。这是默认配置,但可以将其配置为使用与节号不同的位置,例如段落或链接回\index命令。

现在我们需要使用以下命令处理.idx文件xindy

xindy -L english -C utf8 -M sample sample.idx
xindy -L english -C utf8 -M sample names.idx

结果names.ind

\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }

  \lettergroup{E}
  \item \idxkeyword{Einstein, Albert}, \idxlocator{1.1}

  \indexspace

  \lettergroup{K}
  \item \idxkeyword{Knuth, Donald}, \idxlocator{1.2}

\end{theindex}

您可以看到使用了\idxkeyword\idxlocator命令,这些用于交叉引用。

由于我们的样本中使用了索引条目中的命令,因此我们需要小心处理它们,因为它们会导致交叉引用处理出现问题。存在问题的命令如下:

\index{Latex@\LaTeX}
\index{Some bold@\textbf{Some bold}}

该包gettitlestring用于清理索引条目,我们需要在.cfg文件中提供所用命令的配置:

\usepackage{indexing4ht}
\Preamble{xhtml,3}
\GetTitleStringDisableCommands{%
\renewcommand\textbf[1]{#1}%
\renewcommand\LaTeX{LaTeX}
}
\begin{document}
\EndPreamble

参见的内容\GetTitleStringDisableCommands。索引条目名称中使用的每个命令的定义都应放在此处。

现在编译

htlatex sample cfgfilename

得到的主要指标:

在此处输入图片描述

章节编号上的链接指向保存索引条目的章节。请注意,seeseealso属性会生成指向引用索引条目的链接。

在此处输入图片描述

相关内容