Сравнение: опыт использования typst и LaTeX
Недавно я наткнулся на пост на Reddit, где обсуждались сложности работы с таблицами в LaTeX. Я ответил примерно так: да, таблицы в LaTeX могут быть проблемой, но я решил эту задачу, используя typst для их создания, компиляции и вставки в LaTeX. Это просто, удобно и избавляет от многих трудностей.
Это натолкнуло меня на мысль сравнить typst и LaTeX в целом. Я активно использую оба инструмента на протяжении длительного времени и хочу поделиться своим опытом как пользователь, не углубляясь в технические детали их внутренней реализации.
Скорость
Одно из первых заметных отличий между LaTeX и typst — скорость работы. LaTeX может компилировать документы несколько секунд, особенно если они сложные или содержат множество пакетов. В то же время typst выполняет компиляцию за миллисекунды. Это позволяет использовать live preview, где вы сразу видите результат своих изменений в PDF-файле. В LaTeX такая возможность отсутствует без дополнительных инструментов.
Вот результаты простого теста, где в обоих случаях документ содержит лишь "Hello, world":
pdflatex:
Executed in 197.56 millis fish external
usr time 134.26 millis 0.00 micros 134.26 millis
sys time 16.57 millis 594.00 micros 15.98 millis
typst:
Executed in 126.37 millis fish external
usr time 52.09 millis 160.00 micros 51.93 millis
sys time 31.35 millis 155.00 micros 31.20 millis
Кроме того, typst не создает дополнительных файлов при компиляции, в отличие от LaTeX, который генерирует множество вспомогательных файлов (.aux
, .log
, .toc
и т.д.). В typst вы получаете сразу готовый PDF-файл без необходимости очищать рабочую директорию.
Простота использования и функциональность из-под коробки
typst стремится предоставить широкий набор функций без необходимости подключения дополнительных пакетов. В LaTeX же для многих задач требуется устанавливать и подключать пакеты:
Русский язык: В LaTeX необходимо использовать пакеты
babel
с опциейrussian
илиpolyglossia
, а также обеспечить поддержку Unicode с помощьюinputenc
.Смена шрифта: Для использования разных шрифтов часто требуется переключиться на XeLaTeX или LuaLaTeX и подключать пакеты вроде
fontspec
.Математические символы: Для расширенного набора математических символов обычно подключаются пакеты
amsmath
,amssymb
,mathtools
и др.Работа с таблицами: Сложные таблицы требуют использования пакетов
array
,booktabs
,tabularx
и т.д.
В typst многие из этих возможностей доступны сразу без дополнительной настройки. Я опускаю и тот момент, что в LaTeX есть, как минимум, целых 3 компилятора, и не каждый подойдет для любой ситуации. Например, использование эмодзи:
typst:
😀 Привет, мир!
LaTeX:
\documentclass[12pt]{article}
\usepackage{emoji}
\begin{document}
These are colour emojis using the \texttt{emoji} package and LuaLaTeX:
\emoji{leaves}
\emoji{rose}
You can use emoji-modifiers:
\emoji{woman-health-worker-medium-skin-tone}
\emoji{family-man-woman-girl-boy}
\emoji{flag-malaysia}
\emoji{flag-united-kingdom}
\end{document}
Последнее необходимо компилировать с LuaTeX. Как видите, в typst мне не нужны никакие классы документов, окружение document
и прочее.
Синтаксис же typst напоминает Markdown, но обладает большей выразительностью. Некоторые примеры:
Жирный текст:
typst:
текст*
LaTeX:
\textbf{текст}
Заголовки:
typst:
= Заголовок уровня 1
LaTeX:
\section{Заголовок уровня 1}
Математические формулы:
В typst инлайн-формулы и отдельные формулы оформляются одинаково просто, используя
$...$
.В LaTeX для инлайн используется
$...$
, для отдельных формул —\[...\]
,$$...$$
, или окруженияequation
,align
и т.д.
Пример математики в typst:
$ lim_(x -> c)f(x) equiv forall epsilon exists delta: 0 < abs(x - c) < delta => abs(f(x) - L) < epsilon $
Аналогичный пример в LaTeX:
\begin{align}
\lim_{x\to c} f(x) = L \equiv \forall \epsilon \exists \delta: 0 < \vert x - c \vert < \delta \Rightarrow \vert f(x) - L \vert < \epsilon
\end{align}
Однако для более сложных математических конструкций в LaTeX часто требуются дополнительные пакеты и окружения.
Работа с ошибками и отладка
Ошибки в LaTeX часто могут быть трудными для понимания и исправления, особенно для начинающих пользователей. Сообщения об ошибках могут быть неинформативными, и поиск решения требует обращения к сообществу или документации, которая не всегда удобна для быстрого поиска. В книгах по LaTeX этому посвящены разделы, а на Overleaf есть отдельная статья об ошибках в LaTeX, тут по большей части без комментариев.
typst предоставляет понятные сообщения об ошибках, указывая на конкретное место и причину проблемы:
Это значительно ускоряет процесс отладки и исправления.
Документация
Документация typst хорошо структурирована и оснащена удобным поиском. Это облегчает освоение инструмента и решение возникающих вопросов. В случае с LaTeX, документация может быть менее интуитивной, и пользователи часто обращаются к сторонним ресурсам, руководствам или сообществу для получения помощи.
Более того, вам не нужно читать книги, чтобы изучить typst. Если спросите, с чего бы начать изучать LaTeX, то в русскоязычном поле вам кто-то да подскажет почитать книжку Львовского. Она на 400 страниц. А есть книги по LaTeX и на 700 страниц. Есть документации по отдельным пакетам более чем на тысячу страниц. В typst такого нет: вам действительно с головой хватит доступной документации, которая не слишком объемна, но информативна и понятна. Во всяком случае, если даже не хватит её, то typst имеет отзывчивое сообщество, как в ру сегменте, так и официальный дискорд-канал и отдельный форум.
Размер
typst весит немного, а texlive в full-scheme весит уж точно немало: от 8гб. Да, кто-то скажет, что есть MikTeX, и вообще full -- не единственная схема; но, во-первых, не знаешь, какой именно пакет тебе понадобится -- я полагаю, что многие ставят именно полную схему texlive (в общем-то я и сам ставлю только её). Во-вторых, как мне кажется, MikTeX менее распространен, чем texlive. Да и плюсом, компилируя через MikTeX текст с русским я получал неожиданное поведение в виде слетевшей кодировки. Пакет (опять) cmap
исправлял это, но все же: вроде поставляется LaTeX что там, что тут -- но они точно не работают во всем одинаково, что, опять же, вызывает неудобства в сравнение с typst, который поставляется в единственном образе.
Заключение
В основном я старался выделить преимущества typst в данном сравнении, как вы могли заметить. Мне действительно трудно найти преимущества у LaTeX; пожалуй, на руку ему играет во многом время: typst относительно молод, и у него нет такой базы пакетов, как в LaTeX на каждый случай жизни, хотя они, безусловно, появляются: есть пакеты на упрощение работы с теоремами и их нумерацией, нумерацией уравнения, пакет для рисования CeTZ (аналог TikZ); нет такой же развитой базы ответов и вопросов; журналы предлагают шаблоны преимущественно на LaTeX (и будут еще долго этим заниматься) и прочее. В конце концов, есть и внутренние моменты: например, в typst пока что недоработано поведение красной строки, нельзя обтекать фигуры текстом и т.д. Один раз он меня подвел еще и тем, что сделанная в нем презентация не хотела отображать нормально формулы, когда я уже выступал на публике. В общем, typst-у предстоит исправить свои недочеты относительно LaTeX; но продвигаемый им подход к тому, какой может быть типографическая система, -- это очень большой шаг в прогрессе относительно LaTeX.