Algunos problemas adicionales con la generación de índices y tex4ebook

Algunos problemas adicionales con la generación de índices y tex4ebook

Esta es una continuación de mi pregunta anterior.aquí.

Utiliza los archivos proporcionados por @Michal.h21. He modificado el archivo de entrada de la siguiente manera:

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

Los archivos de configuración y compilación son los mismos que los de la pregunta anterior y nuevamente los proporcionó @ Michal.h21.

Los principales problemas son:

  1. El comando \indexprologue se maneja correctamente en el pdf:

salida pdf

Sin embargo, se ignora en la ejecución de tex4ebook.

salida tex4ebook

  1. Creo que hay un comportamiento inconsistente en la opción intoc y la opción \addcontentsline{toc}{chapter}{Index}. La opción intoc se ignora en la ejecución de tex4ebook.

  2. El enlace de índice en el TOC apunta a una página en blanco en lugar de donde está el encabezado del índice.

salida tex4ebook

Está correcto en el archivo pdf.

salida pdf

  1. El uso de una opción automática en el comando makeindex no produce hipervínculos:

salida tex4ebook

Usar la opción no automática funciona. Esto no es un gran problema, pero es diferente a cómo se comporta una carrera de látex normal y parece extraño.

¿Otros han experimentado estos problemas? ¿Hay alguna solución sugerida o forma de obtener resultados consistentes?

Sospecho que esto recaerá en @Michal.h21 y por eso se lo agradeceré de antemano.

Respuesta1

La versión anterior de configuración del imakeidxpaquete no tenía en cuenta algunas características de este paquete, usaba la tex4htconfiguración predeterminada para manejar el \printindexcomando. Podemos usar la versión modificada de imakeidxla definición para obtener soporte para algunas de estas características.

Esta es la nueva versión del imakeidx.4htarchivo:

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

El cambio importante es este:

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

Tendrá \reneenwironment{theindex}en cuenta el \indexprologuesoporte TOC y \ConfigureEnv{theindex}agregará <div class="theindex">elementos alrededor del contenido del índice.

Con este cambio, ya no es necesario utilizarlo \addcontentsline{toc}{chapter}{Index}en su documento; el enlace del TOC se vincula correctamente al índice.

Con respecto a tu última pregunta, la automaticopción de imakeidxno funciona porque necesitas usar opciones diferentes cuando compilas con pdflatexy con tex4ht. Por eso xindyse llama desde el archivo de compilación. La otra razón es que se llama a LaTeX varias veces en cada ejecución de tex4ebook y no tiene sentido compilar el índice en cada una de estas llamadas.

ingrese la descripción de la imagen aquí

información relacionada