我正在尝试使用 Polyglossia 和 tex4ebook 软件包创建一本马拉地语电子书。以下是我按照 @michal.h21 的说明准备的 MWE(这些说明用于生成仅包含文本的 MWE,效果很好,感谢 Michal):
\documentclass{article}
%Setting Marathi as main language and Shobhika as main font using package Polyglossia.
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage[numerals=devanagari]{marathi}
\setmainfont[Script=Devanagari, Mapping=devanagarinumerals]{Shobhika}
\newfontfamily\marathifont[Script=Devanagari, Mapping=devanagarinumerals]{Shobhika}
%Index detail
\usepackage{imakeidx}
\makeindex[name=Art,title={लेखांची सूची},intoc]
\makeindex[intoc]
\begin{document}
\author{रोहित दिलीप होळकर}
\title{मराठी ई-पुस्तक}
\maketitle
\tableofcontents
\section{ई-बुक}
टेक्-४-ई-बुक पॅकेज वापरून मराठी इ-पुस्तके बनवणे.
\section{सूचीकरीता लिखाण}
मी टेक्-४-ई-बुक पॅकेज \index[Art]{पुस्तक! ई-पुस्तक} वापरून पुस्तक\index{पुस्तक} बनवण्याचा प्रयत्न करीत आहे.
\printindex
\printindex[Art]
\end{document}
% Local Variables:
% TeX-engine: xetex
% End:
使用 XeLaTeX 时,这将产生所需的输出——默认索引是标题“सूची”,另一个是“लेखांची सूची”。如果使用 Hyperref,则会产生超链接。但是,在tex4ebook -x "tex-file"
使用时,这并不能完美地工作。以下是五个问题:
- 天城体连字不适用于
\maketitle
命令中的作者姓名,见下图:
- 当我使用 Pandoc 准备电子书时,会在左上角靠近书本图标的位置创建目录。使用 tex4book 时不会发生这种情况。我发现 pandoc 创建的目录对电子书更有用。将以下屏幕截图(使用 Pandoc 准备的电子书)与上面 1 中的屏幕截图进行比较:
而且,
intoc
参数 for\makeindex
不会使索引出现在目录中。 - 据我所知,如果使用 (Xe)LaTeX,我写的序言足以在文档中使用天城文数字。但是,tex4ebook 使用阿拉伯数字作为章节和页码。请参阅下面的屏幕截图和下一点:
- XeLaTeX 将索引标题设为“सूची”,代表马拉地语。我使用软件包制作的另一个索引
imakeidx
在使用 XeLaTeX 时会显示相应的标题。但是,tex4ebooks 根本没有为任何索引添加标题。请参见屏幕截图: - 最后,即使使用包,tex4ebook 也没有创建超链接
hyperref
。
我不习惯 TeX,也存在开发问题,但我能熟练使用 LaTeX。以下这次讨论根据 Michal 发给我的内容,我imakeidx.4ht
在目录中创建了文件/usr/local/texlive/2018/texmf-dist/tex/generic/tex4ht/
。(不过,这可能听起来很愚蠢,)我还尝试idxmake.4ht
用上面讨论的答案中讨论的内容替换内容。但是,没有成功。
答案,可能的话,带有分步说明和一些解释会很有用。imakeidx
欢迎对非拉丁文字的 Polyglossia 的使用进行一般性解释!提前致谢!
注意:\setmainlanguage{marathi}
可能不起作用;在这种情况下,使用sanskrit
或hindi
作为语言,并忽略可能以英语出现的索引名称。仅供参考,我正在使用 MacTeX 2018。
答案1
您发现了很多问题。我在tex4ht
、tex4ebook
和中也发现了问题make4ht
。我不得不修复很多文件,因此无法在此处发布正确的版本,否则这篇文章会太大。需要等待几天,直到 TL 中的所有内容都修复完毕(是的,它只能在 TL 2018 中工作,我不确定 Miktex 是否适用)。
广告 1)
title 以不同的字体打印,并且由于 中的错误tex4ht
,所有字符都包裹在<span>
元素中。一些查看器可以正确显示它,而其他查看器(如您的电子书查看器)会单独显示它们,从而导致渲染错误。您可以使用tex4ebook
扩展修复它common_domfilters
,它将连续的<span>
元素合并为一个。然后它就可以正确显示了。
要请求它,请使用:
tex4ebook -xf epub3+common_domfilters filename.tex
第二 1)
tex4ebook
创建目录,我不知道为什么它在你的查看器中不起作用:
广告2)
tex4ht
重新定义部分,因此它不使用梵文数字。可以使用配置来修复它,稍后我将展示。
广告 3)
这是由 XeTeX 处理 Unicode 的方式引起的tex4ht
。它仅在序言之后启用,这意味着 Polyglossia 声明的名称不起作用。我在源代码中修复了这个问题,但需要几天时间才能更新所有内容。尝试以下更新的 TeX 文件:
\documentclass{article}
%Setting Marathi as main language and Shobhika as main font using package Polyglossia.
\usepackage{fontspec}
\setmainfont[Script=Devanagari, Mapping=devanagarinumerals]{Shobhika}
\newfontfamily\marathifont[Script=Devanagari, Mapping=devanagarinumerals]{Shobhika}
\usepackage{polyglossia}
\setmainlanguage[numerals=devanagari]{marathi}
%Index detail
\usepackage[noautomatic,xindy]{imakeidx}
\makeindex[name=Art,title={लेखांची सूची},intoc]
\makeindex[intoc]
\begin{document}
\author{रोहित दिलीप होळकर}
\title{मराठी ई-पुस्तक}
\maketitle
\tableofcontents
\section{ई-बुक}
टेक्-४-ई-बुक पॅकेज वापरून मराठी इ-पुस्तके बनवणे.
\section{सूचीकरीता लिखाण}
मी टेक्-४-ई-बुक पॅकेज \index[Art]{पुस्तक! ई-पुस्तक} वापरून पुस्तक\index{पुस्तक} बनवण्याचा प्रयत्न करीत आहे.
\subsection{subsection}
xxx
\printindex
\printindex[Art]
\end{document}
% Local Variables:
% TeX-engine: xetex
% End:
Script=Devanagari
在加载 Polyglossia 之前,必须声明一些带有选项的字体!
广告4)
Xindy 必须使用特殊配置才能使索引链接正常工作。它还使用章节号而不是页码作为索引位置,因为页面不再存在。
配置由以下机构提供:indexing4ht
包提供,它是helpers4htbundle,需要手动安装。
以下配置文件mycfg.cfg
修复了索引和天城体部分编号的一些问题:
\usepackage{indexing4ht}
\Preamble{xhtml}
\Configure{textbf}{\ifvmode\EndP\fi\HCode{<strong>}\NoFonts}{\EndNoFonts\HCode{</strong>}}
\begin{document}
\ConfigureMark{section}{\devanagaridigits{\number\thesection}}
\makeatletter
\ConfigureMark{subsection}{\devanagaridigits{\number\c@section.}\devanagaridigits{\number\c@subsection}}
\def\tocsection#1#2#3{\par
\HCode{<span class="sectionToc" \csname a:LRdir\endcsname>}\def\@temp{#1}\ifx \@temp\empty\else
\devanagaridigits{#1} \fi #2\HCode{</span>}\par}
\expandafter\def\csname toc:num\endcsname#1#2#3{\def\@temp{#1#2}%
\HCode{<span class="#1Toc" \csname a:LRdir\endcsname>}\ifx \@temp\empty
\else \def\@temp{#2}\ifx\@temp\empty\else \devanagaridigits{#2} \fi \fi #3\HCode{</span>}}
\renewcommand\idxkeyword[1]{%
\global\advance\idxkwdcnt by 1\relax%
\csname a:IdxKW\endcsname{}{idxkw\the\idxkwdcnt}#1\csname b:IdxKW\endcsname
}
% print index locators. make links to destinations in document
\renewcommand\idxlocator[1]{%
\ifTag{sec#1}{\csname a:locatorlink\endcsname{\Ref{sec#1}}{}\devanagaridigits{#1}\csname b:locatorlink\endcsname}{#1}%
}
\makeatother
\EndPreamble
要调用 Xindy,需要使用构建文件mybuild.mk4
:
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"})
Make:htlatex {}
Make:xindy {modules = {"filename"}, language = "marathi"}
Make:xindy {modules = {"filename"}, language = "marathi", idxfile = "Art.idx"}
Make:htlatex {}
模块应包含filename
与 TeX 文件的基本名称相同的内容。idxfile
在第二次调用 Xindy 时,默认Art.idx
使用第一次调用。filename.idx
还需要安装Marathi
Xindy 支持,来自兹德涅克·瓦格纳 (Zdeněk Wagners) 页面
这是结果索引:
编译所用的命令是:
tex4ebook -e mybuild.mk4 -xf epub3+common_domfilters -c mycfg.cfg filename.tex
还有一些问题,例如目录中缺少索引标题或目录中缺少阿拉伯数字。我可以稍后调查这些问题。