ТеХнологии на службе
Jan. 31st, 2018 12:52 amРабота техническим и художественным редактором, помимо бесконечной вычитки, правки и переписки, приносит неожиданно интересные задачи.
Нет, вычитка тоже интересна: когда бы еще довелось пообщаться на равных (ну, почти...) с профессором университета? Одну книгу мы уже выпустили (пособие по SQL), и надеюсь, что в этом году добьем первую часть фундаментального труда по основам технологий СУБД.
Так вот, первой занятной задачей было придумать правдоподобное наполнение для демонстрационной базы данных. Я немного писал об этом на Хабре. Не могу сказать, что полностью удовлетворен результатом и уже подумываю все переделать, но вспоминаю работу с удовольствием: отпуск прошел не зря.
А сейчас возникла необходимость привести несколько иллюстраций, кое-как нарисованных в каких-то Пауэрпоинтах, к единому стилю. Сначала думал перерисовать в draw.io, но вовремя вспомнил старую историю. В свое время копировал я братцу (тогда еще музыканту) какие-то заковыристые ноты. Ксерить было неспортивно, хотелось набрать на компьютере. Какие только специализированные программы мы с ним не перепробовали: Сибелиус, еще что-то... ничего не получалось, не хватало возможностей. Тогда на помощь пришел ТеХ (MusiXTeX): неделю втыкаешь, потом пишешь какие-то загогулины и внезапно все работает именно так, как надо.
Вот и сейчас — книги-то мы верстаем в ТеХе. Оказалось, что есть пакет TikZ, ноги которого растут откуда-то из глубин Постскрипта и Метафонта. Пришлось честно напечатать кусок документации и даже прочитать его. Окончательно меня покорила авторская глава о хорошем стиле со ссылкой на Тафти.
Для примера решил начать с ER-диаграмм. Казалось бы, несложная штука, но спецсредства порождают ненастраиваемый ужас-ужас, а в том же Либреофисе безгеморройно нарисовать лапку в стиле Баркера — просто невозможно. Но в TikZ можно вообще все что угодно, и вот как это может выглядеть:
Если опустить определения стилей (которые находятся в SO и допиливаются напильником), то сам код хоть и пестрый, но вполне читаемый:
\begin{tikzpicture} \pic {entity={courses}{Courses}{ \# & course\_no \\ $\ast$ & title \\ $\circ$ & hours \\ }}; \pic[right=8ex of courses] {entity={exams}{Exams}{ $\ast$ & score \\ }}; \pic[right=8ex of exams] {entity={students}{Students}{ \# & student\_id \\ $\ast$ & name \\ $\ast$ & start\_year \\ }}; \& \pic[above=8ex of students] {entity={groups}{Groups}{ $\ast$ & group\_no \\ }}; \& \draw [one to many uid] (courses) -- (exams); \draw [one to many uid] (students) -- (exams); \draw [optional one to many] (groups) -- (students); \end{tikzpicture}
Сплошные прелести:
- Картинки совершенно органично смотрятся в тексте книги, потому что используют те же шрифты и нарисованы в одном и том же масштабе.
- Картинки в виде текста удобно ложатся под версионный контроль, можно смотреть осмысленные дифы.
- Не надо воевать со сторонними инструментами и зависеть от них.
Буду пробовать дальше.