В Beamer, каков «правильный способ» уменьшения масштаба элемента слайда для лучшего размещения?

В Beamer, каков «правильный способ» уменьшения масштаба элемента слайда для лучшего размещения?

Я хочу уменьшить масштаб элемента на слайде, чтобы он лучше подходил по ширине и/или высоте. Я готов уменьшить размер шрифта, использовать что-то вроде scalebox/resizebox или что-то подобное (но не сжимающее пространство). Дело в том, что я хочу избежать низкоуровневых или "не-beamerish" команд, а также избежать выбора явных размеров шрифта; вместо этого я хотел бы приемлемое масштабирование по умолчанию.

Как это сделать в «идиоматическом стиле»?

решение1

Для достижения очень похожей цели я обычно использую следующее:

\begin{frame}
\frametitle{Size changed}
\scalebox{0.8}{\begin{minipage}{1.20\textwidth}

... your content here ...

\end{minipage}}
\end{frame}

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

Например, следующий контент:

\begin{itemize}
\item First item.
  \begin{itemize}
  \item First subitem.
    \begin{itemize}
    \item \lipsum[75]
    \item \lipsum[66]
    \item \lipsum[75]
    \end{itemize}
  \item Second subitem.
  \end{itemize}
\item Second item.
\item Third item.
\end{itemize}

дает:

введите описание изображения здесь

а если изменить значения масштаба/министраницы на 0,6/1,6, то получится:

введите описание изображения здесь

Для центрированной таблицы я использую:

\begin{frame} {Scale Items}
\makebox[1.1\linewidth][c]{\scalebox{0.8}{\begin{minipage}{0.8\linewidth}
\begin{tabular}{l | c | c | c | c }
      & Column1 & Column2 & Column3 & Column4 \\
\hline \hline
Line1 & Value11 & Value12 & Value13 & Value14\\ 
Line2 & Value21 & Value22 & Value23 & Value24\\
Line3 & Value31 & Value32 & Value33 & Value34\\
Line4 & Value41 & Value42 & Value34 & Value44 
\end{tabular}
\end{minipage}}}
\end{frame}

что приводит к:

введите описание изображения здесь

и если вы измените \scalebox{0.8}на \scalebox{1.2}то у вас будет следующий результат:

введите описание изображения здесь

решение2

Для подхода, который строится на ответе Lgen, я определил среду "сжатия", которая автоматически вычисляет соответствующую ширину (используя пакет calc). Это устраняет необходимость проб и ошибок.

В преамбуле я пишу

\usepackage{environ,calc}

\newlength{\envwidth}
\NewEnviron{shrink}[1]{
\setlength{\envwidth}{\linewidth/\real{#1}}
\scalebox{#1}{\begin{minipage}{\envwidth}\BODY\end{minipage}}
}

И тогда на раму я могу просто поместить что-то вроде

\begin{shrink}{.7}
    \begin{itemize}
        \item \lipsum[75]
        \item \lipsum[66]
    \end{itemize}
\end{shrink}

(Чтобы скомпилировать пример, вам также придется добавить \usepackage{lipsum}преамбулу.)

Всего:

\documentclass[]{beamer}
\usepackage{lipsum} % this is just for the sample text
\usepackage{environ,calc}

\newlength{\envwidth}
\NewEnviron{shrink}[1]{
\setlength{\envwidth}{\linewidth/\real{#1}}
\scalebox{#1}{\begin{minipage}{\envwidth}\BODY\end{minipage}}
}

\begin{document}
    \begin{frame}
    \begin{itemize}
        \item First item.
        \begin{itemize}
        \item First subitem.
        \medskip 
        
            \begin{shrink}{.7}
        \begin{itemize}
            \item \lipsum[75]
            \item \lipsum[66]
            \end{itemize}
        \end{shrink}
        
        \smallskip
        \item Second subitem.
      \end{itemize}
    \item Second item.
    \item Third item.
    \end{itemize}
    \end{frame}

\end{document}

(Правда, по какой-то причине все немного сжалось по вертикали, когда я применил окружение только к части списка, поэтому я исправил это с помощью \smallskip и \medskip. Возможно, есть более элегантные варианты для этого, но я не знаю, как обработать их все глобально.)

Связанный контент