Как оформлять исходный код в документах LaTeX описано на этой странице. Здесь мы рассматриваем особенности представления кода в презентациях.
Используем опцию fragile
Если вы хотите разместить на слайде исходный код программы или другой дословный (verbatim) текст, то нужно указать для этого слайда опцию fragile
. Для окружения verbatim
это выглядит так:
\begin{frame}[fragile]{Код}
\begin{verbatim}
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
}
\end{verbatim}
\end{frame}
Для пакета listings
:
\lstset{language=C}
...
\begin{frame}[fragile]{Код}
\begin{lstlisting}
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
}
\end{lstlisting}
\end{frame}
Для пакета minted
:
\begin{frame}[fragile]{Код}
\begin{minted}[fontsize=\footnotesize]{c}
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
}
\end{minted}
\end{frame}
Команду \end{frame}
нужно обязательно поместить в следующей строке после \end{verbatim}
или подобных ей команд. Это связано с особенностью современной реализации verbatim
, которая состоит в том, что текст, следующий за \end{verbatim}
в той же строке, полностью игнорируется. Если этим текстом окажется \end{frame}
, то LaTeX выдаст сообщение об ошибке, означающее отсутствие закрывающей скобки:
! File ended while scanning use of \next.
\end{frame}
должно располагаться в начале строки, и после него в той же строке нельзя размещать код или комментарии.
Масштабирование размеров кода
Beamer не поддерживает автоматического масштабирования содержимого слайда. По мнению автора пакета, Тилла Тантау, такое масштабирование приводит к созданию некачественных презентаций. Если материала слишком много для одного слайда, лучше создать новый слайд, чем пытаться впихнуть всю информацию в существующий.
Резон в этом есть. Тем не менее, могут возникнуть ситуации, когда от этого правила лучше отступить. Например, если исходный код лишь слегка не помещается на слайд, а разбивать его на два слайда нет логических оснований. Или когда нужно выделить более крупно какой-то фрагмент кода. Все эти задачи можно решить без привлечения возможностей beamer. Основных путей решения здесь два:
- изменить размер шрифта кода в настройках minted или listings;
- масштабировать фрагмент кода.
На первом способе мы останавливаться не будем, он представляется очевидным. Рассмотрим масштабирование фрагмента кода.
Команды масштабирования \scalebox
и \resizebox
из пакета graphics не работают с окружениями verbatim
, а именно через такие окружения реализовано представление исходного кода. Вместо них существует окружение adjustbox
из одноименного пакета, специально предназначенного для работы с verbatim
. Выглядит оно так:
\begin{adjustbox}{width=ширина,height=высота,keepaspectratio}
code
\end{adjustbox}
Необязательная опция keepaspectratio
позволяет сохранить пропорции при масштабировании.
Пример совместного использования adjustbox и listings:
\documentclass{beamer}
\usepackage{listings}
\usepackage{adjustbox}
\begin{document}
\newlength\someheight
\setlength\someheight{2cm}
\begin{frame}[fragile]
\frametitle{Source File}
\begin{adjustbox}{width=\textwidth,height=\someheight,keepaspectratio}
\begin{lstlisting}
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
}
\end{lstlisting}
\end{adjustbox}
\end{frame}
\end{document}
Управляя размером \someheight
, мы задаем тот или иной масштаб отображения кода.
При использовании пакета minted нужно дополнительно поместить оформленный с его помощью код в окружение minipage
. В остальном идея остается та же
\documentclass{beamer}
\usepackage{minted}
\usepackage{adjustbox}
\begin{document}
\newlength\someheight
\setlength\someheight{3cm}
\begin{frame}[fragile]
\frametitle{Blah}
\begin{adjustbox}{width=\textwidth,height=\someheight,keepaspectratio}
\begin{minipage}{\linewidth}
\begin{minted}[fontsize=\footnotesize]{c}
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
}
\end{minted}
\end{minipage}
\end{adjustbox}
\end{frame}
\end{document}
— варьируя \someheight
управлять масштабом отображения. Естественно, в качестве изменяемого размера можно было использовать ширину, а также оба размера одновременно.
Комментарии
comments powered by Disqus