색인 생성 및 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. inc 옵션과 \addcontentsline{toc}{chapter}{Index} 옵션에 일관성 없는 동작이 있는 것 같습니다. inc 옵션은 tex4ebook 실행에서 무시됩니다.

  2. 목차의 색인 링크는 색인 헤더가 있는 위치가 아닌 빈 페이지를 가리킵니다.

tex4ebook 출력

pdf 파일에 있는 내용이 맞습니다.

PDF 출력

  1. makeindex 명령에서 자동 옵션을 사용하면 하이퍼링크가 생성되지 않습니다.

tex4ebook 출력

noautomatic 옵션을 사용하면 작동합니다. 이것은 큰 문제는 아니지만 일반적인 라텍스 실행의 작동 방식과 다르며 이상해 보입니다.

다른 사람들도 이러한 문제를 경험한 적이 있습니까? 일관된 결과를 얻기 위한 제안된 수정 사항이나 방법이 있습니까?

나는 이것이 @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옵션이 작동하지 않습니다 . 이것이 빌드 파일에서 호출되는 이유입니다. 또 다른 이유는 LaTeX가 각 tex4ebook 실행에서 여러 번 호출되고 이러한 각 호출에서 색인을 컴파일하는 것이 의미가 없다는 것입니다.imakeidxpdflatextex4htxindy

여기에 이미지 설명을 입력하세요

관련 정보