Оформление задач в latex + beamer как на школьной доске

15 июля 2022. Комментарии .

Дистанционные занятия в 2020 году застали меня неподготовленным к ведению уроков онлайн. Сейчас я для этих целей применяю графический планшет, а тогда я даже не знал про их существование.

Оглавление #

Цель #

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

Итак, требования, которые я предъявлял к процессу подготовки презентации с задачами:

  1. Удобная работа с 2-3 колонками
  2. Оформление «дано» как на доске (с ограничивающими линиями)
  3. Компактный код
  4. Оглавление с активными ссылками, отображающее прогресс урока
  5. Возможность и использовать паузы, и сохранять pdf без них

Реализация #

В архиве лежат необходимые файлы, чтобы скомпилировать презентацию.[1]

Выглядит презентация так:

Удобная работа с 2-3 колонками #

Колонки в latex можно реализовать как минимум следующими способами:

Я пользовался последним методом, с ним было меньше всего проблем с вертикальным выравниванием (часто нужно начать новую колонку с самого верха, не заполнив предыдущую), да и код довольно компактный:

1
2
3
4
5
6
7
\begin{columns}[T]
\column{0.15\linewidth}
...
\column{0.40\linewidth}
...
\column{0.40\linewidth}
\end{columns}

Оформление «дано» как на доске #

Определены новые команды — «дано» и «найти» (\find{...} и \given{...}).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\newcommand\insertitemn[1]{\item[] \ensuremath{#1\;-\;?}}
\newcommand\insertitem[1]{\item[] \ensuremath{#1}}
\NewDocumentCommand\given{>{\SplitList{;}}mO{0.15}}
{
\column{#2\linewidth}
\minipage[t][\textheight][t]{\columnwidth}
\textit{Дано:}
% Above&below list
\begin{list}{}{\labelsep=0em \labelwidth=0em \leftmargin=0.0em \itemindent=0em \parskip=0ex \parsep=0ex \itemsep=0.5ex \topsep=1ex \partopsep=0ex}
\ProcessList{#1}{ \insertitem }
\end{list}
\vspace{1ex}\hrule\vspace{0.5ex}
}
\NewDocumentCommand\find{>{\SplitList{;}}m}
{
\begin{list}{}{\labelsep=0em \labelwidth=0em \leftmargin=0.0em \itemindent=0em \parskip=0ex \parsep=0ex \itemsep=0.5ex \topsep=1ex \partopsep=0ex}
\ProcessList{#1}{ \insertitemn }
\end{list}
\endminipage\vline
}

Использование этих команд позволяет вместо такого

1
2
3
4
5
6
7
8
9
10
\column{0.12\linewidth}
\minipage[c][\textheight][s]{\columnwidth}
\textit{Дано}: \\[7pt]
\hspace*{-0pt}\eds, \r \\[2pt]
\Ro, \Rd \\[2pt]
\C \\ \hrule\vspace*{3mm}
$I_0\,-?$ \\[2pt]
$I_{01}\,-?$ \\[2pt]
$I_{02}\,-?$
\endminipage\vline

писать такое

1
2
\given{\eds, \r; \Ro, \Rd; \C}[0.12]
\find{I_0; I_{01}; I_{02}}

для достижения одинакового результата:

Компактный код #

Благодаря новым командам целиком слайд с задачей может выглядеть относительно компактно (основная часть кода — содержание слайда, а не его разметка):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
\begin{frame}[noframenumbering]{\#1}
\begin{columns}[T]

\given{\eds, \r; \Ro, \Rd; \C}[0.12]
\find{I_0; I_{01}; I_{02}}

\column{0.36\linewidth}
\includegraphics[width=0.91\linewidth,clip,trim={0mm 0mm 0mm 0mm}]{cik_1a} \br \pause
\includegraphics[width=0.99\linewidth,clip,trim={0mm 0mm 0mm 0mm}]{cik_1b} \pause

\column{0.47\linewidth}
$
\begin{cases}
I_0 = \dfrac{\eds}{r+\frac{\Ro\Rd}{\RR}} = \pause \dfrac{\eds(\RR)}{r(\RR)+\Ro\Rd} \\[5mm] \pause
I_{01}R_1=I_{02}R_2 \br \pause
I_0=I_{01}+I_{02} \pause
\end{cases}
$\br

$I_0 = I_{01}\!\left(\!1+\frac{\Ro}{\Rd}\!\right) = \frac{I_{01}(\Ro+\Rd)}{\Rd}$ \br \pause
$I_{01} = I_0\frac{\Rd}{\RR} = \boxed{\frac{\eds\Rd}{r(\RR)+\Ro\Rd}}$ \br \pause
$I_{02} = I_0\frac{\Ro}{\RR} = \boxed{\frac{\eds\Ro}{r(\RR)+\Ro\Rd}}$ \\[10pt] \pause

$I_0 \not\propto C$

\end{columns}
\end{frame}

Оглавление с активными ссылками #

Воспользовался стандартными методами beamer, сделав чуть минималистичнее стандартного. Для этого надо не забывать вставлять \section{...} или использовать что-нибудь типа \addcontentsline{toc}{section}{...}.

1
\setbeamertemplate{headline}{\ttfamily\insertsectionnavigationhorizontal{\textwidth}{\hskip55pt plus1filll}{}}

Включение / отключение пауз #

Под паузами подразумевается последовательное появление элементов на одном и том же слайде по щелчку. Реализуется в beamer это просто как две страницы в pdf, отличающиеся только наличием конкретного элемента. Чтобы отключить паузы, достаточно добавить в \documentclass опцию handout.

Заключение #

Что-то из задуманного получилось. По крайней мере, довольно продолжительный период времени меня хватало на то, чтобы после рабочего дня подготовить 2-3 урока на следующий день. В презентации, использованной в качестве примера для этой записи, вдобавок еще и все электрические схемы я нарисовал в python при помощи библиотеки schemdraw. Поразительно, сколько же было во мне энтузиазма!

Многие презентации сохранились и лежат на специальной странице в разделе «видео-уроки».

Все же после того, как сделал один такой урок и разобрался с шаблоном, подготовить следующий становится уже не очень трудоемко. С появлением графического планшета, однако, я презентации забросил сразу же. Очевидный плюс планшета — к уроку готовиться не надо, включил MyPaint (в этой программе писать значительно приятнее, чем во всем, что я перепробовал) — и поехали. Я даже в какой-то момент с 11-ым классом перешел на очно-дистанционный режим: подключаю электронную доску в классе как монитор к своему ноутбуку и пишу на планшете. Те, кто присутствуют в классе, видят все на доске. То же самое видят и те, кто подключается онлайн. Получается довольно удобно.


  1. В архиве в файле с аббревиатурами очень много «лишнего». Дело в том, что этот файл я использую во всех своих latex документах, связанных со школьной физикой. Возможно, кому-то покажется полезным, там много команд, которые имеют осмысленные названия, так что их легко запомнить. Рекомендую ознакомиться с подходом, который я использую для написания конструкций типа Ом:

      \usepackage{xspace}
      \usepackage{siunitx}
        \sisetup{exponent-product=\cdot,output-decimal-marker={,}}
      \def\Om{\ensuremath{\;\textrm{Ом}}\xspace}
      \def\ROm[#1]{\ensuremath{R=\num
    
    ↩︎