我正在创建一个模板来生成 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)
该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 编译你的文件几次,然后运行xindy
,biber
这样你就会得到正确的参考书目和索引。你需要对你使用的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...
对应于带星号的分段命令版本。