インデックス生成とtex4ebookに関するさらなる問題

インデックス生成とtex4ebookに関するさらなる問題

これは前回の質問の続きですここ

@Michal.h21 が提供するファイルを使用します。入力ファイルを以下のように変更しました。

\documentclass[ebook,12pt,oneside,openany]{memoir}

\begin{filecontents}{test.bib}
@book{Hiemenz,
author={Hiemenz},
title={Polymer Chemistry}
}
\end{filecontents}

\usepackage{lipsum}

\usepackage[backend=biber,hyperref=auto,backref=true]{biblatex}
\bibliography{test}

\usepackage{imakeidx}
\makeindex[intoc=true,columns=1,noautomatic]

\usepackage[hyperindex=true]{hyperref}

\title{Book}
\author{Author}
\date{}

\begin{document}

\maketitle

\frontmatter

\tableofcontents \newpage

\mainmatter

\chapter{C1}

aword\index{aword}

\lipsum \newpage

Here comes a quotation \cite{Hiemenz}.

\chapter{C2}

bword\index{bword}
\lipsum \newpage

\backmatter

\phantomsection
%\addcontentsline{toc}{chapter}{Bibliography}
\printbibliography \newpage

\phantomsection
\addcontentsline{toc}{chapter}{Index}
\indexprologue{Concepts}
\printindex

\end{document}

構成ファイルとビルド ファイルは前の質問と同じで、@Michal.h21 によって提供されています。

主な問題は次のとおりです。

  1. \indexprologue コマンドは PDF で正しく処理されます。

pdf出力

ただし、tex4ebook の実行では無視されます。

tex4ebook出力

  1. intoc オプションと \addcontentsline{toc}{chapter}{Index} オプションの動作に一貫性がないと思われます。tex4ebook の実行では intoc オプションは無視されます。

  2. TOC 内のインデックス リンクは、インデックス ヘッダーがある場所ではなく、空白のページを指しています。

tex4ebook出力

PDFファイルでは正しいです。

pdf出力

  1. makeindex コマンドで自動オプションを使用すると、ハイパーリンクは生成されません。

tex4ebook出力

noautomatic オプションを使用すると機能します。これは大きな問題ではありませんが、通常の LaTeX 実行の動作とは異なり、奇妙に思えます。

他の人もこれらの問題を経験していますか? また、一貫した結果を得るための提案された修正方法や方法はありますか?

これは @Michal.h21 に当てはまると思うので、事前に彼に感謝しておきます。

答え1

パッケージの以前のバージョンの構成では、imakeidxこのパッケージの一部の機能が考慮されておらず、コマンドtex4htの処理にデフォルトの構成 が使用されて\printindexいました。変更されたバージョンのimakeidx定義を使用すると、これらの機能の一部をサポートできます。

imakeidx.4htこれはファイルの新しいバージョンです:

\RequirePackage[]{etoolbox}
\RequirePackage{gettitlestring}
\newcounter{indexcnt}
\let\@Index\@index
\patchcmd{\@Index}{\@wrindex}{\@Wrindex}{}{}
\let\@Wrindex\@wrindex
\patchcmd{\@Wrindex}{\thepage}{\theindexcnt}{}{}
\let\xIndex\index
\patchcmd{\xIndex}{\@index}{\@Index}{}{}
\patchcmd{\xIndex}{\@index}{\@Index}{}{}

