使用 Tex4ebook 的 EPUB 模板

使用 Tex4ebook 的 EPUB 模板

我正在创建一个模板来生成 EPUB 格式的输出。我从网络上的各种来源获取了示例。我完成了一个包含以下内容的 config.cfg 文件...

\Preamble{xhtml}
\DeclareGraphicsExtensions{.svg,.png,.jpg,.pdf}
\Configure{AddCss}{blitz-lite.css}
\Css{.partimage{margin:0 auto;text-align:center;}}
\Css{.partimage img{max-width:100\%;}}
\Css{.partHead .titlemark{display:block;}}
\DeclareGraphicsExtensions{.svg,.png,.jpg,.pdf}
\begin{document}
    \EndPreamble

一个包含以下内容的 config.mk4 文件...

Make:add("biber","biber ${input}")
Make:add("xindy", function(par)
-- par.encoding  = par.encoding or "utf8"
-- par.language = par.language or "english"
par.idxfile = par.idxfile or par.input .. ".idx"
local modules = par.modules or {}
local t = {}
for k,v in ipairs(modules) do
t[#t+1] = "-M ".. v
end
par.moduleopt = table.concat(t, " ")
local xindy_call = "xindy -L ${language} -C ${encoding} ${moduleopt} ${idxfile}" % par
print(xindy_call)
return os.execute("xindy -L ${language} -C ${encoding} ${moduleopt} ${idxfile}" % par)
end, {modules = {"texindy"}, language = "english", encoding = "utf8"})

if mode=="draft" then
Make:htlatex {}
else
Make:htlatex {}
Make:biber {}
-- xindymodule = Make.params["input"]
Make:xindy {modules = {"sample"}}
Make:htlatex {}
Make:htlatex {}
Make:htlatex {}
end

以及包含...的 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}%

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

这是我将其发送给编译的方式......

tex4ebook -l -c config.cfg -e config.mk4 -a debug sample

我的示例文件名为“sample”。

我遇到了什么错误?由于这些错误超出了我的知识范围,我请求帮助?

我没有获取目录页上的索引。

当编译为 PDF 时,我没有收到此 imakeidx 配置的任何错误,并且我获得了书目设备中的作者索引以及概念和名词索引。

\usepackage{imakeidx}
\makeindex
\makeindex[name=names,title={Índice de autores}]
\makeindex[name=concepto,title={Índice de conceptos}]
\makeindex[name=onomastico,title={Índice onomástico}]

\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}

tex 文件中的功能是......

\printindex[names]
\printindex[concepto]
\printindex[onomastico]

但它不适用于 tex4ebook。

我找不到与首字母缩略词和词汇表配合使用的示例。为了在 PDF 中获取它们,我在 tex 文件的序言和末尾使用了此代码。

\usepackage[acronym,sanitizesort,toc=true,nonumberlist]{glossaries}
\makenoidxglossaries

\newglossaryentry{@fal}{
    type=\acronymtype,
    name={FAL},
    description={Fuerzas Argentinas de Liberación},
    first={Fuerzas Argentinas de Liberación (FAL)},
    text={FAL}}


\printnoidxglossary[type=\acronymtype,title={Índice de siglas},toctitle={Índice de siglas}]

这是一个完整的例子。

\documentclass{book}

\usepackage[spanish]{babel}
\usepackage[style=authoryear,backref=true,hyperref=true,backend=biber]{biblatex}
\addbibresource{test.bib}
\usepackage[babel=true,style=spanish]{csquotes}

\usepackage{graphicx}
\usepackage[texindy]{imakeidx}
%\makeindex
\makeindex[name=names,title={Índice de autores}]
\makeindex[name=concepto,title={Índice de conceptos}]
\makeindex[name=onomastico,title={Índice onomástico}]

\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}

\usepackage[allcolors=magenta,colorlinks]{hyperref}

