Привет, Хабр!

Меня зовут Шайдурова Арина, я Data Scientist  и участник профессионального сообщества NTA. Сегодня я поделюсь с вами своим опытом использования LaTeX для написания математических формул. Всё просто и с примерами, идеально подойдет для новичков синтаксиса LaTeX.

LaTeX является очень популярным инструментом для написания различных материалов: в нём можно написать и книгу, и резюме, и дипломную работу, создать постер и даже календарь. Среди его пользователей он ценится за многие качества, но основную ценность для технических задач представляет его удобное, гибкое и легкое написание всевозможных математических формул!

Раньше для меня было большой проблемой не только написать формулу в текстовом редакторе, но и найти нужные символы, как число пи. Приходилось искать в интернете, копировать символ в странном шрифте и вставлять в документ, в целом это занимало много времени, да и внешне формула выглядела некрасиво. После того как я познакомилась с LaTeX, свою работу с математическими выражениями оформляю только в нём. Он позволяет написать формулу именно в таком виде, в каком ты её задумал: подобрать шрифты, размеры, расположение, обозначения и многое другое по своему вкусу.

Большим удобством является то, что LaTeX поддерживается уже во многих сервисах либо автоматически, либо после загрузки нужного расширения. Для меня большим плюсом является то, что язык разметки markdown позволяет использовать многие пакеты для написания формул LaTeX, что даёт возможность сделать качественную презентацию проекта в Jupyter Notebook.

Делюсь с вами тем, что я применяю в своей работе. Этот пост вы можете использовать как памятку. Все приведённые здесь примеры можно найти по ссылке на Colab Notebook в конце поста.

Основные принципы

LaTeX формулы можно написать двумя способами: внутри текста (строчные) и на отдельной строке (вынесенные). Я пользуюсь обоими типами формул в зависимости от ситуации. Строчные формулы окружаются знаками доллара с обеих сторон $...$. Между символами операций (плюс, умножение и т.д.) пробелов можно ставить сколько угодно или вовсе не ставить — LaTeX автоматически поставит только один пробел.

На картинке ниже представлен пример из Colab Notebook. В верхней части картинки расположен скрипт до запуска текстовой ячейки, а в нижней - после.

Далее все примеры будут показаны таким образом.

Вынесенные формулы окружаются двумя знаками доллара с каждой стороны $$...$$. Неважно, ставите вы доллары на одной строке с текстом или нет, LaTeX всё равно выведет это на отдельную строку. Я пишу их вне текста для лучшего восприятия скрипта.

Степени и индексы

Для меня эта часть является самой любимой — степени и индексы написать в LaTeX очень просто и их легко запомнить. Для индекса используется синтаксис x_{индекс}, а “крышечка” возводит в степень x^{степень}. Пример показан ниже.

Я предпочитаю опускать фигурные скобки, если используется один символ для степени или индекса, чтобы не засорять скрипт.

Корни и дроби

Переходим к командам в формулах, они начинаются со знака косой черты, т.e.  \команда. Самые используемые команды в моей работе это корень и дроби. Корень из n-ой степени выполняет команда \sqrt[n]{выражение}, где n является необязательным аргументом, а дробь пишется как \frac{числитель}{знаменатель}.

Суммы и интегралы

Во времена обучения в университете я часто писала суммы и интегралы всевозможных видов, хорошо, что LaTeX позволяет всё это реализовать. Синтаксис для сумм и интегралов представлен на картинке. В строчной формуле эти операторы меньше, чем в вынесенных.

Команды функций

Некоторые функции встроены в виде команд в LaTeX, например, тригонометрические. После запуска напечатаются названия функций обычным текстом, а не математическим шрифтом. Я предпочитаю ими пользоваться, чтобы отличать функции от переменных внешне, но это, конечно, необязательно.

Текст внутри формул

Если вы, как и я, любите добавить какой-то текст сбоку от формул, то предлагаю использовать для этого универсальную команду \text{...}. Ещё с помощью данной команды можно напечатать обычным текстом элементы формул, как в командах для функций, только самостоятельно выбирать, что написать прямым шрифтом.

Текст также может быть написан курсивом \textit{...} или жирным шрифтом \textbf{...}.

Пробелы в формулах

