\documentclass[12pt]{article} \usepackage{minimal} \DeclareMathOperator{\size}{size} \DeclareMathOperator{\swap}{swap} \DeclareMathOperator{\DPLL}{DPLL} \newcommand{\sometext}{текст внутри команды\xspace} \begin{document} \section*{xspace\footnote{\url{https://www.ctan.org/pkg/xspace}}} При помощи пакета xspace можно спокойно писать \sometext, не боясь за последующие знаки препинания и пробелы. \section*{amsmath\footnote{\url{https://www.ctan.org/pkg/amsmath}}} DeclareMathOperator позволяет один раз создать математический оператор, похожий на $\max$ или $\log$, например, $\size$, и дальше его использовать, не окружая его каждый раз в operatorname. $\size(A)$ всегда выглядит лучше, чем $size(A)$. Также, его можно использовать для названий алгоритмических функций. DeclareMathDelimiter полезен для создания команд для разного вида скобочек (округления, множества, т.д.). Это удобно не только для того, чтобы не запутаться в самих скобочках, но и позволяет легко (достаточно дописать <<*>> после команды) учесть высоту внутренностей скобок, если формула оказывается большой (но не стоит злоупотреблять для формул обычной высоты). $\floor*{\frac{1 + \frac{1}{2}}{5 \cdot \frac{3}{4}}}$ выглядит лучше, чем $\floor{\frac{1 + \frac{1}{2}}{5 \cdot \frac{3}{4}}}$. Для формул с большим количеством разделителей (например, множества с условиями или условные матожидания), существует более продвинутая версия команды DeclareMathDelimiterX. Пример: $\map{x}{x \in Y}$. Добавление звездочки по прежнему работает: \[ \map*{\frac{1 + \frac{\abs{A}}{\abs{B}}}{\abs{C}}}{C \subseteq D} \text{ лучше, чем } \map{\frac{1 + \frac{\abs{A}}{\abs{B}}}{\abs{C}}}{C \subseteq D}. \] Для больших формул, как формула выше, можно использовать квадратные скобки с обратным слешем: <<\textbackslash [ формула \textbackslash ]>>. Такой способ эквивалентен окружению equation* (если подключен amsmath), но несколько короче. Двойные доллары использовать не стоит, они ведут к проблемам с версткой. \section*{complexity\footnote{\url{https://ctan.org/pkg/complexity}}} \newlang{\TAUT}{TAUT} Для классов сложности существует пакет complexity. При помощи него можно удобно писать формулы с самими классами $\P \stackrel{?}{=} \BPP, \ZPP = \RP \cap \coRP$, а также задавать языки $\TAUT \in \coNP$ или семейства функций для асимптотики $2^n \cdot n^2 = \BigO(2^n \cdot \poly(n)), n \log n = \BigO(n \cdot \polylog(n))$. \section*{algpseudocode\footnote{\url{https://www.ctan.org/pkg/algorithmicx}}} Для алгоритмов придумано много разных пакетов, самый современный из них algpseudocode. \newcommand{\sat}{satisfiable\xspace} \newcommand{\unsat}{unsatisfiable\xspace} \begin{algorithm} \caption{$\DPLL$ (Davis, Putnam, Logemann, Loveland)} \begin{algorithmic}[1] \Procedure{$\DPLL_{A, B}$}{$\varphi$} \Comment{$\varphi$~--- формула в КНФ} \If{$\varphi$ пуста} \State \Return \sat \EndIf \If{$\varphi$ содержит пустой дизъюнкт} \State \Return \unsat \EndIf \State $x \gets A (\varphi)$ \Comment{$A$ выбирает переменную из формулы $\varphi$} \State $b \gets B (\varphi, x)$ \Comment{$B$ выбирает значение для переменной $x$} \If{$\DPLL_{A, B} (\varphi[x = b]) = \text{\sat}$} \State \Return \sat \EndIf \State \Return $\DPLL_{A, B} (\varphi[x = \lnot b])$ \EndProcedure \end{algorithmic} \end{algorithm} Его удобство заключается в том, что в нем проще (относительно альтернатив) писать условия и циклы, а результат можно копировать. \begin{algorithmic}[1] \While{$a \neq 0$} \While{$b \geq a$} \State $b \gets b - a$ \EndWhile \State $\swap(a, b)$ \EndWhile \end{algorithmic} \section*{Двоеточия и mathtools\footnote{\url{https://www.ctan.org/pkg/mathtools}}} Есть разница между <<:>> и командой colon. Первая означает бинарный оператор (пробелы ставятся с обеих сторон) и должна использоваться, например, для однородных координат $\parens{x : y : z}$, в то время как команда colon ставит ассиметричные пробелы и лучше подходит для использования в определениях функций $f \colon \mathbb{N} \to \mathbb{R}$. Для пары двоеточия и равенства, которое обычно используется для равенства по определению, есть команда coloneqq, лежащая в пакете mathtools. $x \coloneqq y - z$ выглядит лучше, чем $x := y - z$ (разница в выравнивании по высоте, на других шрифтах может быть еще более заметной). \end{document}