\usepackage{endnotes}
\renewcommand{\notesname}{}
\let\footnote=\endnote

\usepackage[acronym,sanitizesort,toc=true]{glossaries}
\makenoidxglossaries

\author{Alberto Moyano}

\title{Un nuevo mundo}

\newglossaryentry{@uombrera}{
    type=\acronymtype,
    name={UOM},
    description={Universidad Obrera de México},
    first={Universidad Obrera de México (UOM)},
    text={UOM},
    plural={},
    firstplural={}}
    
\begin{document}
\frontmatter

\maketitle

\tableofcontents

\mainmatter

\part{Una parte}

\chapter{1}

\section{Una sección del libro}

Ninguna parte de esta publicación.\footnote{Ninguna parte de esta publicación.}

\gls{@uombrera}

1\index[concepto]{concepto}

1\index[onomastico]{onomastico}

\textcite{Berg1990}

\parencite{Assali2015}

2\index[concepto]{concepto}

2\index[onomastico]{onomastico}

\section{Otra sección del libro}

Ninguna parte de esta publicación.\footnote{Ninguna parte de esta publicación.}

\textcite{Assali2015}

3\index[concepto]{concepto}

3\index[onomastico]{onomastico}

\gls{@uombrera}

\parencite{Berg1990}

4\index[concepto]{concepto}

4\index[onomastico]{onomastico}


\part{Otra parte}

\chapter{2}

\section{Una sección del libro}

Ninguna parte de esta publicación.\footnote{Ninguna parte de esta publicación.}

\gls{@uombrera}

1\index[concepto]{concepto}

1\index[onomastico]{onomastico}

\textcite{Berg1990}

\parencite{Assali2015}

2\index[concepto]{concepto}

2\index[onomastico]{onomastico}

\section{Otra sección del libro}

Ninguna parte de esta publicación.\footnote{Ninguna parte de esta publicación.}

\textcite{Assali2015}

3\index[concepto]{concepto}

3\index[onomastico]{onomastico}

\gls{@uombrera}

\parencite{Berg1990}

4\index[concepto]{concepto}

4\index[onomastico]{onomastico}

\backmatter

\chapter{Capítulo final}

Ninguna parte de esta publicación.\footnote{Ninguna parte de esta publicación.}

\chapter{Notas}
\theendnotes

\printnoidxglossary
\printnoidxglossary[type=\acronymtype,title={Índice de siglas},toctitle={Índice de siglas}]

\printbibliography

\printindex[names]
\printindex[concepto]
\printindex[onomastico]

\appendix

\end{document}

这是 bib 文件的内容。

@InCollection{Assali2015,
  hyphenation  = {spanish},
  author       = {Assali, Laura and Lombardi, Alba},
  booktitle    = {Archivos, cultura y patrimonio. I. Jornadas de reflexión sobre la construcción del archivo Centro de Documentación e Investigación de la Cultura de Izquierdas (CEDINCI)},
  date         = {2015},
  keywords     = {listar},
  pages        = {66-78},
  publisher    = {Universidad Nacional de San Martín},
  title        = {Alcances y problemáticas de la documentación de archivo de la Administración Pública Nacional. El caso del Archivo del Ministerio de Relaciones Exteriores y Culto Argentino},
  creationdate = {2023-06-24T18:46:54},
  owner        = {alberto},
}

@Article{Berg1990,
  hyphenation  = {spanish},
  author       = {Berg, Magnus},
  journaltitle = {Historia y Fuente Oral},
  keywords     = {listar},
  number       = {4},
  title        = {Algunos aspectos de la entrevista como método de producción de conocimientos},
  year         = {1990},
  creationdate = {2023-06-24T17:01:42},
  owner        = {alberto},
}

这是第二个练习,我按照 michal.h21 提供的 URL 中概述的说明进行操作。

成功率为 100%。

\documentclass{book}
\usepackage[spanish]{babel}
\usepackage[style=authoryear,backref=true,hyperref=true,backend=biber]{biblatex}

\usepackage{imakeidx}
\makeindex%indice alfabetico
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo2,title=Índice de palabras]
\makeindex[name=foo3,title=Índice de onomástico]

\begin{document}
\frontmatter

\tableofcontents

\chapter{1}
    Test1\index{index0 Test1}
    Test2\index[foo]{index1 Test2}
    Test4\index[foo2]{index2 Test4}.
    Test4\index[foo3]{index3 Test4}.

\mainmatter

\chapter{2}
    Test3\index{index0 Test3}
    Test4\index[foo]{index1 Test4}.
    And\index{index0 Test1}.
    Test4\index[foo2]{index2 Test4}.
    Test4\index[foo3]{index3 Test4}.

\backmatter

    \printindex
    \printindex[foo]
    \printindex[foo2]
    \printindex[foo3]
\end{document}

在第三个例子中,我添加了参考书目,并且所有内容都可以用英语进行操作,但切换到西班牙语时会出现错误。我附上了一张截图。

\documentclass{book}
\usepackage[american]{babel}
\usepackage[style=authoryear,backref=true,backend=biber]{biblatex}
\addbibresource{test.bib}
\usepackage{csquotes}

\usepackage[allcolors=magenta,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex%[name=names,title=Índice de autores]
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo2,title=Índice de palabras]
\makeindex[name=foo3,title=Índice de onomástico]

%\DeclareIndexNameFormat{default}{%
%   \usebibmacro{index:name}{\index[names]}
%   {\namepartfamily}
%   {\namepartgiven}
%   {\namepartprefix}
%   {\namepartsuffix}}
%\renewbibmacro*{citeindex}{%
%   \ifciteindex
%   {\indexnames{labelname}}
%   {}}

\begin{document}
\frontmatter

\tableofcontents

\chapter{1}
Test1\index{index0 Test1}
Test2\index[foo]{index1 Test2}
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\textcite{Assali2015}

\mainmatter

\chapter{2}

\parencite{Berg1990}

\cite{Assali2015}

Test3\index{index0 Test3}
Test4\index[foo]{index1 Test4}.
And\index{index0 Test1}.
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\backmatter

\printbibliography

\printindex
\printindex[foo]
\printindex[foo2]
\printindex[foo3]

\end{document}

在此处输入图片描述

可以观察到,我禁用了书目作者索引的转换,因为如果启用它,编译时会导致错误。

在这个测试中,我通过使用英语作为基础语言成功阻止了它中止。如果你检查代码,你会发现现在作者姓名索引不会中止,但它也不会出现。这是否意味着 biblatex 代码已更改?

\documentclass{book}
\usepackage[american]{babel}
\usepackage[style=authoryear,backref=true,backend=biber]{biblatex}
\addbibresource{test.bib}
\usepackage{csquotes}

\usepackage[allcolors=magenta,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex
\makeindex[name=names,title=Índice de autores]
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo2,title=Índice de palabras]
\makeindex[name=foo3,title=Índice de onomástico]

\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}

\begin{document}
\frontmatter

\tableofcontents

\chapter{1}
Test1\index{index0 Test1}
Test2\index[foo]{index1 Test2}
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\textcite{Assali2015}

\mainmatter

\chapter{2}

\parencite{Berg1990}

\cite{Assali2015}

Test3\index{index0 Test3}
Test4\index[foo]{index1 Test4}.
And\index{index0 Test1}.
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\backmatter

\printbibliography

\printindex
\printindex[names]
\printindex[foo]
\printindex[foo2]
\printindex[foo3]

\end{document}

build.lua 中实现这一点的代码是:

if mode=="draft" then 
  Make:htlatex {} 
else 
  Make:htlatex {} 
  Make:biber {} 
  Make:htlatex{} 
  Make:htlatex{}