Меня часто не устраивает расположение элементов формул относительно друг друга: что-то слишком далеко, а что-то слишком близко находится. Настраивать расположение можно разными способами, например, через вставку \text{пробел}, но я пользуюсь более простыми и гибкими командами, которые лучше показать на картинке:

Слева направо расположены пробелы в порядке возрастания их длины  (положительной или отрицательной). Команды \; и \, являются пробелами с положительной длиной, т.е разносят символы дальше друг от друга. Пробелы с отрицательной длиной \! сдвигают символы ближе друг к другу. Длины этих команд выражены в относительных единицах и зависят от размера шрифта. Универсальная команда \hspace позволяет задать нужную длину как в относительных единицах, так и в абсолютных, принимает и положительную и отрицательную длины.

Популярные символы

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

Многострочные формулы

Часто в работе приходится писать логически связанные между собой формулы: они чередуются одна за другой. В обычной вынесенной формуле не получится написать формулы на разных строках в пределах одного блока. В таком случае мне удобно использовать окружение align, которое используется так:

$$

\begin{align}

  первая формула \\ 

  вторая формула \\ 

  ...

\end{align}

$$

Две косые черты \\ используются для того, чтобы перенести выражение на другую строку.

Вот пример такого использования:

В этом окружении я использую выравнивание, чтобы получить более удобочитаемый вид формулы. Осуществить его можно с помощью знака амперсанда &, для этого достаточно поставить его в тех местах, относительно которых вы хотите произвести выравнивание:

Векторы и матрицы

Для обозначения вектора с помощью стрелочки используется команда $\vec{...}$, для написания вектора в матричном виде я выбираю окружение pmatrix, подобных окружений есть несколько. Для матрицы использую этот же пакет, а столбцы разделяю знаком &:

Скобки

Согласитесь, неприятно, когда написана большая формула с дробями, а скобки стоят несоответствующие сей конструкции — обычные, маленькие. Для такого случая в LaTeX есть несколько команд для увеличения размера скобок. Причем как круглых, так и квадратных и фигурных скобок. Когда мне некогда разбираться и подбирать размер, я применяю  конструкцию \left( ... \right), она сама решает, какой взять масштаб для скобок. Эти команды используется только в паре, по одиночке они работать не будут.

Если меня не устраивает автоматически подобранный размер, то тогда регулирую его  самостоятельно командами \bigl < \Bigl < \biggl < \Biggl и соответствующими командами для правых скобок. На картинке ниже наглядно показано, насколько их размеры отличаются.

В этом посте я поделилась тем, что использую в своей работе больше всего: степени и индексы, корни и дроби, суммы и интегралы, векторы и матрицы. Немаловажна и эстетичная часть оформления формул: многострочная запись, текст внутри формул, специальные символы, пробелы, скобки.

Надеюсь, этот пост был вам полезен. А как вы используете LaTeX? Пишите в комментариях, какими лайфхаками пользуетесь вы.

