«какая-то странная антикварная х--ня, написанная ирландским кулибиным в 1847 ну, хорошо, что и такая бывает, конечно» Миша Вербицкий

В 16-м году мне на глаза попались «Начала» Евклида в интерпретации Оливера Бирна. Фишка этой книги в том, что вместо буквенных обозначений навроде «треугольник ABC» там прямо в текст помещаются миниатюры частей построения, то есть, например, картинка с соответствующим треугольником. Насколько сделать такую книгу, как можно представить, было адовой работой в середине XIX века, настолько же легко, с правильными инструментами, это должно бы быть теперь. И, в общем, решил я в этом убедиться наверняка.



Вариант попросту отрисовать в иллюстраторе иллюстрации и сверстать в индизайне верстку был быстро отметен как упаднический. Геометрические построения делать и редактировать в иллюстраторе не сказать чтобы страшно удобно, а красивого способа автоматически связать миниатюры с основным построением мне и вовсе в голову не пришло. Индизайн, хоть и хорошо подходит для такого рода верстки, обещал удручать видом панели ссылок при таком количестве картинок. Так что, ничтоже сумняшеся, я обратился к уже знакомому мне MetaPost-у, в котором геометрические построения делать довольно легко (но не как в геогебре, конечно) и латеху, в котором относительно понятно, как всё сверстать. Латех, правда, из-за непоняток с библиотеками для метапоста был заменен ConTeXt-ом, который хорошо ладит с метапостом прямо из коробки.

Как это работает в целом


«Начал» вообще 13 частей — книг, но Бирн обработал только первые 6. Книги в основном состоят из «предложений» — теорем и задач. Каждое сделано из построения (чаще одного) и текста, который на это построение ссылается.

Для описания построений я завел в ConTeXt-е макрос, который создает новый инстанс метапоста. В метапосте же — всякие функции для описания построений. Выглядит это следующим образом:

\defineNewPicture{ % Внутри этой штуки описывается построение
    pair A, B, C, D; % В метапосте есть тип переменных для координат
    numeric d;
    d := 2u;
    A := (0, 0);                %
    B := A shifted (d, 0);      % Здесь задаются координаты точек
    C := A shifted (0, -d);     %
    D := A shifted (d, -d);     %
    byAngleDefine(B, A, C, byblack, 0);     % Здесь описываются углы
    byAngleDefine(D, B, A, byblue, 0);      % сначала точки,
    byAngleDefine(C, D, B, byred, 0);       % потом цвет,
    byAngleDefine(A, C, D, byyellow, 0);    % потом стиль
    draw byNamedAngleResized();     % Эта штука рисует все углы
    byLineDefine(A, B, byred, 0, 0);        % Здесь описываются отрезки
    byLineDefine(B, D, byyellow, 0, 0);     % сначала концы,
    byLineDefine(D, C, byblack, 0, 0);      % потом цвет, потом стиль
    byLineDefine(C, A, byblue, 0, 0);       % потом толщина
    draw byNamedLineSeq(0)(AB,BD,DC,CA);    % Здесь рисуется цепочка отрезков
}
\drawCurrentPicture % Эта штука выводит получившуюся картинку



Для текстов предложений написал макросы, которые рисуют и выводят картинки в том же инстансе, что и основное построение. Они выполняют, в общем случае, произвольный метапост-код, но чаще всего принимают в качестве аргументов имена нужных элементов — углов, отрезков и пр. Например, так:

% Имена отрезкам даются автоматически, но можно назначить и вручную
Draw $\drawUnitLine{CA} \perp \mbox{ and } = \drawUnitLine{DC}$.\Draw $\drawUnitLine{AB} \parallel \drawUnitLine{DC}$,\and meeting \drawUnitLine{BD} drawn $\parallel \drawUnitLine{CA}$.



Вот как то и другое работает вместе:



Кое-какие фичи


Картинки в книге незатейливые, но некоторые вещи потребовали особого внимания.

Если отрезки касаются друг друга концами, это надо как-то симпатично обставить. Сейчас особо обрабатываются соединения только двух отрезков, остальные можно класть под такое соединение. В оригинале встречается минимум два способа соединения линий, но воспроизводить их мне показалось излишним.