end
Make:htlatex {} 
Make:xindy {}
Make:xindy {idxfile = "names.idx"} 
Make:xindy {idxfile = "foo.idx"}
Make:xindy {idxfile = "foo2.idx"} 
Make:xindy {idxfile = "foo3.idx"} 
Make:htlatex {}
Make:htlatex {}

在此处输入图片描述

在第 4 个示例中,我添加了创建词汇表的功能,效果 100%。参考书目作者索引仍然不起作用。

\documentclass{book}
\usepackage[american]{babel}
\usepackage[style=authoryear,backref=true,backend=biber]{biblatex}
\addbibresource{test.bib}
\usepackage{csquotes}

\usepackage[allcolors=magenta,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex
\makeindex[name=names,title=Índice de autores]
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo2,title=Índice de palabras]
\makeindex[name=foo3,title=Índice de onomástico]

\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}

\usepackage{glossaries}
\makenoidxglossaries

\newglossaryentry{latex}
{
    name=latex,description={Is a mark up language suitable for scientific documents}
}

\begin{document}
\frontmatter

\tableofcontents

\chapter{1}
Test1\index{index0 Test1}
Test2\index[foo]{index1 Test2}
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\gls{latex}

\textcite{Assali2015}

\mainmatter

\chapter{2}

\parencite{Berg1990}

\cite{Assali2015}

Test3\index{index0 Test3}
Test4\index[foo]{index1 Test4}.
And\index{index0 Test1}.
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\backmatter

\printnoidxglossary

\printbibliography

\printindex
\printindex[names]
\printindex[foo]
\printindex[foo2]
\printindex[foo3]

\end{document}

带有词汇表的屏幕截图。

在此处输入图片描述

在这第五次练习中,我添加了首字母缩略词列表,结果 100% 成功。

\documentclass{book}
\usepackage[american]{babel}
\usepackage[style=authoryear,backref=true,backend=biber]{biblatex}
\addbibresource{test.bib}
\usepackage{csquotes}

\usepackage[allcolors=magenta,colorlinks]{hyperref}

\usepackage{imakeidx}
\makeindex
\makeindex[name=names,title=Índice de autores]
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo2,title=Índice de palabras]
\makeindex[name=foo3,title=Índice de onomástico]

\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}

\usepackage[acronym,sanitizesort]{glossaries}
\makenoidxglossaries

\newglossaryentry{latex}{
    name=latex,
    description={Is a mark up language suitable for scientific documents}
}

\newglossaryentry{@aaa}{
    type=\acronymtype,
    name={AAA},
    description={Alianza Anticomunista Argentina},
    first={Alianza Anticomunista Argentina (AAA)},
    text={AAA},
    plural={},
    firstplural={}
}
    
\begin{document}
\frontmatter

\tableofcontents

\chapter{1}
Test1\index{index0 Test1}
Test2\index[foo]{index1 Test2}
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\gls{latex}

\gls{@aaa}

\textcite{Assali2015}

\mainmatter

\chapter{2}

\parencite{Berg1990}

\cite{Assali2015}

Test3\index{index0 Test3}
Test4\index[foo]{index1 Test4}.
And\index{index0 Test1}.
Test4\index[foo2]{index2 Test4}.
Test4\index[foo3]{index3 Test4}.

\backmatter

\printnoidxglossary[type=\acronymtype,title={Índice de siglas}]

\printnoidxglossary[title={Glosario de términos}]

\printbibliography

\printindex
\printindex[names]
\printindex[foo]
\printindex[foo2]
\printindex[foo3]

\end{document}

在此处输入图片描述

在此处输入图片描述

Michal,我设法让一切都正常运转了。你做得很棒,我向你表示祝贺。我的错误是我没有在 biblatex 选项中加载“indexing=cite”指令。

为了解决西班牙语的问题,我使用了多语种。

100%满意

在此处输入图片描述

我一直在进步,并设法将笔记作为一个章节放在书的末尾,并按章节分开。

\documentclass[oneside,onecolumn,openany,final]{book}
\usepackage{polyglossia}
\setmainlanguage{spanish}
\usepackage{csquotes}
\usepackage[style=philosophy-classic,
sorting=nyvt,
annotation=true,
backend=biber,
labeldateparts=true,
backref=true,
useprefix=true,
citereset=chapter,
indexing=cite,
relatedformat=brackets,
publocformat=loccolonpub,
volnumformat=strings,
latinemph=true,
inbeforejournal=true,
shorthandintro=true,
texencoding=utf8,
bibencoding=utf8,
uniquelist=minyear]{biblatex}
\usepackage{imakeidx}
\makeindex[name=names,title=Índice de autores]
\makeindex
\makeindex[name=foo,title=Índice de conceptos]
\makeindex[name=foo3,title=Índice onomástico]
\DeclareIndexNameFormat{default}{%
    \usebibmacro{index:name}{\index[names]}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}
\renewbibmacro*{citeindex}{%
    \ifciteindex
    {\indexnames{labelname}}
    {}}
\usepackage[acronym,sanitizesort]{glossaries}
\makenoidxglossaries

\newglossaryentry{latex}{
    name=latex,
    description={Is a mark up language suitable for scientific documents}
}

\newglossaryentry{@aaa}{
    type=\acronymtype,
    name={AAA},
    description={Alianza Anticomunista Argentina},
    first={Alianza Anticomunista Argentina (AAA)},
    text={AAA},
    plural={},
    firstplural={}
}

\usepackage{endnotes,chngcntr}
\def\notesname{Notas}
\let\footnote=\endnote

\makeatletter
\renewcommand\enoteheading{%
    \setcounter{secnumdepth}{-2}
    \chapter*{\notesname\markboth{}{}}
    \mbox{}\par\vskip-\baselineskip
    \let\@afterindentfalse\@afterindenttrue
}
\makeatother

\usepackage{xparse}

\let\latexchapter\chapter

