这开始是一条旧帖子中的评论,但我想我将其作为论坛的一个问题重新发布在这里......
我正在寻找一种工作流程,可以高效可靠地将包含大量(有时)复杂嵌入式数学知识的现有 LaTeX 文档(例如书籍)转换为高质量的 ePub,这些 ePub 可以在 iOS6 下的 iBooks 中很好地显示,理想情况下也可以在其他阅读器上很好地显示(优先级较低)。
我一直在研究 LateXML、TeX4ht、plasTeX、XhtmLaTeX、pandoc、ebook-convert 和 tbook DTD(它以 XML 而不是 LaTeX 开始,因此主要对新文档很有前景)。所有这些工具似乎都有很多用处,但据我所知,没有一个工具能让我在没有大量手动干预的情况下到达终点(这意味着也需要大量的学习/调试)。我还没有决定哪条路值得投入时间和精力。期待最新的评估。
我要指出的是,我已经发布了一本 ePub 教科书,其中的方程式以 SVG 格式呈现,它在 iOS5 下的 iBooks 中显示得非常好。不幸的是,iOS6 破坏了它,电子书现在变成了一个虚拟镇纸。我正在尝试恢复并将同一本书恢复为可用的 ePub 格式,以很好地呈现方程式。
如果这是解决问题最不痛苦的手段,我不介意投资商业产品,但我更愿意基于 Mac OS X 的开源工具构建基于脚本的工作流程。
答案1
您遇到的基本问题是 epub 格式不成熟。
如果出版商已经准备好制作 epub 2,那么制作小说的 epub 3 就非常容易了,而且 epub 3 版本通常可以在为 epub 2 设计的阅读器上正常运行。
然而,到目前为止,在让出版商和设备制造商采用新奇的 epub 3 功能(如 mathml)方面似乎进展非常缓慢。这可能是一个经济问题。出版商无法挥动魔杖在他们的目录上为所有书籍中出现的所有方程式制作 mathml;对他们来说,这将是一项昂贵的逐案工作。他们的利润来源是 K-12 和大学教科书,其中大多数都是以不适合手持设备的大格式设计的。由于出版商几乎没有经济动机开始销售带有 mathml 的 epub 3,硬件制造商也没有经济动机开始在他们的设备中支持 mathml。苹果似乎对他们的一些设备提供了部分、糟糕的支持。与此同时,亚马逊对在他们的格式上实现数学运算毫无兴趣。我希望我能抱有一丝希望,希望这个问题能尽快得到解决,但坦率地说,在浏览器中使用 mathml 的体验并不鼓励这样的希望。例如,维基百科这么多年了仍然没有做 mathml。由于所有这些因素,在获得用于制作 epub 3+mathml 的良好开源工具方面基本上没有太大进展。
由于 epub 3+mathml 不太可能在不久的将来变得优秀和成熟,因此值得考虑完全不投入大量精力将书籍转换为这种格式。
话虽如此,我确实有过尝试这样做的经验。基本上 epub 就是 xhtml,所以如果你能从 latex 中获得 xhtml+mathml 输出,那么你离拥有一本可用的 epub 3+mathml 书就不远了。已经有很多工具可以将 latex 转换为 html。(你在问题中列出了它们。)
有一个名为 calibre 的开源程序,它可以将任何有效的 XHTML 1.1 + CSS 2.1 文档转换为有效的 epub 2。我所做的是生成 xhtml 输出,使用 calibre 将其转换为 epub 2,然后修补 epub 2 以尝试使其成为有效的 epub 3。(根据规范,Calibre 无法输出 epub 3+mathml,不幸的是,开发人员似乎对此毫无热情:http://www.mobileread.com/forums/showpost.php?p=1904668&postcount=7。)我的书和我为修补编写的脚本都是开源的,因此任何想要修改它们的人都欢迎:https://github.com/bcrowell/calculus。从 Andrew Stacey 的页面简单浏览一下,似乎他所采用的方法非常相似。
我能制作的最佳 epub 3 输出在这里:http://www.lightandmatter.com/calc/。我没有 iAnything,但我让我的一个学生在他的设备上向我展示了它,基本上它似乎已经工作了,因为 Apple 已经在设备上正确实现了 mathml。(不过,他们当时(大约一年前)的实现相当糟糕。例如,积分符号显示为方框。)
请不要考虑尝试使用 mathjax。据我所知,大多数阅读器根本不支持 epub 3 中的 javascript。坦率地说,我不希望在我拥有的电子书阅读器上激活该功能。(想想广告、动画、令人讨厌的特殊用户界面,例如 DVD 开头不可跳过的内容。)让我们记住,mathjax 是一个执行精美的临时解决方案,其唯一目的是掩盖微软未能在 IE 中实现 mathml 的失败。即使在台式计算机上,它的性能也可能很差,而在手持设备上,它的性能可能会很糟糕。epub 3 标准提供了一种执行 mathml 的标准方法,因此这是在这些设备上执行 mathml 的正确方法。
测试是个问题。我使用开源 Java 程序 epubcheck 来检查我的 epub 输出是否有效。但是,仅仅因为 epubcheck 说它是有效的,并不意味着它会在手持设备上正确呈现。可能在十年或更长的时间内,有些人的设备可以处理 epub 3+mathml,而其他人的设备则不能。Calibre 0.8.66+ 可以正确显示 epub+mathml,但它使用 mathjax,这与手持阅读器上 mathml 的实现完全不同。Calibre 目前根本不输出 epub 3,这就是我编写脚本来修补其输出以使其成为有效的 epub 3 的原因。
答案2
(这实际上是对本的回答的评论,但有点长。)
总体而言,我同意 Ben 对当前形势的看法。前景有些暗淡。不过,我认为还是有几丝曙光让我对取得一些进展抱有一点希望。
正如 Ben 所说,ePub 非常像 XHTML。因此,如果您可以生成有效的 XHTML+MathML 文档,那么您可以通过 calibre 的转换工具生成 ePub3(阅读 calibre 的文档时,必须小心区分查看者其余的,我认为是浏览器不支持 MathML - 但见下文)。现在 Webkit(Safari 和 Chrome 的官方版本)已正式支持 MathML,因此浏览器对 MathML 的支持正在增加(见http://caniuse.com/mathml就目前的情况而言)。因此,如果你将制作电子书视为制作网页的一个分支,即你为网页做了所有艰苦的工作,然后对其进行一些调整以制作电子书,那么制作电子书版本似乎并不是一个坏主意。
在此基础上,Apple 的 iBooks 基于 Webkit,因此无论 Webkit 做什么,iBooks 都会做(某种程度上)。这不仅意味着 iBooks 的数学支持比人们预期的要好,而且在计算机行业,一旦一个团队做了某件事,其他人就会觉得他们也必须这样做。所以希望 iBooks 能够做到这一点这一事实会激励其他人也这样做。
Calibre 的查看器现在支持 MathML使用 MathJaX:http://manual.calibre-ebook.com/typesetting_math.html也就是说,MathJaX 嵌入到查看器中,您无需将其添加到电子书中。请注意,这意味着现在将 MathJaX 添加到电子书中几乎没有意义:大多数电子书阅读器不支持 javascript,其中两个主要支持 javascript 的是 Calibre 和 iBooks,它们现在都有自己的处理 MathML 的方式。
这是先有鸡还是先有蛋的问题。如果没有合适的阅读软件,没有人会对制作数学电子书感兴趣,但如果没有书籍的需求,没有人会编写软件。但如果有一些优秀的数学电子书的例子,即使只在某个平台上运行,也能真正展示媒体的优势,那么更多的人会想要制作它们。再说一次,你可以通过 XHTML 页面制作电子书这一事实意味着制作这样一本书的真正努力并没有白费。
我还没有看过 Ben 的设置(但我会看的)。我的代码可以在以下网址找到:http://www.math.ntnu.no/~stacey/code/LaTeXporter(抓取文件或将 bzr 指向该位置)。您还需要 itex2MML(http://www.math.ntnu.no/~stacey/code/itexToMML- 我在官方版本中添加了一些内容)来进行最终转换。我的代码是极其实验性的。那里有一个文件,diffloop.tex
是使用代码的一个例子。要编译它,您需要执行以下操作:
pdflatex diffloop.tex
pdftotext -enc ASCII7 -nopgbrk -layout diffloop.pdf
itex2MML.pl < diffloop.txt > diffloop.xhtml
itex2MML.pl
脚本在哪里:
#! perl -w
use ItexToMML;
use MathML::Entities;
my $itex = new ItexToMML;
my $src;
while (<>) {
$src .= $_;
}
my $res = $itex->html_filter($src);
my $utf8 = name2numbered($res);
print $utf8;
(MathML::Entities
可在 CPAN 上获取)
转换实体的关键在于 Webkit 不能正确处理命名实体。
然后我使用 Calibre 将其转换为 epub。您可以在以下网址查看结果http://loopspace.mathforge.org/discussion/15/the-differential-topology-of-loop-spaces
答案3
您可以使用 Michal Hoftich 的 tex4ebook 工具(https://github.com/michal-h21/tex4ebook)。此工具不仅可以转换为 epub,还可以转换为 epub3 和 mobi。有一个有趣的例子https://github.com/michal-h21/epub3sample(并使用 LaTeX 源转换数学书)。
转换后的书使用 svg 进行数学运算,看起来不错,但我唯一的 epub 3 阅读器是 readium。该工具使用 TeX4ht 作为主引擎和一些 lua 脚本,我只是在测试 tex4ebook(使用 TL 2012)。它很简单……可能需要自定义配置文件以满足需求。
了解结果在 iPad 上显示如何将会很有趣。
答案4
我找到了一个对我来说足够的解决方法:
- 首先我使用 htlatex (tex4ht),但是图像太小了
- 我编辑
tex4ht.env
,设置Gvipng -T tight -x
2800
-D
144
,但小方程太大了…… - 我在python中使用以下脚本:
#!/usr/bin/env python
import os
import Image as im
cmd=os.popen("ls *png")
res=cmd.read()
l=res.split()
cmd=os.popen("ls *lg")
res=cmd.read()
lg=res.split()[0]
cmd=os.popen("ls *idv")
res=cmd.read()
idv=res.split()[0]
filelg=open(lg)
dic={}
import re
def iniat():
for line in filelg:
if line.find("- needs")!=-1:
line2=line.split()
a=line2[3]
b=line2[5]
a2=re.split('[\[\]]', a)
a3=a2[1]
dic[b]=a3
def exec1():
print dic
for file in l:
ima=im.open(file)
w,h=ima.size
if w<1400:
a=dic[file]
s="dvipng -T tight -x 2800 -D 72 -bg Transparent -pp {}:{} {} -o {}".format(a, a, idv, file)
os.system(s)
iniat()
exec1()
- 这个脚本简化了小方程式。我
index.html
用 calibre 转换文件 - 但是 calibre 会调整图片大小(当然有一个参数可以避免这种情况)。所以我解压 epub,将图片替换为之前的图片,然后重新压缩 epub。结果在我的 kindle 上运行良好。
此致。