Та самая читалка
Можно ли читать на мобильных устройствах тексты с формулами – статьи, учебники? В принципе можно, если у устройства достаточно большой экран. На 10-дюймовом планшете типичные PDF-файлы выглядят неплохо. Но уже на 7-дюймовом устройстве (скажем, на популярном Kindle последних моделей) чтение обычного PDF превращается в муку. Приходится либо уменьшать текст до неразличимого размера, либо поворачивать электронную книгу набок и читать сперва верхнюю половинку текста, потом нижнюю. Всё от того, что PDF заранее разбит на страницы и прорисован.
Думаю, это важное свойство настоящей электронной книги, отличающее её от файла, подготовленного для печати. Электронная книга разбивается на страницы прямо на устройстве для чтения, в зависимости от размера экрана и того, какого размера шрифт предпочитает читатель.
Для обычной художественной книги проблема форматирования текста стоит не слишком остро. Есть наборы правил хорошего тона, которые хотелось бы соблюдать (отсутствие висячих строк, неразрывные пробелы, и т.п.). Их реализация сравнительно проста, а для многих читателей не слишком и важна. Другое дело «сложные тексты», например, содержащие математические формулы. Нарисовать правильно какой-нибудь хитрый интеграл – работа нетривиальная, а разбивать длинные выражения на строки абы как – значит сделать их непонятными (а иногда и вовсе неверными).
В «классическом» ePub 2 единственное решение «проблемы формул» – вставлять картинки. Это неудобно для авторов, часто некрасиво выглядит, к тому же такие формулы никак не реагируют на изменение размера шрифта.
Я знаю средство, позволяющее набирать формулы для печати на бумаге. Средство называется TeX, и за 30 с лишком лет, прошедших с момента его рождения, никакая другая программа не смогла предложить что-нибудь близкое по удобству, скорости, и качеству отображения. Но вот беда, TeX нужно компилировать, чтобы получить готовый текст. И этот готовый текст окажется в столь нелюбимом мною формате PDF (или ничуть не более удобных DVI и PostScript).
Мне придется ещё немножко уйти в сторону, и рассказать про ещё один язык. Это громоздкий, совершенно неприменимый для написания формул MathML – формат разметки математических текстов. Посмотрите, как выглядит не очень-то хитрая формула в TeX и MathML:
- Формула:
- Код в TeX:
atan(x)=\int_0^x\frac{dt}{t^2+1}
- Код в MathML:
<math mode="display"> <mi>a</mi> <mspace width="0"/> <mi>t</mi> <mspace width="0"/> <mi>a</mi> <mspace width="0"/> <mi>n</mi> <mo lspace="0" rspace="0" stretchy="false">(</mo> <mi>x</mi> <mo lspace="0" rspace="0.278em" stretchy="false">)</mo> <mo lspace="0" rspace="0.278em">=</mo> <msubsup> <mo lspace="0" rspace="0.167em" stretchy="false">∫</mo> <mn>0</mn> <mi>x</mi> </msubsup> <mfrac> <mrow> <mi>d</mi> <mspace width="0"/> <mi>t</mi> </mrow> <mrow> <msup> <mi>t</mi> <mn>2</mn> </msup> <mo lspace="0" rspace="0">+</mo> <mn>1</mn> </mrow> </mfrac> </math>
Надеюсь, вы не подумали, что я своими руками написал этот XML? Разумеется, он создан автоматически – из TeX-овской записи, программой blahtexml. А формула в самом начале нарисована вашим браузером из этого XML с помощью программы (java script'а) MatJax. Фуф, вот теперь я рассказал всё, что необходимо знать, чтобы понять, как можно решить проблему формул в электронных книгах.
Новый формат ePub 3 разрешает вставлять в текст отрывки в формате MathML. Вы можете взять статью в обычном LaTeX, и скомпилировать её прямо в ePub 3 со вставками в MathML. После этого любая читалка электронных книг должна показать вам формулу в книге. Дело за малым: программы, понимающей любой ePub 3, или хотя бы MathML-вставки, пока не существует. Собственно, поводом для этой заметки послужил анонс читалки с поддержкой MathML под названием eqate. По ссылке можно посмотреть видео, но попробовать программу пока невозможно. Авторы обещают, что eqate будет работать на устройствах с iOS и Android, а MathML она отображает с помощью упоминавшегося выше MathJax.
Не знаю, окажется ли решение с вызовом java script из программы-читалки оптимальным. Если бы у меня было бесконечно много времени, я бы непременно потратил маленький его кусочек, чтобы обучить FBReader читать MathML. Но пока ограничусь этим постом.