У некоторых это получается, у некоторых — с трудом. parpalak сделал web-сервис для вставки svg формул, и это очень круто. Я хочу дополнить его небольшим скриптом, с которым вставка многих формул сведется к одной команде.
Метод состоит в следующем. Вы пишете свой пост в markdown-редакторе с поддержкой . Можете попробовать stackedit.io. Когда пост готов, копируем разметку в буфер обмена; запускаем команду
> poster clipboard
Команда меняет в буфере текущий исходник на хабрачитаемый; вставляем в Хабрахабр; делаем предпросмотр и, если нравится, публикуем.
Есть альтернативные пути, но этот кажется наиболее оптимальным. Может быть вы его оптимизируете у себя до пары шорткатов.
Скрипт Poster
Цель скрипта — упростить набор формул. Скрипт собирает все доллары, разбросанные по тексту и выделяет по ним формулы. Формулы преобразуются в картинки через сервисы codecogs или tex.s2cms.
Кроме того, скрипт преобразует стандартный markdown к html + немного выправляет переводы строк.
По своему опыту я знаю, что сервисы с картинками могут сильно тупить, а то и умирать от хабраэффекта, помноженного на число формул в статье. Я сделал автоматический загрузчик картинок, который грузит все за исключением составляют svg с tex.s2cms.
Подготовка
- Ставим Python 2.7 если нет.
- Ставим curl если нет. Если ставите под Windows, не забудьте добавить путь к переменной PATH.
- Качаем скрипт с GitHub-а.
- Запускаем скрипт init.py.
Почти готово. Под линуксом или маком, вы можете вызвать init.py через sudo с флагом -l. Скрипт добавит софт-линк /usr/bin/poster на скрипт poster.py.
В файле default.json вы можете поменять источник формул: texsvg, texpng для tex.s2cms или codecogs, а также кодировку.
Как можно использовать
> poster clipboard
Преобразует содержимое буфера к хабрачитаемому виду и записывает обратно в буфер.
> poster <filename.md>
Преобразует содержимое файла filename.md и записывает результат в filename.txt
> poster -c <filename.md>
Тоже самое, но результат при этом копируется в буфер. Есть возможность указать, куда записывать результат через флаг -o.
Нюансы
- При загрузке картинок, скрипт запрашивает habrasid и сохраняет его в default.json. Один раз вы должны решить, насколько для вас важно, что habrasid будет находиться в открытом виде. Если согласны, то его надо будет периодически обновлять. Как добывать, смотрите в этом посте.
- Подгрузка картинок требует времени. Поэтому скрипт кэширует ссылки. Если указан путь к файлу, в той же папке появится папка links с картинками по ссылкам и файл links.json c информацией о загруженных картинках. Если вы преобразуете через буфер, файлы будут скачиваться в папку, где находится скрипт.
Особенности синтаксиса
- Чтобы сделать кат, наберите
<!-- cut [Cut title] -->
- Чтобы сделать спойлер, введите сначала
<!-- spoiler [spoiler title] -->
а затем
<!-- /spoiler -->
- Используйте ключевые слова left, center, right, чтобы обозначить выравнивание картинки
![left][beautiful.png]
Плюшка в конце
Пользователи Windows могут воспользоваться программкой AutoHotKey. Например, ahk-скрипт
^j::
Send, ^a
Send, ^c
Run, <path to poster.py> clipboard
Return
позволит по нажатию сочетания Ctrl+J одновременно выделить текущий текст, скопировать в буфер обмена и преобразовать.
Надеюсь, что я смогу облегчить своим небольшим вкладом оформление математических статей здесь и на других ресурсах, не поддерживающих .
Удачи!
Комментарии (20)
maisvendoo
29.07.2015 02:34Обещаю попробовать и написать отзыв
SeptiM Автор
29.07.2015 02:40+1Ей! Напишите, если возникнут проблемы. Я пробовал на разных машинках и ОС, но все равно что-нибудь может проскочить.
maisvendoo
30.07.2015 15:46Первое впечатление от работы с Вашим скриптом и предложенным в статье редактором исключительно положительное. Начал готовить 15 серию про тензоры и не могу нарадоваться, насколько удобно набирать текст поста, насыщенный формулами
maisvendoo
30.07.2015 17:22Единственное — не работает предложенный способ вставки ката. Но генерация ссылок на формулы и рисунки, формат заголовков — всё работает хорошо
SeptiM Автор
30.07.2015 19:40+1Очень здорово! Поправил кат, добавил выравнивание картинок. Теперь если в квадратных скобках markdown-а написать left, right или center — этот параметр выставится в параметре align.
maisvendoo
30.07.2015 20:39Теперь если в квадратных скобках markdown-а написать left, right или center
Да, это очень кстати
maisvendoo
30.07.2015 22:54Опробовал исправленную версию. Теперь замечательно всё работает. Великолепная штуковина
maisvendoo
30.07.2015 23:06Ещё мелкое замечание. Я в питоне не спец, но у меня установлены как версия 3.4.3 так и 2.7 пришли с зависимостями к каким-то пакетам. При запуске по умолчанию выбирается третий питон и сыпятся ошибки. Поэтому я костыльный скрипт
#!/bin/bash python2.7 /home/maisvendoo/install/habratex/poster.py $1
и сделал симлинк на него
Londeren
30.07.2015 17:07Как раз сейчас занимаюсь примерно тем же. Требуется перегонять html + tex в pdf.
Делаю через перегон nodejs mathJax -> html + svg -> с помощью batik делаем html + images data uri -> pdf.
MathJax используется потому, что он же стоит и на фронте и хочется видеть одинаковое представление и в pdf и на фронте. Скорость на большом кол-ве формул не радует :(
Londeren
30.07.2015 17:07Как раз сейчас занимаюсь примерно тем же. Требуется перегонять html + tex в pdf.
Делаю через перегон nodejs mathJax -> html + svg -> с помощью batik делаем html + images data uri -> pdf.
MathJax используется потому, что он же стоит и на фронте и хочется видеть одинаковое представление и в pdf и на фронте. Скорость на большом кол-ве формул не радует :(
Sirion
Это чит.