![В Beamer, каков «правильный способ» уменьшения масштаба элемента слайда для лучшего размещения?](https://rvso.com/image/335485/%D0%92%20Beamer%2C%20%D0%BA%D0%B0%D0%BA%D0%BE%D0%B2%20%C2%AB%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%C2%BB%20%D1%83%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%B3%D0%BE%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%3F.png)
Я хочу уменьшить масштаб элемента на слайде, чтобы он лучше подходил по ширине и/или высоте. Я готов уменьшить размер шрифта, использовать что-то вроде 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}