Углы изображаются с помощью секторов. Если угол достаточно маленький, то при одинаковом радиусе сектор будет выглядеть слишком куцым, и есть смысл его увеличить. Сейчас радиус остается постоянным при углах от 60 градусов, а для меньших углов формула такая: $r/\sqrt{a/60}$.



Штриховые линии, чтобы было красиво, должны начинаться и оканчиваться залитыми частями, так что штриховка слегка масштабируется, чтобы влезать целое число раз в отрезок (подобная штука есть в иллюстраторе, но там в начале и в конце линии получаются штрихи половинной длины).



Отображать отрезки в тексте можно по-разному: можно делать их все одной длины, меняя только цвет, а можно воспроизводить так или иначе и длину. У Бирна встречается и так и эдак. У меня для этого такая формула: $L'=L^{a}l^{1-a}$, где $L'$ — длина отрезка в тексте, $L$ — длина исходного отрезка, $l$ — желаемая длина отрезка и $a$ — некое число от 0 до 1. Если $a=0$, то $L' = l$, то есть любой отрезок будет изображен с длиной $l$. Если $a=1$, $L' = L$. Если $0<а<1$, то при $L<l$, $L'>L$ и при $L>l$, $L'<L$, то есть короткие отрезки удлиняются, а длинные — укорачиваются. Это нужно, если хочется сохранить относительные размеры отрезков, но не хочется получить отрезки в полмиллиметра рядом с отрезками в два сантиметра. (На самом деле все чуть сложнее, но смысл такой).



Хотя Бирн и отказался от буквенных обозначений, известный зануда Эдвард Тафти в одной из своих книг высказался на этот счет в том духе, что всё у Бирна хорошо, но буковки неплохо бы вернуть. А раз всё равно почти всё автоматически, то и буквочкам место нашлось. По умолчанию точки называются так же, как и переменные, где хранятся их координаты. Метки можно располагать по вершинам многоугольников, или на концах отрезков, или как-нибудь еще. Их, само собой, можно включать и выключать по желанию (верстка при этом, конечно же, ползет).



Но большая часть кода все-таки посвящена штукам, больше заметным автору/редактору, чем читателю. Это, например, правильное распознавание синонимичных названий углов и отрезков, автоматическая расстановка букв вокруг нескольких многоугольников, автоматическая отрисовка кусков отрезков при некоторых углах в тексте и все такое прочее.

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



Принцип простой: на частях литеры и на рамке размещаются завитушки, настолько крупные, насколько возможно. Это происходит несколько раз, и уже нарисованные завитушки включаются в следующие итерации. Затем таким же образом появляются «листья». Форму и свойства разных видов отростков можно менять.



Не могу сказать, что вполне доволен результатом, но постепенно совершенствую алгоритм и надеюсь на лучшее (впрочем, можно плюнуть и подсунуть картинки с любыми буквицами вместо сгенерированных). В качестве бонуса скрипт умеет генерить из завитушек случайные тайлы.



Перевод


Чтобы выловить ошибки, да и вообще, я стал делать перевод на русский. Ориентиром у меня был перевод «Начал» Мордухай-Болтовского, но довольно быстро стало понятно, что Бирн слишком многое поменял в доказательствах, чтобы это сильно помогло. Признаться честно, поначалу перевел я всё совсем спустя рукава, особенно введение, просто чтобы было, и только недавно дошли руки сгладить немного шероховатости.

Если не считать неприятной пятой книги (которая, как оказалось, была оформлена отдельно от остальных и несколько раньше), было не особенно сложно. Перевод (сам процесс) действительно помог выловить много разных косяков, как моих, так и автора. Скажем, построение к предложению 9 из шестой книги у Бирна не соответствует тексту, отчего доказательство не работает, так что пришлось там всё переделать.

