Ведутся технические работы. Это может временно повлиять на скорость работы сайта. Приносим извинения за неудобства и благодарим за ваше понимание!

Продвинутый LaTeX: как написать свой шаблон

В лекции мы переплетём две нити: теоретическую и практическую. В теоретической разберём, как LaTeX (или, чаще, TeX) «видит» документ, как мы можем манипулировать этим взглядом, какие существуют примитивы и как программировать на TeX. В «практической нити» будем применять только что полученные знания для создания собственного шаблона презентаций и за вечер пройдёмся от нуля до полноценного стилевого файла. Вместе с тем мы не будем смотреть на несчётное множество великолепных сторонних шаблонов для облегчения работы, а сосредоточимся именно на встроенных, но малоизвестных, возможностях. В своей основной части лекция будет опираться на книгу Д. Кнута «The TeXbook».

Лекция будет вам понятна, если у вас есть базовые навыки работы в LaTeXе. Если вы уже писали в нём статьи, рефераты или презентации. Приходите, если вас не пугает запись begin{frame}end{frame}, вы знаете, как подключить сторонний файл и понимаете, что $$frac{1}{2}$$ выведет на страницу дробь.

Автор лекции – Антон Лиознов. Антон выпустился из CS центра в 2015 году. Проходил стажировку в Papeeria – онлайн редакторе LaTeX и Markdown. Сейчас Антон, как начинающий учёный, пишет в LaTeX статьи и презентации, пропагандируя этот инструмент среди новых студентов.

Слайды с лекции: https://github.com/Lavton/latexLectures/blob/master/2022_CSC/LaTeX%20for%20TeXperts%20-%20outclass.pdf

Шаблон в Tex: https://github.com/Lavton/latexLectures/tree/master/2022_CSC/template_creating/15_final

План лекции:
00:00 Вступление: для чего вам лекция, что узнаете
09:54 Раздел 1 «Слегка продвинутый LaTeX: Типографика и создание команд»
10:09 Простое созданик команд: области видимости, newcommand, стилевые файлы
19:13 Длины: абсолютные и относительные, арифметика
35:40 Боксы: горизонтальные и вертикальные. Высота, глубина и ширина
52:31 Клей: растяжимые пробелы, бесконечный и отрицательный клей
1:01:55 Моды и создание параграфов: вертикальная, горизонтальная и математическая моды. Отличия
1:07:15 Возможности создания команд и передачи параметров в LaTeX: опционные параметры, пакет kvoptions
1:13:30 промежуточные итоги первой части
1:16:15 Раздел 2: «Очень продвинутый LaTeX: программирование и работа с примитивами»
1:19:57 Создание команд: ключевое слово def, сопостовление с образцом
1:28:33 Условные операторы: newif, сопоставление для макросов и примитивов, ifthenelse
1:37:07 Работа со счётчиками: создание, манипулирование. Доминирование
1:45:37 Работа с длинами: создание, манипулирование
1:54:43 Работа с боксами: создание, манипулирование, печать, получение габаритов
2:03:17 Циклы и рекурсия
2:04:40 Работа с файловой системой: запись и чтение с файлов, зачем запускаем компиляцию дважды
2:07:24 Манипулирование с именами команд и ещё несколько ключевых слов: let, создание команды по тексту, какой символ отвечает за комментарии
2:11:50 Деббагинг и логгирование
2:12:31 Создаём прогрессбар с помощью всего, что узнали раньше (финал практики)
2:33:17 Резюме, как создавали прогрессбар
2:35:25 Финал

( ! ) Warning: Invalid argument supplied for foreach() in /home/domains/malitikov.ru/public_html/wp-content/themes/malitikov/single.php on line 44
Call Stack
#TimeMemoryFunctionLocation
10.0000350344{main}( ).../index.php:0
20.0000350624require( '/home/domains/malitikov.ru/public_html/wp-blog-header.php ).../index.php:17
30.08368472432require_once( '/home/domains/malitikov.ru/public_html/wp-includes/template-loader.php ).../wp-blog-header.php:19
40.08518497120include( '/home/domains/malitikov.ru/public_html/wp-content/themes/malitikov/single.php ).../template-loader.php:106

Мы рекомендуем


( ! ) Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in /home/domains/malitikov.ru/public_html/wp-includes/class-wpdb.php on line 2322
Call Stack
#TimeMemoryFunctionLocation
10.0000350344{main}( ).../index.php:0
20.0000350624require( '/home/domains/malitikov.ru/public_html/wp-blog-header.php ).../index.php:17
30.08368472432require_once( '/home/domains/malitikov.ru/public_html/wp-includes/template-loader.php ).../wp-blog-header.php:19
40.08518497120include( '/home/domains/malitikov.ru/public_html/wp-content/themes/malitikov/single.php ).../template-loader.php:106
50.221522314536WP_Query->__construct( $query = ['post_type' => 'post', 'post_status' => 'publish', 'fields' => 'ids', 'posts_per_page' => -1, 'no_found_rows' => TRUE, 'orderby' => 'none'] ).../single.php:65
60.221522314536WP_Query->query( $query = ['post_type' => 'post', 'post_status' => 'publish', 'fields' => 'ids', 'posts_per_page' => -1, 'no_found_rows' => TRUE, 'orderby' => 'none'] ).../class-wp-query.php:4081
70.221622314536WP_Query->get_posts( ).../class-wp-query.php:3949
80.221922326400wpdb->get_col( $query = 'SELECT wp_posts.ID\n\t\t\t\t\t FROM wp_posts \n\t\t\t\t\t WHERE 1=1 AND wp_posts.post_type = \'post\' AND ((wp_posts.post_status = \'publish\'))\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t ', $x = ??? ).../class-wp-query.php:3300
90.221922326400wpdb->query( $query = 'SELECT wp_posts.ID\n\t\t\t\t\t FROM wp_posts \n\t\t\t\t\t WHERE 1=1 AND wp_posts.post_type = \'post\' AND ((wp_posts.post_status = \'publish\'))\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t ' ).../class-wpdb.php:3107
102.4589713326296mysqli_fetch_object( $result = class mysqli_result { public $current_field = 0; public $field_count = 1; public $lengths = [0 => 7]; public $num_rows = 1515341; public $type = 0 } ).../class-wpdb.php:2322