\pretocmd{\xIndex}{\@stepindexcnt\@indexanchor}
% \patchcmd{\index}{\@index}{\@Index}{}{}
% \patchcmd{\xIndex}{\@index}{\@Index}{}{}
% \let\protected@iwrite\protected@write
% \let\@index\@Index
% \patchcmd{\protected@iwrite}{\write}{\immediate\write}{}{}
\patchcmd{\@Wrindex}{\protected@write}{\protected@iwrite}{}{}
\let\Index\xIndex
\let\index\xIndex
%\show\Index
\newcommand\@indexanchor{%
  \edef\idx@anch{idx-anch\theindexcnt}%
  \Link[]{}{\idx@anch}\EndLink%
  %\Ref{(idx-link-\idx@anch)}{\FileName/\idx@anch}
}
\newcommand\@stepindexcnt{\stepcounter{indexcnt}}
\newcommand\hello[1]{\@hello#1}
\def\@hello#1/{%
  \Link{idx-anch#1}{}#1\EndLink%
}


\GetTitleStringSetup{expand}
\GetTitleStringDisableCommands{%
  \renewcommand\LaTeX{LaTeX}
}

\newcount\idxkwdcnt
\LinkCommand\IdxKWLink{span,href,id}
\newcommand\idxkeyword[1]{%
  \global\advance\idxkwdcnt by 1\relax%
  % use tags only one time
  \GetTitleString{#1}
  \ifcsdef{idxkw\GetTitleStringResult}{}%
  %{\Tag{idxkw#1}{idxkw\the\idxkwdcnt}}%
  {\expandafter\Tag\expandafter{idxkw\GetTitleStringResult}{idxkw\the\idxkwdcnt}}%
  \csgdef{idxkw\GetTitleStringResult}{x}
  \a:IdxKW{}{idxkw\the\idxkwdcnt}#1\b:IdxKW
}


\NewConfigure{IdxKW}{2}
\Configure{IdxKW}{\IdxKWLink}{\EndIdxKWLink}


\newcommand\idxlocator[1]{\Link{idx-anch#1}{}#1\EndLink}%

\renewenvironment{theindex}%
{\imki@maybeaddtotoc
  % \imki@indexlevel{\indexname}\imki@indexheaders
      \imki@idxprologue
      \global\let\imki@idxprologue\relax
      \parindent\z@
      \parskip\z@ \@plus .3\p@\relax
      \raggedright
      \let\item\@idxitem
    \imki@othercode}
{%
}


\let\indexspace\relax

\ConfigureEnv{theindex}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="theindex">}}{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}


\begin{filecontents*}{\jobname.xdy}
(define-attributes (("default" "definition" "textbf")))
( define-location-class "sec-num" :var
                        ("arabic-numbers"
             :sep "." "arabic-numbers"
             :sep "." "arabic-numbers"
             :sep "." "arabic-numbers"
             :sep "." "arabic-numbers"
))
(require "texindy.xdy")
(markup-keyword :open "\idxkeyword{" :close "}" )
(markup-locref :open "\idxlocator{" :close "}")
(markup-locref :open "\textbf{\idxlocator{" :close "}}"  :attr "textbf")
(markup-locref :open "\textbf{\idxlocator{" :close "}}"  :attr "definition")
\end{filecontents*}

重要な変更点は次のとおりです。

\renewenvironment{theindex}%
{\imki@maybeaddtotoc
  % \imki@indexlevel{\indexname}\imki@indexheaders
      \imki@idxprologue
      \global\let\imki@idxprologue\relax
      \parindent\z@
      \parskip\z@ \@plus .3\p@\relax
      \raggedright
      \let\item\@idxitem
    \imki@othercode}
{%
}


\let\indexspace\relax

\ConfigureEnv{theindex}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="theindex">}}{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}

は、および TOC サポート\reneenwironment{theindex}を考慮し、インデックス コンテンツの周囲に要素を追加します。\indexprologue\ConfigureEnv{theindex}<div class="theindex">

この変更により、ドキュメント内で を使用する必要がなくなり\addcontentsline{toc}{chapter}{Index}、TOC からのリンクがインデックスに正しくリンクされるようになります。

最後の質問に関してですが、と をコンパイルするときには異なるオプションを使用する必要があるため、automaticのオプションはimakeidx機能しません。これが、ビルド ファイルから が呼び出される理由です。もう 1 つの理由は、LaTeX が tex4ebook の実行ごとに複数回呼び出され、これらの呼び出しごとにインデックスをコンパイルしても意味がないことです。pdflatextex4htxindy

ここに画像の説明を入力してください

関連情報