Ссылка на Colab Notebook.

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


  1. nerudo
    00.00.0000 00:00
    +7

    Еще было бы интересно почитать как некрасиво писать формулы c LaTeX.


    1. Dimava
      00.00.0000 00:00

      И почитать как писать формулы для чайников

      То есть WYSIWYG для которого не надо пол часа устанавливать гигабайтное приложение

      Есть конечно очень красивый и удобный https://cortexjs.io/mathlive/, но им пользуется приблизительно никто


    1. PereslavlFoto
      00.00.0000 00:00
      +3

      Ответить легко.

      В ряде случаев при написании дробей и корней приходится подгонять отступы.

      Знак интеграла есть российский и импортный, некоторые считают импортный неудобным. Это же относится к знакам вроде «больше или равно».

      При вёрстке не в базовом шрифте возникают вопросы, как сочетать гарнитуру текста с гарнитурой формульного набора. В 95 % случаев латех справляется, а в 5 % случаев надо подгонять.

      В общем, в мелочах могут быть некрасивые разночтения.


    1. NewTechAudit Автор
      00.00.0000 00:00

      Добрый день! Спасибо за ваш комментарий.

      Забавно, но в LaTeX действительно можно написать формулы некрасиво – он гибкий и любой отступ/размер или шрифт в нём можно настроить под себя – или, как в этом случае, против себя.


  1. te3s
    00.00.0000 00:00
    +5

    Есть книжка К. В. Воронцова "LaTeX в примерах". Наверное, лучший сборник в духе "как писать формулы".


    1. NewTechAudit Автор
      00.00.0000 00:00

      Добрый день!

      Спасибо, что делитесь полезными материалами.


  1. ok8
    00.00.0000 00:00
    +11

    @NewTechAudit, вы пишете статью по \LaTeX, и вставляете картинки вместо формул

    $$\sin{\alpha}^2+\cos{\alpha}^2=1.$$
    
    \sin{\alpha}^2+\cos{\alpha}^2=1.

    Зачем?


    1. AlexanderAstafiev
      00.00.0000 00:00
      -5

      Может, не "зачем", а "почему"? Потому что Хабр не умеет в формулы?


      1. ok8
        00.00.0000 00:00
        +7

        А как же тогда я написал своё сообщения?


        1. Ndochp
          00.00.0000 00:00
          -1

          А правда, как?
          Код инспектор говорит картинка


          <img class="formula" source="\sin{\alpha}^2+\cos{\alpha}^2=1." alt="\sin{\alpha}^2+\cos{\alpha}^2=1." src="https://habrastorage.org/getpro/habr/formulas/1/12/123/12384df8d0f06966c7e3925e0efb7424.svg" width="auto" height="auto">

          В палитре редактора комментариев в старом интерфейсе тоже ничего не нашлось.


          1. domix32
            00.00.0000 00:00
            -1

            В markdown есть явная поддержка MathJax изначально. То бишь бахаем баксы как в посте и погнали. В новом редакторе есть секция формулы, которая позволяет вводить их в tex формате.


            1. Ndochp
              00.00.0000 00:00

              Видно новые фишки. Старый редактор комментариев при взведенной галке маркдаун на баксы не реагирует. Ссылки, зачеркивания и тд умеет, а формулы — никак
              $ f(o)=rm$


              1. domix32
                00.00.0000 00:00
                -1

                f(o)=rm
                умвр.
                вы пробелы просто зря поставили


                1. Ndochp
                  00.00.0000 00:00

                  $f(o)=rm$
                  Не, походу все-таки старый и новый редактор.


    1. NewTechAudit Автор
      00.00.0000 00:00

      Добрый день!

      Для наглядности использовали картинки из Colab Notebook, ссылка на который приведена в посте.

      Спасибо за ваш комментарий, я это учту.


  1. hurtavy
    00.00.0000 00:00
    +4

    Да не является LateX очень популярным инструментом. Вот раньше... Ещё лет 10-15 назад серьёзные физические журналы, например, от Elsevier требовали оформлять статьи в LateX, а теперь вместо этого берут в ворде


    1. NewTechAudit Автор
      00.00.0000 00:00

      Добрый день!

      На моей практике LaTeX всё ещё остаётся популярным инструментом как в работе, так и для своих заметок.

      Мне пригождалось использовать синтаксис LaTeX для написания формул: в  презентациях, юпитер тетрадках, курсовой/дипломной/статье в журнале, на постере, на схемах и в markdown файлах для README в гите.

      Что, как мне кажется, говорит о его широкой применимости, ведь довольно много платформ поддерживают синтаксис LaTeX.

      Спасибо за ваш комментарий!


    1. huk6639
      00.00.0000 00:00

      Берут и в том, и в том. В MDPI есть даже lyx-овский шаблон


      1. hurtavy
        00.00.0000 00:00

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


  1. NeoCode
    00.00.0000 00:00
    +2

    Интересно почему LaTeX не приняли в качестве официального средства html для формул, а вместо него придумали громоздкий mathml?


    1. AlexanderAstafiev
      00.00.0000 00:00

      MathML — подмножество xml, а KaTeX спокойно конвертирует LaTeX-нотацию в MathML, никаких проблем


  1. anzay911
    00.00.0000 00:00

    Жаль, в мобильном клиенте Хабра картинки дают вдвое меньший размер шрифта. Пришлось переключиться на десктоп.


  1. neword
    00.00.0000 00:00

    пользуюсь сводкой команд katex. вполне доволен


  1. PereslavlFoto
    00.00.0000 00:00

    \textit{...} или жирным шрифтом \textbf{...}

    Эти команды относятся к физической вёрстке. Как и в html, предпочтительнее логическая, семантическая вёрстка в виде команд \emph{} или...


    Стоп-стоп, или что? Какая логическая команда приводит к полужирному шрифту? А вот и никакая не приводит, потому что полужирного шрифта надо избегать, потому что он выглядит неопрятным.


    Стоп-стоп, но в заголовках ведь используют полужирный шрифт? Да. К сожалению, да. Однако если это в вашей власти, в заголовках тоже советуют избегать.


    1. NewTechAudit Автор
      00.00.0000 00:00

      Добрый день!

      Согласны с вами. Спасибо за интерес к публикации.


  1. Ndochp
    00.00.0000 00:00
    +1

    Пара моментов:


    1. Моя инструкция утверждает "Suggestion: Using the $$...$$ should be avoided, as it may cause problems, particularly with the AMS-LaTeX macros. Furthermore, should a problem occur, the error messages may not be helpful. " и вместо этого агитирует за LaTeX shorthand \[...\]
    2. Так получилось, что на латексе я в основном дочкины домашки пишу после того, как она руку травмировала. Причем в маркдаун документах VSC. Там есть какой-то способ заставить работать многострочный режим? ни двойной бакс ни квадратные скобки вроде не спасли.

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


    1. PereslavlFoto
      00.00.0000 00:00

      \DeclareTextSymbol{\textdegree}{TS1}{176}

      В кодировке TS1 градус связан со 176 символом.

      \DeclareInputText{248}{\textdegree}

      В 866 кодировке градус связан с 248 символом.

      \DeclareInputText{176}{\textdegree}

      В 1251 кодировке градус связан с 176 символом.

      \DeclareUnicodeCharacter{00B0}{\textdegree}

      В юникоде градус связан с 00B0 символом.

      Ваш вопрос сводится к тому, что далеко не каждая кодировка поддерживает знак градуса. В тех кодировках, где знак градуса не существует и откатиться на другую кодировку невозможно, придётся рисовать окружность.

      В целом же LaTeX ставит перед собой задачу воспроизвести любой символ, поэтому в ряде случаев решение будет не самым простым. Для примера можно вспомнить передачу церковнославянского текста или нотную запись.

      Аналогичную задачу поставили перед собой авторы Юникода, однако для её решения они требуют использовать кодировку Юникод. Напротив, авторы LaTeX не требуют использовать какую-то одну кодировку, а предполагают, что входной текст будет в самых разных кодировках.


      1. Ndochp
        00.00.0000 00:00

        Да мне как бы не произвольный символ, а математический. Радианы конечно хорошо, но и $\angle ABC = 90^\circ$ тоже часто нужно


        1. PereslavlFoto
          00.00.0000 00:00

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


          Может быть, вам будет проще подменить символ градуса в преамбуле.


          1. Ndochp
            00.00.0000 00:00
            +1

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


            1. PereslavlFoto
              00.00.0000 00:00

              \textdegree для текста.
              \degree для математики.


              Предложение загонять окружность в верхний индекс — это очень необычное предложение, которого я никогда не видел. В латех-среде такое не принято. Ваши подозрения оказались верными, то есть эти инструкции действительно писали люди с необычной фантазией.


              ( А впрочем, от одного доктора наук я слышал, что весь LaTeX показывает нам пример нечеловеческого мышления. )


              1. Ndochp
                00.00.0000 00:00

                Спасибо, но как говориться за что купил:
                https://expange.ru/e/%D0%9A%D0%B0%D0%BA_%D0%B2_LaTeX_%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%B3%D1%80%D0%B0%D0%B4%D1%83%D1%81%D0%B0


                https://lomonosov-msu.ru/eng/event/forum/thread/403/list " — знак градуса — как $^circ$"


                И это верхние две строчки в выдаче. Хотя сегодня гугл решил ткнуть меня носом и вывел на "колдунском" месте цитату из википедии с \degree, \textdegree и ^\circ разом.


                1. PereslavlFoto
                  00.00.0000 00:00

                  Вторая ссылка волшебная, там написано, как поступать, если в кодировке нету буквы ё.


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


                  Второе, что сразу бросается в глаза: автор этих примечаний обращается к людям, которые не читали ни одной книги, ни одного руководства про латех. Он обращается к диким людям, которые умеют только письмо, а чтения не умеют.