在 tex4ebook 中使用 imakeidx 和 Polyglossia 来翻译梵文

在 tex4ebook 中使用 imakeidx 和 Polyglossia 来翻译梵文

我正在尝试使用 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"使用时,这并不能完美地工作。以下是五个问题:

  1. 天城体连字不适用于\maketitle命令中的作者姓名,见下图:

封面

  1. 当我使用 Pandoc 准备电子书时,会在左上角靠近书本图标的位置创建目录。使用 tex4book 时不会发生这种情况。我发现 pandoc 创建的目录对电子书更有用。将以下屏幕截图(使用 Pandoc 准备的电子书)与上面 1 中的屏幕截图进行比较: 在此处输入图片描述 而且,intoc参数 for\makeindex不会使索引出现在目录中。
  2. 据我所知,如果使用 (Xe)LaTeX,我写的序言足以在文档中使用天城文数字。但是,tex4ebook 使用阿拉伯数字作为章节和页码。请参阅下面的屏幕截图和下一点: 在此处输入图片描述
  3. XeLaTeX 将索引标题设为“सूची”,代表马拉地语。我使用软件包制作的另一个索引imakeidx在使用 XeLaTeX 时会显示相应的标题。但是,tex4ebooks 根本没有为任何索引添加标题。请参见屏幕截图:在此处输入图片描述
  4. 最后,即使使用包,tex4ebook 也没有创​​建超链接hyperref

我不习惯 TeX,也存在开发问题,但我能熟练使用 LaTeX。以下这次讨论根据 Michal 发给我的内容,我imakeidx.4ht在目录中创建了文件/usr/local/texlive/2018/texmf-dist/tex/generic/tex4ht/。(不过,这可能听起来很愚蠢,)我还尝试idxmake.4ht用上面讨论的答案中讨论的内容替换内容。但是,没有成功。

答案,可能的话,带有分步说明和一些解释会很有用。imakeidx欢迎对非拉丁文字的 Polyglossia 的使用进行一般性解释!提前致谢!

注意:\setmainlanguage{marathi}可能不起作用;在这种情况下,使用sanskrithindi作为语言,并忽略可能以英语出现的索引名称。仅供参考,我正在使用 MacTeX 2018。

答案1

您发现了很多问题。我在tex4httex4ebook和中也发现了问题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

还需要安装MarathiXindy 支持,来自兹德涅克·瓦格纳 (Zdeněk Wagners) 页面

这是结果索引:

在此处输入图片描述

编译所用的命令是:

tex4ebook -e mybuild.mk4 -xf epub3+common_domfilters  -c mycfg.cfg filename.tex

还有一些问题,例如目录中缺少索引标题或目录中缺少阿拉伯数字。我可以稍后调查这些问题。

相关内容