Комментарии 18
На сколько быстро собирается весь документ?
typst выглядит интересно, ну и open source - вообще замечательно. Надо посмотреть подробнее.
Но для поставленной задачи, особенно если пользователь не особо программист, вроде как, идеально подошёл бы софт для technical writing типа Adobe FrameMaker или MadCap Flare (да, ценник, ну так и InDesign не бесплатный...) Не смотрели в эту сторону?
Пока что не смотрел, глянул сейчас на краткие презентации.
Фишка как раз в том, что пользователь (я) в данном случае — программист, и мне ближе такая концепция, что есть исходник со всякими функциями, из которого компилируется итог, а не большая конструкция, по которой прогоняются скрипты (насколько я понимаю, у Adobe именно такая логика). Если расстановка неразрывных пробелов происходит скриптом, то его надо прогонять всякий раз после редакторских изменений. А если правила изначальна записаны в regexp, которые гоняются при компиляции — то про это никто не должен помнить, и соответственно, никто не забудет.
Ну там общая логика в разделении содержания (которое в идеале в XML-формате семантической разметки - DocBook, DITA или отраслевые стандарты) и представления. Как раз заточено на толстенные фолианты с кучей сложных нумераций, табличек, индексов, оглавлений и пр., которые верстаются автоматом на основе шаблона и стилей. При этом шаблон и стили редактируются в интерфейсе, доступном обычному верстальщику (ну по крайней мере в FrameMaker и в те годы, когда я им пользовался, - давно уже у меня не было таких задач).
P.S. Но вот вся эта часть с редактурой исходного текста на основе регекспов - это да, про другое. Я бы этот процесс от собственно вёрстки отделял. Всяких скриптов для таких задач в формате от макросов Word до веб-сервисов достаточно, да и свой написать просто. Просто прогоняем этот "препроцессор" перед импортом текста.
Логика понятная, ее несложно реализовать и в typst: вот данные, вот код, который их правильно парсит. Собственно, я так и делал. Вот данные, я их правильно сортирую (такого нет в Adobe), по-умному модифицирую и вывожу, лишь однажды заморочившись с правилами, касающимися однобуквенных слов [АВИКОСУЯ] и прилепляния тире.
И проблема с тем, что в FrameMaker QR-код невозможно сразу сделать 100% black в CMYK, точно вылезет, поскольку FM их генерирует и сохраняет в PNG:
https://help.adobe.com/en_US/framemaker/using/using-framemaker/user-guide/frm_graphics_gr-topic_graphics-qrcodes.html
Я глянул доки на typst поподробнее - там как-то очень грустно именно с семантической разметкой. Один heading, один list и, если я правильно понял, вообще никакого аналога стилей и всяких блоков/сносок/выносок/перекрёстных ссылок и пр. - как с этим жить-то? Так что если уж надо подтянуть MarkDown до пригодного к употреблению уровня - я бы всё же смотрел на AsciiDoc. Ну а если у нас энтерпрайз и всё серьёзно - то на ту самую DITA.
P.S. Посмотрел доки подробнее - то, что я написал выше, в каком-то объёме в typst есть, но очень уж странно оно как-то организовано, надо понять философию сначала.
Там это всё реализовано функциями, примерно как в ТеХе. Задал всё что нужно, и вызвал напрямую, либо задал, что она сработает на основе regexp'ов.
Со сносками и перекрёстными ссылками тоже всё в порядке.
Да я уже посмотрел, именно поэтому и удивился в P.S. :) Но всё равно непонятно, как структурировать текст изначально с таким скудным набором семантических элементов. Ну вот сравните с элементами DITA... да хотя бы даже с HTML5. А тут на каждый документ придётся какую-то свою схему через свойства колхозить, что ли.
Вот этого я и не понимаю. В моём мире есть:
документ на некоем языке разметки, в котором есть контент, но нет оформления и логики (ну или есть минимальная, типа условного текста) - XML со своей схемой (в т.ч. DITA), HTML5 с чисто семантическими тегами, даже документ Word без локального (отличного от шаблона) форматирования (хотя в Word для поддержания разделения контента и оформления встроенных средств нет) и т.п.
есть шаблон, в котором есть оформление и стили, но нет контента, - шаблон в том же FrameMaker или в Word, или CSS, или XSLT для формирования XSL-FO (хотя эта вундервафля оказалась настолько тяжёлой, что не взлетела :)
и есть софт для обработки документа, применения к нему шаблона и создания из него PDF, HTML и т.п.; тут же может быть логика какого-то более сложного редактирования текста, если она нам нужна.
А тут ни рыба, ни мясо, а всё вперемешку... Но я так понимаю, тут идеология растёт ногами из TeX, а я с ним никогда толком не работал.
Думаю, Вам интересно будет, что ещё в typst я делал договоры: в одних файлах персональные данные, в других — списки обязанностей, в третьих — возможности видоизменять текст в соответствии с полом сотрудника(цы). Где нужно — инициалы автоматом делаются вместо имени и отчества.
Договоры мне в данный момент времени вообще наиболее интересны, я их автоматизацией занимаюсь :)
Сценарий Ваш понял, любопытно, но в целом не особо чего добавляет к тому же docassemble (там используют плейсхолдеры и jinja2 внутри Markdown / docx) или аналогичным решениям, а кривая обучения пользователя (которым в итоге будет юрист) покруче.
QR-код невозможно сразу сделать 100% black в CMYK,
Так это опять отдельный этап :) В экосистеме Adobe этим должен заниматься Acrobat (где-то там в функции Preflight можно задать профили преобразования цветов, которые глобально по всему документу поменяют CMYK на истинный чёрный)
Почитал ещё немного доков про typst.
Я правильно понимаю, что аналог стиля (в самом простом Word'овском понимании) - это label? Т.е. если я пишу договор и мне нужно единообразное форматирование и нумерация всех пунктов, то каждый пункт я заканчиваю "<punkt>", а потом пишу "#show <punkt>: set ..." и далее какой мне там нужен формат?
Но при этом никакого аналога иерархии стилей нет? Т.е. если мне нужно все подпункты отформатировать так же, как пункты, но с другими отступами и уровнем нумерации, я не могу определить label <podpunkt> и как-то указать, что к нему надо применять все правила из "#show <punkt>: set ...", кроме тех, которые переопределены в "#show <podpunkt>: set ..."?
А как тогда в идеологии typst подобная задача канонично решается?
И ещё непонятки с нумерацией. Как её применять к заголовкам, отдельным спискам, рисункам и пр. понятно. Но каким будет аналог поля LISTNUM в Word'е? Т.е. произвольной нумерации, независимой от структуры заголовков и списков? Скажем, мне нужна одновременно сквозная нумерация заголовков всех уровней и параллельная ей сквозная нумерация каких-то ключевых тезисов в тексте.
Мне видится, что все эти задачи не очень сложно решаются в typst, конкретный код сейчас писать некогда. Статья была с лейблом «Кейс» — я разобрался для своей задачки, делюсь опытом. Писать концептуальный tutorial или сравнивать с теми системами, в которых я мало работал, не возьмусь, простите
¯\_(ツ)_/¯

typst vs InDesign & TeX