我正在尝试使用 tex4ebook 将藏文文本的英文注释转换为 ePub,其中包含一些藏文咒语和有用的发音。以下 test.tex 是一个例子:
% !TEX encoding = UTF-8 Unicode
\documentclass[12pt,oneside]{book}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{ctib}
\begin{document}
Some text ...
O\d{M} \=A\d{H} H\=U\d{M}
{\tib \om, ma nxi pa\V{de}{ma} \hung \hrih:}
\end{document}
编译结果如下,符合预期:
lualatex test.tex or pdflatex test.tex
为了创建我正在尝试的 epub 版本:
tex4ebook -l -c config test.tex
结束 config.cfg 是:
\Preamble{xhtml}
\CutAt{section}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}
\Configure{graphics*}
{svg}
{\Picture[pict]{\csname Gin@base\endcsname.svg
\space style="width:\CalcRem{\Gin@req@width}em;"
}%
\special{t4ht+@File: \csname Gin@base\endcsname.svg}
}
\DeclareGraphicsExtensions{.svg,.png,.jpg}
\begin{document}
\newcommand\AddFontFace[4]{%
\Css{@font-face {
font-family: #1;
src: local("#2"),
url('#3');
#4
}}
\special{t4ht+@File: #3}
}
\edef\CurrentFontFamily{rmfamily}
\newcommand\SetFontFamily[1]{
\edef\CurrentFontFamily{#1}
}
\newcommand\NormalFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: normal;font-style: normal;}}
\newcommand\BoldFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: bold;font-style: normal;}}
\newcommand\ItalicFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: normal;font-style: italic;}}
\newcommand\BoldItalicFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: bold;font-style: italic;}}
问题在于 ePub 版本中关于咒语和变音符号的输出。如能得到任何帮助,我将不胜感激。谢谢。
答案1
存在两个问题:带点的重音符号字母被转换成图片,藏文文本混合了 Unicode 字母和图片,并且缺少一些字母:
我们必须为每个带点重音符号的字母提供 Unicode 值配置。我查看了重音命令的配置方式,tex4ht
找到了以下配置:
\expand:after{\expand:after{\Configure{accent}}%
\csname OT1\string\d\endcsname}%
\csname OT1\string\d\endcsname{{}{}}
{\a:accents{d}{#1}} {\b:accents{d}{#1}{#2}}
它看起来有点神秘,但重点是应该在这个地方有一个字母列表,后面跟着组合字母的 Unicode 代码点:\csname OT1\string\d\endcsname{{}{}}
。当缺少字母的配置时,它将转换为图像,如您的示例中所示。
它看起来应该是这样的:
\expand:after{\expand:after{\Configure{accent}}%
\csname OT1\string\d\endcsname}%
\csname OT1\string\d\endcsname{A{1EA0}a{1Ea1}B{1E04}b{1E05}D{1E0C}d{1E0D}%
E{1EB8}e{1EB9}H{1E24}h{1E25}I{1ECA}i{1ECB}%
K{1E32}k{1E33}L{1E36}l{1E37}M{1E42}m{1E43}%
N{1E46}n{1E47}O{1ECC}o{1ECD}R{1E5A}r{1E5B}%
S{1E62}s{1E63}T{1E6C}t{1E6D}U{1EE4}u{1EE5}%
V{1E7E}v{1E7F}W{1E88}w{1E89}Y{1EF4}y{1EF5}%
{}{}}
{\a:accents{d}{#1}} {\b:accents{d}{#1}{#2}}
关于咒语,ctib
使用一些 Metafont 技巧将音译文本转换为图像。期望它完美地翻译成 Unicode 似乎不太现实,所以我会将其转换为图像。您可以引入一些简单的命令,这些命令将在文档中使用:
\newcommand\mantra[1]{\bgroup\tib #1\egroup}
...
\mantra{\om, ma nxi pa\V{de}{ma} \hung \hrih:}
并在配置文件中重新定义它:
\renewcommand\mantra[1]{\Picture+{}\bgroup\tib #1\egroup\EndPicture}
完整的配置文件如下所示:
\Preamble{xhtml}
\CutAt{section}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}
\Configure{graphics*}
{svg}
{\Picture[pict]{\csname Gin@base\endcsname.svg
\space style="width:\CalcRem{\csname Gin@req@width\endcsname}em;"
}%
\special{t4ht+@File: \csname Gin@base\endcsname.svg}
}
\DeclareGraphicsExtensions{.svg,.png,.jpg}
\begin{document}
\newcommand\AddFontFace[4]{%
\Css{@font-face {
font-family: #1;
src: local("#2"),
url('#3');
#4
}}
\special{t4ht+@File: #3}
}
\edef\CurrentFontFamily{rmfamily}
\newcommand\SetFontFamily[1]{
\edef\CurrentFontFamily{#1}
}
\newcommand\NormalFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: normal;font-style: normal;}}
\newcommand\BoldFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: bold;font-style: normal;}}
\newcommand\ItalicFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: normal;font-style: italic;}}
\newcommand\BoldItalicFont[2]{\AddFontFace{\CurrentFontFamily}{#1}{#2}{font-weight: bold;font-style: italic;}}
% patch for \mantra command
\renewcommand\mantra[1]{\Picture+{}\bgroup\tib #1\egroup\EndPicture}
% Use the following configuration if you want to convert mantras to SVG instead of PNG
% Note that the compilation time is longer and the resulting SVG file much bigger
% \Configure{Picture}{.svg}
% Configuration for \d accent
\catcode`\:=11
\expand:after{\expand:after{\Configure{accent}}%
\csname OT1\string\d\endcsname}%
\csname OT1\string\d\endcsname{A{1EA0}a{1Ea1}B{1E04}b{1E05}D{1E0C}d{1E0D}%
E{1EB8}e{1EB9}H{1E24}h{1E25}I{1ECA}i{1ECB}%
K{1E32}k{1E33}L{1E36}l{1E37}M{1E42}m{1E43}%
N{1E46}n{1E47}O{1ECC}o{1ECD}R{1E5A}r{1E5B}%
S{1E62}s{1E63}T{1E6C}t{1E6D}U{1EE4}u{1EE5}%
V{1E7E}v{1E7F}W{1E88}w{1E89}Y{1EF4}y{1EF5}%
{}{}}
{\a:accents{d}{#1}} {\b:accents{d}{#1}{#2}}
\catcode`\:=12
\EndPreamble
结果如下: