Сравнение: опыт использования 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
Как отображаются ошибки в 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.

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


  1. Arastas
    05.12.2024 10:17

    Кажется, что удобство за счёт упрощения. Должно хорошо закрыть потребности тех, кому что-то простое набрать, но может быть недостаточным для тех, кто хочет что-то посложнее. Например

    В LaTeX для инлайн используется $...$, для отдельных формул — \[...\], $$...$$, или окружения equation, align и т.д.

    Окружения aligned, gathered и тому подобные по разному выравнивают формулы. Если от этого отказаться, то теряется гибкость.


  1. roqin
    05.12.2024 10:17

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



  1. Imaginarium
    05.12.2024 10:17

    О, очередной убийца \TeX'а и снова typst)

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

    Не надо путать универсальную систему верстки для сложных технических текстов (в первую очередь) с очередным маркдауном, это сопоставление теплого с мягким.


    1. AlexKev Автор
      05.12.2024 10:17

      Какой раз слышу о том, что в LaTeX есть что-то, что позволяет делать нечто "сложное", а вот в других системах такого не добьешься. Можете привести хотя бы пару примеров такого "сложного"? И да, typst используется: в шоукейсах в их офф. дискорд сервере можете посмотреть немало выпускных работ, написанных на typst. Подобные истории есть в ру тг чате по typst.

      Также занимался переводом Logic Primer, MIT, за авторством C. Allen, M. Hand. Шаблон там используется следующий: слева -- какие-то понятия логические, а справа -- уже полные пояснения к ним с примерами (см. пик). У меня и мысли не было делать подобное в Латехе, а на составление точь-в-точь такого же шаблона на тайпст у меня заняло менее 15 минут, и получился ровно такой же темплейт с точностью до расположения элементов

      Upd.: и да, учитывайте, что typst активно развивается. Ранние версии не содержали многое из того, что есть сейчас; например, до 0.10, насколько я помню, не было поддержки работы с библиографией. А сейчас она есть. Какие принципиальные ограничения Вы видите у typst? Я вот никаких; практически нет сомнений, что в ближайшем будущем typst станет куда более лучшей системой, чем LaTeX


      1. Imaginarium
        05.12.2024 10:17

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

        нативный PostScript, поддержка MetaPost?.. Возможностей настолько много, что я даже не знаю, с чего начать. Ну, хотя бы с автоматического правильного выбора размера обыкновенных дробей в тексте... Что такое темплейт не знаю, но когда в typst можно будет сделать полную предпечатную подготовку книги по теории категорий с диаграммами (или вот что-то такое, например), вот тогда и поговорим. Пока что я вижу только, что в мире розовых пони нет ничего страшнее розовых пони)

        У меня и мысли не было делать подобное в Латехе

        Ну, а у меня -- наоборот. И получилось бы классно и гибко. Вы, кажется, критикуете людей, которые умеют пользоваться \TeX'ом за то, что Вы им самим пользоваться не умеете)))

        Дальше Ваши унылые обещания великого будущего очередного css typst читать стало лень, извините) Вы упорно показываете мне какие-то выравнивания столбцов в таблицах, я рад, что у Вас получаются курсовые, но я о другом, и \TeX-- тоже. Удачи.


        1. AlexKev Автор
          05.12.2024 10:17

          PS используется где? В последний раз я его видел только в НМУ в курсах 10+ летней давности, скачивая листочки; к метапосту те же вопросы

          Написать книгу по теоркату в typst? Я не вижу в этом никаких препятствий. Диаграммы тоже рисовать можно. С размерами дробей проблем не встречал. И что вместо indesign можно использовать латех -- ну, спасибо за открытие. Только вместо латеха теперь можно использовать тайпст.

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


          1. Imaginarium
            05.12.2024 10:17

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


            1. AlexKev Автор
              05.12.2024 10:17

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

              Опять же, советую хоть немного изучить вопрос, потом отписать свои мысли. Пока что вижу только обратное


    1. winorun
      05.12.2024 10:17

      Я тоже скептически относился к программе, но оказалось,что typst не язык разметки это именно аналог latex. Вы можете добавлять свои команды, логику и имеется прекрасный способ обрабатывать как tsv, json так и произвольный текстовый файл.

      Есть функции рисования примитивов линий, прямоугольников. И многое другое.

      Так что как минимум рекомендую ознакомится. Лично для меня оказался намного удобней как latex, так и ascidoctor для составления документаций, написания всяких документов(заявления на отпуск и прочее), конспектов.

      При этом до latex программе несколько далековато. Хотя это разрыв и уменьшается. Как пример до сих пор нет обтекания картинки текстом. Есть только костыль на эту тему. С формулами тоже не совсем всё хорошо. Например A_{x1} в latex отражается. А в typst приходится делать А_х_1. Всё хочу дописать две статьи : одна по созданию ежедневника генерируемого программой, а вторая как я заменил word на typst и как в него занести данные из внешних файлов и sql запросов.


      1. Arastas
        05.12.2024 10:17

        Ой. А если у меня в нижнем индексе сложное выражение со своими индексами и матрицами, то как быть?


        1. AlexKev Автор
          05.12.2024 10:17

          Довольно просто:

          $A_(mat(
            x + y, x + z, ..., x + n;
            y + y, y + z, ..., y + n;
            dots.v, dots.v, dots.down, dots.v;
            n + y, n + z, ..., n + n;
          )_"матрица A" + mat(
            1, 2, ..., 10;
            2, 2, ..., 10;
            dots.v, dots.v, dots.down, dots.v;
            10, 10, ..., 10;
          )_"матрица D" = B)$


          1. Arastas
            05.12.2024 10:17

            То есть автору комментария выше надо было написать A_(x1)?


            1. AlexKev Автор
              05.12.2024 10:17

              Нет. A_(x_1) можно. Но непонятно, почему на этом вообще зацикливать внимание нужно, если речь буквально об одном дополнительном символе идёт)


  1. khgvghv
    05.12.2024 10:17

    Эт вы правильно решили не повторять прошлогоднюю ошибку и запостили статью от нового пользователя..

    https://habr.com/ru/companies/timeweb/articles/742756/


    1. Imaginarium
      05.12.2024 10:17

      Ага, ага)