1

I have a long quote that I want to fit into a beamer's frame. Of course, I could just change the font size, but I would prefer a solution that works automatically and rescales different font sizes in the same quote environment proportionally.

Example of a quote that needs to be rescaled:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Madrid}
\begin{document}
\begin{frame}
\frametitle{My quote}
\begin{quote}
Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.

{\normalfont \scriptsize (Author, \textit{Source}, pp. 11--12)}
\end{quote}
\end{frame}
\end{document}

enter image description here

I have tried to use scalebox, but when it is used inside the quote invironment, it just puts everything in one line, and when it is used outside of it, it makes the right margin narrower:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Madrid}
\begin{document}
\begin{frame}
\frametitle{My quote}
\scalebox{0.74}{
\begin{quote}
Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.

{\normalfont \scriptsize (Author, \textit{Source}, pp. 11--12)}
\end{quote}}
\end{frame}
\end{document}

enter image description here

To precisify, I would like the rescaled quote to fit the same space as a normal quote - that is, with the usual left and rights margins. In the example with \scalebox, the slide contains the whole quote, but the right margin is larger than it normally should be.

5 Answers 5

2

You could use the fitting library from tcolorbox. This will automatically choose a suitable fontsize so that your text fits into whatever height you specify:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Madrid}

\usepackage[most]{tcolorbox}

\begin{document}
\begin{frame}
\frametitle{My quote}
\tcboxfit[height=.8\textheight,frame hidden,interior hidden,enhanced]{
Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.

{\normalfont \scriptsize (Author, \textit{Source}, pp. 11--12)}
}
\end{frame}
\end{document}
1

To resize multi-line text to fit in a fixed space will require multiple settings¹ since the line breaks are will be dependent on the type size.

Your best bet would be to have a loop that iterates on a series of descending sizes until it fits.

Untested and incomplete code:

\ExplSyntaxOn
\NewDocumentEnvironment{Quote}{+b}
  {
    \clist_map_token:nn
       {\normalsize, \footnotesize, \scriptsize, \tiny } % ❶
       {
          \vbox_set:Nn \l_tmpa_box { ##1 #1\par } % ❷
          \dim_compare:nNnT % ❸
            {\box_ht_plus_dp:N \l_tmpa_box}
               <
            {\WHATEVERTHEHEIGHTIS}
            {
              \clist_map_break:n {\box_use_drop:N \l_tmpa_box} % ❹
            }
       }
  }
  {}
\ExplSyntaxOff

The strategy here is to successively try smaller sizes (from the list at ❶) then set the text in a vbox ❷ and see if it's short enough ❸ (I'm too lazy to see how to check the available vertical space in a beamer frame you'll have to put in your own value and if it's small enough, to output the typeset text and break out of the loop.

Note that this may execute any macros in the Quote environment multiple times so if you have something like a numbered equation, expect weird results.


  1. I actually wrote code to do this back in the early 90s for automated bottle label typesetting. It actually was a bit more complicated and included logic for dropping optional text from the bottle labels if the label had insufficient room for everything that was desired to put on the label.
3
  • Should I use \begin{Quote} ... \end{Quote}?
    – wiktoria
    Sep 21, 2021 at 16:38
  • Yes, this would be defining a new environment. It's likely the code above has bugs and/or typos.
    – Don Hosek
    Sep 21, 2021 at 16:44
  • Indeed, it gives the error message.
    – wiktoria
    Sep 22, 2021 at 16:17
1

I wouldn't scale quotes. Rather select smaller font size and reduce baseline skip. For example as is done in the next MWE:

\documentclass[utf8]{beamer}
\usetheme{Madrid}
\usepackage[T1]{fontenc}

\begin{document}
\begin{frame}
    \frametitle{My quote}
\begin{quote}
\small\linespread{0.84}\selectfont % <----
Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.
    \end{quote}
\vspace{-0.5ex}
\scriptsize (Author, \textit{Source}, pp. 11--12)
\end{frame}
\end{document}

enter image description here

7
  • I wanted the solution that rescales different font sizes in the same quote environment proportionally. There are two font sizes in my example, one for the main text and one for the information about the author.
    – wiktoria
    Sep 28, 2021 at 17:04
  • 1
    @wiktoria, as you can see from answer, it has \small font size in quotes and \script size for Author. Bot are limited to this frame only. What is the problem?
    – Zarko
    Sep 28, 2021 at 18:16
  • There was \scriptsize for the author in the original example, so this is not rescaled proportionally here. I could change it to \tiny, but I'm not sure if then the proprtion between the two font sizes will be the same as originally (i.e., when they were \normalsize and \scriptsize).
    – wiktoria
    Sep 28, 2021 at 18:43
  • I think I should use \fontsize{}{}\selectfont to get more fine-grained options and to ensure that both font sizes are proportionally changed. But then I need to calculate the values of both font sizes each time. I thought there might be a solution that is more automatic.
    – wiktoria
    Sep 28, 2021 at 19:42
  • 1
    @wiktoria, well, apparently I didn't understand, what you like to achieve. To my opinion, using scaling is desperate effort of last resort which mostly lead to bad typography. Anyway, I will not argue with you about this. BTW, presentations are not intended to long texts but to present /animate audience with concise information.
    – Zarko
    Sep 28, 2021 at 20:26
0

Еhis is what you need?

enter image description here

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Madrid}
\usepackage{varwidth,graphicx}
\begin{document}
\setkeys{Gin}{keepaspectratio}

\begin{frame}
\frametitle{My quote}
\noindent\resizebox*\textwidth\textheight{\begin{varwidth}{15cm}%
\begin{quote}
Some very long quote. Some very long quote. Some very long quote.  Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote.Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.

\end{quote}
{\normalfont \scriptsize (Author, \textit{Source}, pp. 11--12)}

\end{varwidth}}

\end{frame}
1
  • This seems to be close to what I wanted. But in your solution the right margin is smaller than on the normal slide with a quotation, whereas I would like it to be the same. (I have multiple slides, some of which contain quotations with varied lengths, and I want all slides with quotations to look similar.) When I change \begin{varwidth}{15cm} into \begin{varwidth}{13cm}, the margin looks more like the normal one (although not exactly), but then the quotation ceases to fit into the slide.
    – wiktoria
    Sep 21, 2021 at 17:29
-1

Up to now, the best solution I have found is to put the quote into the minipage environment and set width larger than \textwidth, in order to compensate the narrowing of the margin by \scalebox.

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usetheme{Madrid}
\begin{document}
\begin{frame}
\frametitle{My quote}
\scalebox{0.8}{
\begin{minipage}{1.2\textwidth}
\begin{quote}
Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. Some very long quote. The last sentence of the very long quote.
{\normalfont \scriptsize (Author, \textit{Source}, pp. 11--12)}
\end{quote}
\end{minipage}
}
\end{frame}
\end{document}

enter image description here

This solution is not ideal, because (1) it is not automatic (i.e., I need to put the numerical values by hand), (2) it moves the quote a little to the left.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .