denisshevchenko / ohaskell.guide

Ваша первая книга о языке Haskell
https://www.ohaskell.guide
Other
261 stars 29 forks source link

Проблемы в epub-версии. #29

Closed fomkin closed 8 years ago

fomkin commented 8 years ago

Денис, здравствуйте! Я заметил ряд проблем в epub-версии и хочу про них рассказать. Читал в стандпртной айфоновской читалке.

  1. На небольшом экране (iPhone 6) при портретной ориентации примеры кода практически всегда переносится. То есть книга становится практически нечитаемой.
  2. В некоторых местах я заметил переносы (со знаком переноса) в коде.
  3. При этом текст идет без переносов, выровненный по двум краям.
denisshevchenko commented 8 years ago

Приветствую, Алексей!

Благодарю за отклик. Отвечаю:

На небольшом экране (iPhone 6) при портретной ориентации примеры кода практически всегда переносится. То есть книга становится практически нечитаемой.

Да, это так. Но ведь у многих на руках ещё iPhone 5, однако подстраиваться под его 4-дюймовый экран в портретной ориентации я точно не стану, в противном случае строчки кода должны стать уж слишком короткими. Однако в горизонтальной ориентации даже на iPhone 5 код прекрасно читается, длины экрана вполне хватает.

Если же кто принципиально желает читать книгу на смартфоне и именно в портретной ориентации - я могу дать только один совет: читайте веб-вариант. Он адаптивный под малые экраны, и все примеры кода в нём имеют горизонтальную прокрутку, что исключает перенос и "скомкивание" кода.

В некоторых местах я заметил переносы (со знаком переноса) в коде.

Да?? Странно, не замечал. Нужно будет проверить тщательнее. Спасибо.

При этом текст идет без переносов, выровненный по двум краям.

Это сделано сознательно. В книгах на русском языке в EPUB-формате (я смотрел на примере классики) переносы есть, но текст имеет рваный край справа (по крайней мере, на 4-дюймовом экране в портретной ориентации). Я категорически не приемлю рваные края в тексте любой книги. Так что уж лучше пусть будет строгое выравнивание, но без переносов.

fomkin commented 8 years ago

Это сделано сознательно. В книгах на русском языке в EPUB-формате (я смотрел на примере классики) переносы есть, но текст имеет рваный край справа (по крайней мере, на 4-дюймовом экране в портретной ориентации). Я категорически не приемлю рваные края в тексте любой книги. Так что уж лучше пусть будет строгое выравнивание, но без переносов.

А разве нельзя использовать и то и другое одновременно? Я правильно понимаю что в ePub запакована та же веб-версия? Вот пример где одновременно расставлены мягкие переносы и применено выравнивание по краям https://jsfiddle.net/t9c7td04/

denisshevchenko commented 8 years ago

И что, ты предлагаешь мне вставлять в каждое слово ­?? Надеюсь, это шутка... ;-)

Переносы слов в PDF делает LaTeX, с помощью пакета polyglossia и подгружаемого набора так называемых паттернов переносов для кириллических языков (проверял на украинском, тоже работает). LaTeX делает всё это полностью автоматически (как ты видишь, в словах в .md-исходниках никаких переносов нет).

Если я найду автоматический способ расстановки переносов для EPUB - буду очень рад. Но пока не нашёл. Поэтому пусть уж остаётся явное выравнивание по обеим сторонам.

fomkin commented 8 years ago

И что, ты предлагаешь мне вставлять в каждое слово ­?? Надеюсь, это шутка... ;-)

Я предполагал, что Ипаб тоже ЛаТеХом генерируется. Вообще что бы расставить эти самые ­ нужно реализовать алгоритм Лянга-Кнута (он не сложный) и взять набор правил для русского языка из того же ЛаТеХовского пакета. Если ты скажешь куда это вставлять, то могу заняться.

denisshevchenko commented 8 years ago

Если ты скажешь куда это вставлять, то могу заняться.

Скажу. Перед формированием PDF/EPUB создаётся временный Markdown, состоящий из всех глав, склееных по порядку.

https://github.com/denisshevchenko/ohaskell.guide/blob/master/src/SingleMarkdown.hs#L26

Вот в этот временный Markdown ПЕРЕД тем, как его записывать в файл, и нужно вставлять все эти ­. Код, реализующий эту вставку, лучше вынести в отдельный модуль, разумеется.

fomkin commented 8 years ago

Вот в этот временный Markdown ПЕРЕД тем, как его записывать в файл, и нужно вставлять все эти ­. Код, реализующий эту вставку, лучше вынести в отдельный модуль, разумеется.

Окей. План такой:

  1. Пандоком (его ведь можно подключать как библиотеку?) разбираю получившийся маркдаун на AST. Почему это нужно: хочется расставлять переносы только в тексте и не расставлять в примерах.
  2. Подключаю https://hackage.haskell.org/package/hyphenation
  3. Расставляю переносы только в тексте
  4. Собираю маркдаун обратно в текст

Создам новую задачку под это дело. Заниматься я этим буду недели две как минимум, потому что опыта с хаскелем у меня нет.