Einige weitere Probleme mit der Indexgenerierung und tex4ebook

Einige weitere Probleme mit der Indexgenerierung und tex4ebook

Dies ist eine Fortsetzung meiner vorherigen FrageHier.

Es verwendet die von @Michal.h21 bereitgestellten Dateien. Ich habe die Eingabedatei wie folgt geändert:

\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}

Die Konfigurations- und Build-Dateien sind dieselben wie in der vorherigen Frage und werden erneut von @Michal.h21 bereitgestellt.

Die Hauptprobleme sind:

  1. Der Befehl \indexprologue wird im PDF korrekt verarbeitet:

PDF-Ausgabe

Beim Ausführen von tex4ebook wird es jedoch ignoriert.

tex4ebook-Ausgabe

  1. Ich denke, dass es ein inkonsistentes Verhalten zwischen der intoc-Option und der \addcontentsline{toc}{chapter}{Index}-Option gibt. Die intoc-Option wird beim Ausführen von tex4ebook ignoriert.

  2. Der Indexlink im Inhaltsverzeichnis verweist auf eine leere Seite und nicht auf die Stelle, an der sich die Indexüberschrift befindet.

tex4ebook-Ausgabe

In der PDF-Datei ist es korrekt.

PDF-Ausgabe

  1. Die Verwendung einer automatischen Option im Befehl makeindex erzeugt keine Hyperlinks:

tex4ebook-Ausgabe

Die Verwendung der Option „noautomatic“ funktioniert. Das ist kein großes Problem, unterscheidet sich aber vom Verhalten eines normalen Latex-Laufs und wirkt seltsam.

Haben andere diese Probleme erlebt und gibt es Lösungsvorschläge oder Möglichkeiten, konsistente Ergebnisse zu erzielen?

Ich vermute, dass dies auf @Michal.h21 zurückzuführen ist, und danke ihm daher im Voraus.

Antwort1

Die vorherige Konfigurationsversion für imakeidxdas Paket berücksichtigte einige Funktionen dieses Pakets nicht, sondern verwendete die Standardkonfiguration tex4htzur Verarbeitung des \printindexBefehls. Wir können die geänderte Version der imakeidxDefinition verwenden, um Unterstützung für einige dieser Funktionen zu erhalten.

Dies ist die neue Version der imakeidx.4htDatei:

\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*}

Die wichtige Änderung ist folgende:

\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>}}{}{}

Dabei wird die Inhaltsverzeichnisunterstützung \reneenwironment{theindex}berücksichtigt und es werden Elemente um den Indexinhalt herum hinzugefügt .\indexprologue\ConfigureEnv{theindex}<div class="theindex">

\addcontentsline{toc}{chapter}{Index}Mit dieser Änderung müssen Sie in Ihrem Dokument nicht mehr den Link vom Inhaltsverzeichnis verwenden , der korrekt auf den Index verweist.

Zu Ihrer letzten Frage: Die automaticOption von imakeidxfunktioniert nicht, da Sie beim Kompilieren mit pdflatexund mit unterschiedliche Optionen verwenden müssen tex4ht. Aus diesem Grund xindywird von der Build-Datei aus aufgerufen. Der andere Grund ist, dass LaTeX bei jedem tex4ebook-Lauf mehrmals aufgerufen wird und es keinen Sinn ergibt, den Index bei jedem dieser Aufrufe zu kompilieren.

Bildbeschreibung hier eingeben

verwandte Informationen