Из курьезов: во введении, где автор нахваливает свой метод, вначале он сослался на Горация, приведя его стихи про превосходство зрения над другими чувствами в качестве аргумента. А несколькими страницами позже решил приплести для пущей убедительности еще и «современного поэта», стихи которого также процитировал. На поверку «стихи современного поэта» оказались другим переводом тех же самых строчек Горация. Тут, конечно, надо было оставить всё как есть и в сноске указать на ошибку автора, но на счастье жена нашла подходящие стихи английского и действительно намного более современного Бирну автора, которые и пошли в дело (пусть и говорят, что так делать нельзя). В английской версии оставил как было.



Русская версия отличается еще и тем, что маленькие буквочки в ней включены по умолчанию и вообще больше мелких изменений по сравнению с оригиналом, чем в английской. Правда, тут вот кто-то попросил сделать английскую версию тоже с буковками, и я подумываю включить их и там тоже: без них-то эта книжка и так есть.

Еще один товарищ начал переводить книжку на польский и очень много ценного по дороге в issues написал (к примеру, про масштабирование углов — это его предложение). Здорово, если допереведет.

Промежуточные итоги


Повозившись с этой книжкой, имею сказать следующее. Картинки в тексте действительно легко читаются, теперь использую этот прием и в других местах. Учитывая, что занимался я проектом вечерами после основной работы на полный день, получилось довольно быстро: примерно полгода на первую английскую версию, со всем планированием и программированием, три месяца на первую редакцию русского перевода. Правда, косяки исправляю до сих пор и там и там (а еще недавно жена начала вычитывать русский на предмет опечаток, и я краснею, почти как от первого пулл реквеста).

С момента публикации первой версии на гитхабе началась и закончилась кампания на кикстартере по сбору средств на «завершение работы Бирна», то есть, как понимают это авторы, оформление всех 13 книг «Начал» в том же духе. Судя по всему, верстают в индизайне, в чем рисуют, непонятно. Пока книги вроде не разослали, но скоро должны. Надеюсь, получится хорошо. А совсем недавно один американский дизайнер выпустил няшную веб-версию первых шести книг. Он, судя по статье с рассказом о работе, рисовал всё вручную в иллюстраторе.

Планы


У Бирна совсем не было стереометрии, так что и инструментов для нее я с самого начала не предусмотрел, но теперь решил потихоньку бирнифицировать книги «Начал» с 11 по 13, чтобы инструментарий отработать на них. Пока вчерне готово чуть больше половины 11-й книги и, соответственно, уже есть кое-какие функции для описания объемных построений и их проекции на плоскость. Впрочем, объемные построения в среднем намного сложнее плоских, и пока у меня нет четкого представления ни о том, насколько будет работать для них подход Бирна, ни о том, получится ли достаточно удобно создавать их в метапосте.



Картинки в тексте часто требуют кернинга. Аналогичное, но сложнее: картинки большого размера на соседних строках раздвигают строки очень широко, что оправдано, только если они друг на друга налезают. Как автоматизировать эти вещи, я пока не придумал, а вручную это всё вылавливать очень скучно.



Метапост можно запускать и из латеха, и отдельно. Так что в будущем планирую сделать макросы для латеха, такие же, как для ConTeXt-а, чтобы можно было делать то же самое в более распространенной среде. В теории никто не мешает использовать метапост, например, с индизайном. Это можно делать и сейчас, просто собирая картинки отдельно и линкуя их вручную, но напрашивается написать для ID пару скриптов, чтобы это происходило само. Последнее выглядит совсем уж как какая-то перверсия, но слишком часто приходит на ум, чтобы не рассмотреть такую возможность.

Ну и главное — хочется попробовать применить всю эту машинерию к чему-нибудь более современному и практичному, чем «Начала».

Всё добро лежит тут, готовые pdf-ки есть в релизах.

