Можно ли читать на мобильных устройствах тексты с формулами – статьи, учебники? В принципе можно, если у устройства достаточно большой экран. На 10-дюймовом планшете типичные PDF-файлы выглядят неплохо. Но уже на 7-дюймовом устройстве (скажем, на популярном Kindle последних моделей) чтение обычного PDF превращается в муку. Приходится либо уменьшать текст до неразличимого размера, либо поворачивать электронную книгу набок и читать сперва верхнюю половинку текста, потом нижнюю. Всё от того, что PDF заранее разбит на страницы и прорисован.

Думаю, это важное свойство настоящей электронной книги, отличающее её от файла, подготовленного для печати. Электронная книга разбивается на страницы прямо на устройстве для чтения, в зависимости от размера экрана и того, какого размера шрифт предпочитает читатель.

Для обычной художественной книги проблема форматирования текста стоит не слишком остро. Есть наборы правил хорошего тона, которые хотелось бы соблюдать (отсутствие висячих строк, неразрывные пробелы, и т.п.). Их реализация сравнительно проста, а для многих читателей не слишком и важна. Другое дело «сложные тексты», например, содержащие математические формулы. Нарисовать правильно какой-нибудь хитрый интеграл – работа нетривиальная, а разбивать длинные выражения на строки абы как – значит сделать их непонятными (а иногда и вовсе неверными).

В «классическом» ePub 2 единственное решение «проблемы формул» – вставлять картинки. Это неудобно для авторов, часто некрасиво выглядит, к тому же такие формулы никак не реагируют на изменение размера шрифта.

Я знаю средство, позволяющее набирать формулы для печати на бумаге. Средство называется TeX, и за 30 с лишком лет, прошедших с момента его рождения, никакая другая программа не смогла предложить что-нибудь близкое по удобству, скорости, и качеству отображения. Но вот беда, TeX нужно компилировать, чтобы получить готовый текст. И этот готовый текст окажется в столь нелюбимом мною формате PDF (или ничуть не более удобных DVI и PostScript).

Мне придется ещё немножко уйти в сторону, и рассказать про ещё один язык. Это громоздкий, совершенно неприменимый для написания формул MathML – формат разметки математических текстов. Посмотрите, как выглядит не очень-то хитрая формула в TeX и MathML:

  • Формула:

    atan(x)=0xdtt2+1

  • Код в 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. Но пока ограничусь этим постом.