これは前回の質問の続きですここ。
@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 によって提供されています。
主な問題は次のとおりです。
- \indexprologue コマンドは PDF で正しく処理されます。
ただし、tex4ebook の実行では無視されます。
intoc オプションと \addcontentsline{toc}{chapter}{Index} オプションの動作に一貫性がないと思われます。tex4ebook の実行では intoc オプションは無視されます。
TOC 内のインデックス リンクは、インデックス ヘッダーがある場所ではなく、空白のページを指しています。
PDFファイルでは正しいです。
- makeindex コマンドで自動オプションを使用すると、ハイパーリンクは生成されません。
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 の実行ごとに複数回呼び出され、これらの呼び出しごとにインデックスをコンパイルしても意味がないことです。pdflatex
tex4ht
xindy