Комментарии (45)


  1. submagic
    16.05.2019 00:49

    Очень круто, реально впечатлило! И вообще, дело всерьёз полезное. Большое спасибо!


  1. achekalin
    16.05.2019 00:49

    Так и хочется воскликнуть про автор поста: суровъ!


    Какой матерый человечище! (с) КВН


  1. mikhailian
    16.05.2019 01:37

    Да, вот кто пожалуй утрёт нос Эдварду Туфте.


  1. 9660
    16.05.2019 06:11

    В оригинале есть буквицы и виньетки.

    Я несколько запутался. Что зовется оригиналом? Что переводил автор?


    1. fedor2612
      16.05.2019 07:59

      Он не переводил, а просто оформил при помощи TeX'а "Начала" Евклида.


      1. 9660
        16.05.2019 08:23

        Чтобы выловить ошибки, да и вообще, я стал делать перевод на русский.

        Ну и странно было бы думать что Эвклид писал по русски или даже английски.
        Я так понял человек повторил работу некоего Бирна, с помощью современного инструмента?


        1. fedor2612
          16.05.2019 10:07

          Именно. Он оформил издание Бирна при помощи TeX'а (ссылка на скан этого издания есть в статье)


    1. jemmybutton Автор
      16.05.2019 18:22

      Оригинал — издание 1847 года, которое по ссылке в начале.


  1. ainoneko
    16.05.2019 09:58
    +1

    А насколько хорошо различимы цвета для читателей с нарушениями цветового восприятия?
    (В 1847 вряд ли об этом очень заботились. Конечно, вариант с буквами должен помочь.)


    1. jemmybutton Автор
      16.05.2019 18:37

      Честно говоря, всерьез я пока этот вопрос не вентилировал, вероятно, с какими-то нарушениями цветового зрения такие цвета будут совсем плохо различаться. Но сейчас цвета — это переменные, значения которых можно поменять тут. Например, \def\mpPre{textLabels := true; byred := (0, 0.8, 0.1); byblue := (0, 0.5, 0.6); byyellow := (0.9, 0.1, 0.7);} даст такую картинку, вместо той, что в шапке:
      image
      Уменьшить количество цветов так, конечно, не выйдет, только если разводить по яркости.


  1. Refridgerator
    16.05.2019 13:00

    Узор для буквиц и виньеток выглядит очень здорово! Было бы интересно увидеть дальнейшее развитие алгоритма.


  1. aroxshter
    16.05.2019 15:53

    Когда я вижу сколько труда и интеллекта ушло в несомненно занимательное, но все же искусство, мне хочется воскликнуть про то что где-то кто-то голодает.

    Может быть хотя бы интерактивный курс геометрии?


    1. jemmybutton Автор
      16.05.2019 19:05

      С одной стороны, такое уж хобби. С другой — план максимум, отработав инструментарий на «Началах», попробовать собрать что-нибудь более актуальное и хоть на своих детях проверить, поможет ли со школой. Кто-то, в тексте я ссылку кидал, утверждает, что пользуется, чтобы кого-то учить. Хочется верить.
      У меня знаний и умений на составление курса, конечно, никак не хватит, была мысль оформить какой-нибудь уже существующий курс в таком духе, но пока не очень в этом продвинулся. Есть более или менее интерактивная симпатичная веб-версия той же книги (тоже в тексте ссылка была, вроде), но не уверен насколько она подходит для обучения. Ну и GeoGebra, конечно, интерактивна, совершенно прекрасна, и наверняка с ней есть курсы.


      1. aroxshter
        17.05.2019 16:55

        Мне кажется самое главное и интересное в этом исполнении книжки — то, что иллюстрации описаны через динамические абстракции. Мне кажется, это их свойство наиболее ценно для чего-то совсем интерактивного вроде https://www.euclidea.xyz/. Пока курс статический самая интересная часть работы для читателя, по сути, скрыта.


        1. jemmybutton Автор
          17.05.2019 22:38

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


    1. vdonich
      16.05.2019 23:45

      Не знаю, имхо Эвклид заслужил.
      Опять-таки, по Началам, уверен, училось достаточно людей, в том числе и знаменитых, чтобы считать их хорошим учебником по геометрии.


  1. vlad_radziuk
    16.05.2019 16:29

    Очень круто, спасибо! Даже захотелось почитать «Начала», хотя, казалось бы, зачем это мне :)

    У меня давно витает мысль создать парочку шрифтов, которые бы повторяли личные почерки каких-то известных людей. Скажите, это возможно в MetaPost / METAFONT / GeoGebra? Я совсем профан в этом деле, есть простое желание поковыряться в этом.

    Я поискал в Вашем коде место, где генерируются буквицы — правильно понимаю, что это происходит при вызове "\regularLettrine{T}" (для буквы «Т»)? Где определяется тогда, собственно, шрифт буквы? Ведь я правильно понимаю, что Вы не создавали новый шрифт?


    1. jemmybutton Автор
      16.05.2019 18:49

      Спасибо!

      Насчет шрифтов не могу, к сожалению, подсказать, имел дело в этом плане только с FontForge.

      Не совсем, буквицы делаются отдельным скриптом, который лежит в /lettrines/. Он берет создаваемый при сборке книги список буквиц и виньеток из файла lettrineslist.txt и по нему работает. Буквы там набираются, кажется, Computer Modern-ом, это можно поменять в латеховской преамбуле в скрипте. \regularLettrine{*} только вызывает штуку, которая открывает нужный файл.


      1. vlad_radziuk
        17.05.2019 00:37

        Спасибо за ответ!


  1. DAKutsenko
    16.05.2019 18:37

    Круто, реально очень круто! По поводу стереометрии идея — реализовать анаглифные (красно-голубые) стерео-иллюстрации (будут заморочки с одинаковой шириной для обоих каналов и с их наложением, плюс сложности из-за уменьшения количества доступных цветов).


    1. jemmybutton Автор
      16.05.2019 19:13

      Спасибо! Метапост, мне кажется, не самый подходящий для такого инструмент, практичнее было бы тут уж использовать что-нибудь с готовыми инструментами для 3D. Но все равно любопытно, конечно.


  1. katzen
    16.05.2019 19:28
    -3

    Автоматические буквицы — это катастрофически ужасно. Не делайте так, пожалуйста.


    1. jemmybutton Автор
      16.05.2019 19:59
      +1

      Такую точку зрения я встречал и ее не разделяю: некоторые буквицы в оригинале, во-первых, кажутся мне, как минимум, не менее уродливыми, особенно I, M и S и держатся они (опять же, по моему мнению) в основном на пиетете перед стариной, во-вторых, повторюсь, рисовать к ним кириллицу у меня нет ни малейшего желания, а в-третьих, мне просто интересно допиливать свой генератор буквиц, а в последнем релизе они выглядят лучше, чем в прошлом, а там — лучше чем в позапрошлом и т. д. Тем не менее, если чьи-то эстетические чувства мой выбор задевает, буквицы всегда можно: а) не генерить и тогда будут просто белые буквы на черных квадратах; б) положить в /lettrines/ любые другие буквицы на свой вкус в pdf или svg с названиями A.pdf, B.pdf (или .svg) и так далее.


      1. katzen
        17.05.2019 11:42

        Да какой, к чёрту, пиетет? Буквица — это рисунок, человеческое творчество. Автоматическое рисование ещё не скоро сможет сделать буквицы, которые нормальный шрифтовик посчитает за средне-допустимые, а вы тут автоматом уже замахиваетесь.
        Хотя, если вам нравится, то пожалуйста. Только «буквицами» это не называйте, ради бога.


        1. jemmybutton Автор
          17.05.2019 21:56

          В моей картине мира буквица — такой-то элемент в типографике, имеющий такое-то место и выполняющий такую-то функцию, а не выполненное в определенной технике произведение искусства. Кажется, именно таким образом понимается это слово, когда употребляется в ПО, навроде индизайна, и именно так его употребляют (по моим наблюдениям) чаще всего. В этом смысле то, что я делаю — именно буквицы, хорошие они или плохие с эстетической точки зрения. С системой терминов в которой буквица — это непременно рисунок сделанный человеком я не знаком и не вижу причин на нее переходить.
          Насчет возможностей автоматического рисования, я в статье специально отметил, что отдаю себе отчет в безнадежности этого предприятия. Но не вижу ничего плохого в том, чтобы «замахиваться» даже на кажущиеся безнадежными задачи в свое свободное время.
          В остальном — вам, как я понял, категорически не нравится то, что у меня получилось. Спасибо, это ценный отзыв, у меня глаз замылен уже и взгляд со стороны очень нужен; если бы всем все нравилось, было бы меньше мотивации что-то улучшать.


          1. katzen
            19.05.2019 00:55

            Ну, в системе верований алкоголиков «литр» — это напиток. Несмотря на то, что это слово имеет несколько более широкое значение.

            В остальном — вам, как я понял, категорически не нравится то, что у меня получилось. Спасибо, это ценный отзыв, у меня глаз замылен уже и взгляд со стороны очень нужен; если бы всем все нравилось, было бы меньше мотивации что-то улучшать.

            Нет, как раз очень понравилось. Алгоритмизация там, где она справляется — горячо приветствую обеими руками.


  1. AnyKey80lvl
    16.05.2019 20:32

    Рука сам потянулась к кнопке "Отправить деньги". Невероятно круто.


  1. Mingun
    16.05.2019 23:56

    Мне кажется, прямые углы нужно рисовать не дугой, а прямым углом, как это принято


    1. jemmybutton Автор
      17.05.2019 02:34

      Согласен, во многих случаях это было бы хорошо, но не очень понятно как красиво изобразить угол в таком стиле среди дуг или составленный из нескольких. Например тут в III.1 желтый и черный углы вместе составляют прямой и вместе должны изображаться «углом», но по отдельности их формы будут странными. Можно сделать «углом» только синий, который тоже прямой, но в тексте, где синий с желтым «угол» с куском дуги будут смотреться странно. Но такую возможность я добавить давно хочу, просто пока не придумал как это сделать лучше.


      1. DAKutsenko
        17.05.2019 09:28

        Прямой угол на чертеже обычно обозначают маленьким квадратиком, один угол которого совпадает с обозначаемым углом, или маленькой дугой с точкой под ней. bit.ly/2VrTXFi


        1. jemmybutton Автор
          17.05.2019 11:17

          Спасибо, с таким обозначением не сталкивался, кажется. В одиночные углы точку легко внедрить, но с группами углов посложнее, надо подумать.


          1. Mingun
            17.05.2019 15:27

            Можно внутри дуги нарисовать прямой угол, только цвет должен быть различимый. Тогда и с группами все просто получается — как только группа образует прямой угол, декорируем его уголком


            1. jemmybutton Автор
              17.05.2019 22:44

              А если в группе, кажем, три угла по 45 градусов, то как выбрать, какой обозначать уголком? Автоматически, мне думается, сложновато будет сделать удобно. Но в любом случае, если не сложно, лучше создайте issue на гитхабе, там, кажется, более подходящее место для обсуждения подробностей, а фича нужная.


              1. Mingun
                17.05.2019 23:26

                Можно декорировать все найденные прямые углы, либо только явно отмеченные. Сделаю задачу попозже



  1. KennyGin
    17.05.2019 00:56

    А что-то изменилось с 2017 года? https://www.linux.org.ru/news/opensource/13464196


    1. jemmybutton Автор
      17.05.2019 02:41

      Поменялся шрифт, формат страницы, улучшены буквицы и виньетки, улучшены цвета, другие мелкие улучшения там и сям, выловлено много ошибок (точно можно по коммитам проследить, там почти везде написано что менялось).


  1. FrankEinstein100
    17.05.2019 11:10

    Уважаемый jemmybutton!
    Большое спасибо за статью! Увлекает и вдохновляет совмещение наглядного доказательства геометрических теорем и то, как это реализовано — технически и эстетически.
    Действительно интересен подход, когда фигуры не «обводятся» по исходным рисункам, а строятся, исходя из координат точек и математических соотношений.
    До чтения статьи про «Начала» Эвклида слышал краем уха, а о их красочном и наглядном варианте Бирна — узнал именно из неё.
    Точно также, впервые увидел «программное» черчение в рамках графического пакета.
    Одно дело знать, что большинство программ Adobe построено на языке описания страниц PostScript (сейчас уже на PDF), другое дело — видеть, как интерактивно и понятно можно программировать создание взаимозависимых объектов.

    Можете посоветовать какое-то чтение о использованных Вами программах, рассчитанное на минимальные познания в языках программирования? Имею довольно большой опыт работы в Иллюстраторе и т.п. — и вдруг увидел абсолютно альтернативный подход.
    Спасибо за статью и сами книги! То что Вы сделали очень круто, наглядно и эстетично!


    1. jemmybutton Автор
      17.05.2019 11:54

      Спасибо!
      Насчет чтения мне трудно что-то осмысленно посоветовать, потому что сам систематически и по какому-то одному учебнику не изучал этот вопрос. Чаще всего мне был нужен mpman.pdf, но это точно не учебник. На русском есть такое пособие.
      Но стоит иметь в виду, что метапост — довольно архаичный язык с массой ограничений и если нет каких-то особых показаний в его пользу, стоит попробовать, например Asymptote. Скриптинг для адобовских продуктов, например, для иллюстратора, на мой вкус сильно менее удобен для подобных случаев, но в реальной жизни может очень сильно повысить продуктивность дизайнера, так что и в эту сторону посмотреть есть смысл.


      1. FrankEinstein100
        17.05.2019 17:57

        Спасибо за ссылки.
        Идея вроде бы понятная: описание объектов, расположенных на плоскости.
        В программах типа Illustrator, CorelDraw и т.п. во главу угла поставлен принцип Wysiwig ( «что видите, то и будет создано»). Для полиграфии и веба-дизайна это был огромный прорыв, позволивший создавать компьютерную графику без использования программирования.
        В случае Metapost, Asymptote и, видимо, LaTeX — упор был сделан на описание программными средствами различных объектов, а затем создания их, практически без участия пользователя.
        И визуальный, и программный способы рисования имеют свои преимущества и их обратную сторону — недостатки. По тексту в Metapost только подготовленный человек поймет внешний вид будущего рисунка, а в Иллюстраторе простейшая операция задания касательной к кривой превращается в квест.

        В любом случае, использование скриптов и функций программирования внутри издательских систем Wysiwig — штука полезная. Например, InDesign становиться существенно мощней и удобнее, если знать, как использовать GREP и скрипты.
        В Иллюстраторе используется самый примитивный вариант скриптов — Actions, пользы особой от них я не вижу.

        Получился ответ несколько далекий от программирования, надеюсь, он будет интересен в рамках данной темы.
        P.S. видел Ваш пост о черно-белых штриховых иллюстраций для учебника физики. Очень здорово сделано, чувствуется художественный вкус. Творческих успехов!


        1. jemmybutton Автор
          17.05.2019 22:55

          Тема wysiwig, кода, всякой разметки, и как их совмещать и правда очень интересная.
          Для иллюстратора точно можно (по крайней мере было) писать скрипты на js с довольно богатыми возможностями. Вот, например, первое что гуглится. Сам я, правда, только скрипт, который собирал визитки из xml-к очень давно там писал и не могу особо подсказать. В индизайне можно так же, постоянно этим пользуюсь и сейчас.
          Спасибо!


  1. kknop
    17.05.2019 21:28

    Получил нехилое эстетическое удовольствие от чтения и статьи, и самой работы.
    Насчет развития — мне кажется, стоило бы попробовать изготовить public ТеХ-инструментарий для написания иллюстрированных решений геометрических задач (то бишь так, чтоб на вход можно было подавать уже написанные в ТеХе решения, а они уже отображались так же, как у Бирна.


    1. jemmybutton Автор
      17.05.2019 23:31

      Спасибо.
      Сейчас уже в основном вещи специфичные для книги вынесены в preamble_be.tex, а preamble.tex и byrne.mp кажется достаточно, чтобы оформлять доказательства в таком стиле в ConTeXt-е. Синтаксис я стараюсь постепенно улучшать и делать удобнее. Только документацию надо сделать нормальную.


  1. Bookvarenko
    18.05.2019 03:10

    Шикарно! Выл от восторга посреди ночи. Теперь буду кумекать, как это добро перенести в движок для текстографических адвенчур. Спасибо огромное!


    1. jemmybutton Автор
      18.05.2019 11:12

      Спасибо! Если понадобятся какие-нибудь объяснения по тому, как что-нибудь работает внутри — пишите, и постараюсь внести в документацию.