\RenewDocumentCommand{\chapter}{som}{%
    \IfBooleanTF{#1}
    {\latexchapter*{#3}}
    {\IfNoValueTF{#2}
        {\latexchapter{#3}}
        {\latexchapter[#2]{#3}}%
        \addtoendnotes{%
            \noexpand\enotedivision{\noexpand\subsection}
            {\thechapter \, \unexpanded{#3}}}% \chaptername\
    }%
}
\makeatletter
\def\enotedivision#1#2{\@ifnextchar\enotedivision{}{#1{#2}}}
\makeatletter

\usepackage[allcolors=magenta,colorlinks,hyperindex=true]{hyperref}

% fin del preambulo


% base de datos bib
\addbibresource{sample.bib}

\begin{document}
\frontmatter

\tableofcontents

\chapter{Prólogo}

\section*{Sección 1}

Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.\footnote{Nota pie en el frontmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas.}

\section*{Sección 2}

\textcite{Assali2015}, Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas.\footnote{Nota pie en el frontmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas.}

Test1\index{index0 Test1}
Test2\index[foo]{index1 Test2}
Test4\index[foo3]{index3 Test4}.

\gls{latex}

\gls{@aaa}

\textcite{Assali2015}

\mainmatter

\chapter{Capítulo dentro del mainmatter}

\section{Sección 1}

Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.\footnote{Nota pie en el mainmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.}

\section{Sección 2}

\textcite{Assali2015}, Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas.\footnote{Nota pie en el mainmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.}

Test3\index{index0 Test3}
Test4\index[foo]{index1 Test4}.
And\index{index0 Test1}.
Test4\index[foo3]{index3 Test4}.

\backmatter

\chapter{Conclusiones}

\section*{Sección 1}

Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.\footnote{Nota pie en el backmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.}

\section*{Sección 2}

\textcite{Assali2015}, Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas.\footnote{Nota pie en el backmatter. Esta obra colectiva da continuidad a uno de los programas centrales impulsados por el Centro de Estudios de Historia Económica Latinoamericana y Argentina (CEHEAL) desde su creación en 2019: el estudio de las ideas y del pensamiento económico en su vínculo con la implementación de políticas económicas \parencite{Berg1990}.}

\begingroup
\parindent 0pt
\parskip 2ex
\def\enotesize{\normalsize}
\theendnotes
\endgroup

\printnoidxglossary[type=\acronymtype,title={Índice de siglas}]

\printnoidxglossary[title={Glosario de términos}]

\printbibliography[title=Referencias]

\printindex[names]
\printindex
\printindex[foo]
\printindex[foo3]


\chapter{Colofón}

La producción de este libro se realizó utilizando el lenguaje LaTeX.

\end{document}

在此处输入图片描述

在此处输入图片描述

答案1

如果我理解正确的话,当前的问题是这样的:

  1. 各种索引不起作用
  2. 索引标题不包含在目录中。

广告 1)

imakeidx软件包支持开箱即用,您的版本imakeidx.4ht不适用于当前make4ht 索引支持。

这是一个可以工作的构建文件:

if mode=="draft" then
  Make:htlatex {} 
elseif mode=="mini" then
  Make:xindy {idxfile = "names.idx"} 
else
  Make:htlatex {} 
  Make:biber {}
  Make:htlatex {} 
  Make:xindy {} 
  Make:xindy {idxfile = "foo.idx"} 
  Make:xindy {idxfile = "foo3.idx"} 
  Make:xindy {idxfile = "names.idx"} 
  Make:htlatex {}
  Make:htlatex {}
end

它支持该draft模式,因此当你想更快地编译文件时,你可以使用

$ tex4ebook -m draft -f epub3 -c config.cfg filename.tex

编译速度会快得多。如果没有-m draft选项,它会用 LaTeX 编译你的文件几次,然后运行xindybiber这样你就会得到正确的参考书目和索引。你需要对你使用的Make:xindy所有文件进行单独的调用。.idx

这些是结果索引:

在此处输入图片描述

我刚刚发现在前言中索引条目的处理中有一个错误,因为它们不包含阿拉伯数字,而是罗马数字。这是一个修复版本,make4ht-indexing.lua应该支持这一点:


local M = {}
local log = logging.new "indexing"

-- Handle accented characters in files created with \usepackage[utf]{inputenc}
-- this code was originally part of https://github.com/michal-h21/iec2utf/
local enc = {}

local licrs = {}
local codepoint2utf = unicode.utf8.char 
local used_encodings = {}

-- load inputenc encoding file
local function load_encfiles(f)
    local file= io.open(f,"r")
    local encodings = file:read("*all")
    file:close()
    for codepoint, licr in encodings:gmatch('DeclareUnicodeCharacter(%b{})(%b{})') do
        local codepoint = codepoint2utf(tonumber(codepoint:sub(2,-2),16))
        local licr= licr:sub(2,-2):gsub('@tabacckludge','')
        licrs[licr] = codepoint
    end
end

local function sanitize_licr(l)
    return l:gsub(" (.)",function(s) if s:match("[%a]") then return " "..s else return s end end):sub(2,-2)
end

local load_enc = function(enc)
  -- use default encodings if used doesn't provide one
  enc = enc or  {"T1","T2A","T2B","T2C","T3","T5", "LGR"}
    for _,e in pairs(enc) do
        local filename = e:lower() .. "enc.dfu"
    -- don't process an enc file multiple times
    if not used_encodings[filename] then
      local dfufile = kpse.find_file(filename)
      if dfufile then
        load_encfiles(dfufile)
      end
    end
    used_encodings[filename] = true
    end
end



local cache = {}

local get_utf8 = function(input)
    local output = input:gsub('\\IeC[%s]*(%b{})',function(iec)
    -- remove \protect commands 
    local iec = iec:gsub("\\protect%s*", "")
        local code = cache[iec] or licrs[sanitize_licr(iec)] or '\\IeC '..iec
        -- print(iec, code)
        cache[iec] = code
        return code
    end)
    return output
end


-- parse the idx file produced by tex4ht
-- it replaces the document page numbers by index entry number
-- each index entry can then link to place in the HTML file where the
-- \index command had been used

local parse_idx = function(content)
  -- index entry number
  local current_entry = 0
  -- map between index entry number and corresponding HTML file and destination
  local map = {}
  local buffer = {}

  for line in content:gmatch("([^\n]+)") do
    if line:match("^\\beforeentry") then
      -- increment index entry number
      current_entry = current_entry + 1
      local file, dest = line:match("\\beforeentry%s*{(.-)}{(.-)}")
      map[current_entry] = {file = file, dest = dest}
    elseif line:match("^\\indexentry") then
      -- replace the page number with the current
      -- index entry number
      local result = line:gsub("%b{}$", "{"..current_entry .."}")
      print(line, result)
      buffer[#buffer+1] = get_utf8(result)
    else
      buffer[#buffer+1] = line
    end
  end
  -- return table with page to dest map and updated idx file
  return {map = map, idx = table.concat(buffer, "\n")}
end

-- replace page numbers in the ind file with hyperlinks
local fix_idx_pages = function(content, idxobj)
  local buffer = {}
  local entries = idxobj.map
  for  line in content:gmatch("([^\n]+)")  do
    local line = line:gsub("(%s*\\%a+.-%,)(.+)$", function(start,rest)
      -- there is a problem when index term itself contains numbers, like Bible verses (1:2),
      -- because they will be detected as page numbers too. I cannot find a good solution 
      -- that wouldn't break something else.
      return start .. rest:gsub("(%d+)", function(page)
        local entry = entries[tonumber(page)]
        if entry then
          -- construct link to the index entry
          return "\\Link[" .. entry.file .."]{".. entry.dest .."}{}" .. page .."\\EndLink{}" 
        else
          return page
        end
      end)
    end)
    buffer[#buffer+1] = line 
  end
  return table.concat(buffer, "\n")
end

-- prepare the .idx file produced by tex4ht
-- for use with Xindy or Makeindex
local prepare_idx = function(filename)
  local f = io.open(filename, "r")
  if not f then return nil, "Cannot open file :".. tostring(filename) end
  local content = f:read("*all")
  local idx = parse_idx(content)
  local idxname = os.tmpname()
  local f = io.open(idxname, "w")
  f:write(idx.idx)
  f:close()
  -- return the object with mapping between dummy page numbers 
  -- and link destinations in the files, and the temporary .idx file
  -- these can be used for the processing with the index processor
  return idx, idxname
end

-- add links to a index file
local process_index = function(indname, idx)
  local f = io.open(indname,  "r")
  if not f then return  nil, "Cannot open .ind file: " .. tostring(indname) end
  local content = f:read("*all")
  f:close()

  local newcontent = fix_idx_pages(content, idx)
  local f = io.open(indname,"w")
  f:write(newcontent)
  f:close()
  return true
end

local get_idxname = function(par)
  return par.idxfile or par.input .. ".idx"
end

local prepare_tmp_idx = function(par)
  par.idxfile = get_idxname(par)
  if not par.idxfile or not mkutils.file_exists(par.idxfile) then return nil, "Cannot load idx file " .. (par.idxfile or "''") end
  -- construct the .ind name, based on the .idx name
  par.indfile = par.indfile or par.idxfile:gsub("idx$", "ind")
  load_enc()
  -- save hyperlinks and clean the .idx file
  local idxdata, newidxfile = prepare_idx(par.idxfile)
  if not idxdata then
    -- if the prepare_idx function returns nil, the second reuturned value contains error msg
    return nil, newidxfile
  end
  return  newidxfile, idxdata
end


local splitindex = function(par)
  local files = {}
  local idxfiles = {}
  local buffer 
  local idxfile = get_idxname(par)
  if not idxfile or not mkutils.file_exists(idxfile) then return nil, "Cannot load idx file " .. (idxfile or "''") end
  for line in io.lines(idxfile) do
    local file = line:match("indexentry%[(.-)%]")
    if file then
      -- generate idx name for the current output file
      file =  par.input .. "-" ..file .. ".idx"
      local current = files[file] or {}
      -- remove file name from the index entry
      local indexentry = line:gsub("indexentry%[.-%]", "indexentry")
      -- save the index entry and preseding line to the current buffer
      table.insert(current, buffer)
      table.insert(current, indexentry)
      files[file] = current
    end
    -- 
    buffer = line
  end
  -- save idx files
  for filename, contents in pairs(files) do
    log:info("Saving split index file: " .. filename)
    idxfiles[#idxfiles+1] = filename
    local f = io.open(filename, "w")
    f:write(table.concat(contents, "\n"))
    f:close()
  end
  return idxfiles
end

local function run_indexing_command (command, par)
  -- detect command name from the command. It will be the first word
  local cmd_name = command:match("^[%a]+") or "indexing"
  local xindylog  = logging.new(cmd_name)
  -- support split index
  local subindexes = splitindex(par) or {}
  if #subindexes > 0 then
    -- call the command again on all files produced by splitindex
    for _, subindex in ipairs(subindexes) do
      -- make copy of the parameters
      local t = {}
      for k,v in pairs(par) do t[k] = v end
      t.idxfile = subindex
      run_indexing_command(command, t)
    end
    return nil
  end
  local newidxfile, idxdata = prepare_tmp_idx(par)
  if not newidxfile then
    -- the idxdata will contain error message in the case of error
    xindylog:warning(idxdata)
    return false
  end
  par.newidxfile = newidxfile
  xindylog:debug("Prepared temporary idx file: ", newidxfile)
  -- prepare modules
  local xindy_call = command % par
  xindylog:info(xindy_call)
  local status = mkutils.execute(xindy_call)
  -- insert correct links to the index
  local status, msg = process_index(par.indfile, idxdata)
  if not status then xindylog:warning(msg) end
  -- remove the temporary idx file
  os.remove(newidxfile)
  -- null the indfile, it is necessary in order to support
  -- multiple indices
  par.indfile = nil
end


M.get_utf8 = get_utf8
M.load_enc = load_enc
M.parse_idx = parse_idx
M.fix_idx_pages = fix_idx_pages
M.prepare_idx = prepare_idx
M.process_index = process_index
M.prepare_tmp_idx = prepare_tmp_idx
M.run_indexing_command = run_indexing_command
return M

广告2)

\chapter*\section*用于索引标题的命令默认不包含在目录中。您可以使用以下配置文件更改此设置:

\Preamble{xhtml}
\Configure{AddCss}{blitz-lite.css}
\Css{.partimage{margin:0 auto;text-align:center;}}
\Css{.partimage img{max-width:100\%;}}
\Css{.partHead .titlemark{display:block;}}
\DeclareGraphicsExtensions{.svg,.png,.jpg,.pdf}
\renewcommand\tableofcontents{%
\ifvmode\IgnorePar\fi\EndP\HCode{<h2>\contentsname</h2>}%
\TableOfContents[ part,chapter,likechapter,section,likesection,subsection ]
}

%\Configure{tableofcontents*}{part,chapter,likechapter,section,subsection}
\begin{document}
\EndPreamble

它重新定义了\tableofcontents命令,因此它还包括\chapter*\section*感谢\TableOfContents[ part,chapter,likechapter,section,likesection,subsection]。这是一个特殊的 TeX4ht 命令,可以选择哪些部分类型应包含在目录中。like...对应于带星号的分段命令版本。

在此处输入图片描述

相关内容