6

I'm quoting some text thanks to the csquotes package, like this:

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{babel}
\begin{document}
Lorem ipsum dolor sit amet.

\blockquote[somebody]{Bla bla bla.}

Lorem ipsum dolor sit amet.
\end{document}

I'd like the font size of the quotation to be smaller.

How could I acheive such a result?

1

3 Answers 3

6

One idea of the csquotes package is to dynamically decide whether a quote is so long that it is typed as a blockquote, or whether it is short enough to be typed inline. I assume that you don't want to change the font size of inline quotes, but rather of block quotes.

To do that, you need to know that the \blockquote just calls the quote environment, so we just need to change the formatting settings for this environment. This example shows how to do that using the packages etoolbox and relsize:

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{babel}

\usepackage{relsize,etoolbox}
\AtBeginEnvironment{quote}{\smaller}

\begin{document}
Bla bla bla.

\blockquote[somebody]{Bla bla bla.\\}

Bla bla bla.
\end{document}

enter image description here

(Note that I added the linebreak \\ only to trigger that csquotes typesets the quote as a blockquote.)

0
2

I use the following renewed environment with csquotes. Copy it to your preamble.

\renewenvironment{quote}{\list{}{\rightmargin0pt\leftmargin0pt}\item\relax
\small\singlespacing}{\endlist}
\SetBlockEnvironment{quote}

\rightmargin0pt\leftmargin0pt declares the margins of the quotation (0pt each indicates that is textwidth). What you are looking for is the command \small which sets the quotation one step smaller than the normal text.

1

\blockquote is actually a dynamic command that switches between typesetting its argument inline (if it is shorter than a threshold set with the package options threshold and thresholdtype) or in display mode (i.e. as a real block quotation separated by line/paragraph breaks). These two modes can be modified independently.

If you always want to typeset block quotes regardless of the length, maybe \begin{displayquote}...\end{displayquote} is more to the point. The behaviour of that environment can be controlled with \SetBlockEnvironment amongst others.


Specifically for the job of making block quotes smaller csquotes.cfg suggest to define a new environment based on quote that can then be used for \blockquote with \SetBlockEnvironment.

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{babel}

\usepackage{relsize}

\newenvironment*{smallquote}
  {\quote\smaller}
  {\endquote}

\SetBlockEnvironment{smallquote}

\usepackage{lipsum}

\begin{document}
\lipsum[1]
\blockquote[somebody]{Lorem ipsum. A short inline quote.}
\lipsum[2]
\blockquote[somebody]{\lipsum[3]}
\lipsum[4]
\end{document}

inline quote unchanged in quotation marks, longer block code smaller


Alternatively, you can use the hooks provided by csquotes.

The inline quotation can be modified by redefining the hook \mktextquote, the block quotation by changing \mkblockquote.

It would look odd to have inline quotations in a different font size, so I'm assuming you only want to change the block quotation. The default definition for \mkblockquote is

\newcommand{\mkblockquote}[4]{#1#2#4#3}

we just add a \smaller (from \usepackage{relsize} as suggested in Tiuri's answer) and then use \renewcommand.

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{babel}

\usepackage{relsize}
\renewcommand{\mkblockquote}[4]{\smaller#1#2#4#3}

\usepackage{lipsum} % for filler text

\begin{document}
\lipsum[1]
\blockquote[somebody]{Lorem ipsum. A short inline quote.}
\lipsum[2]
\blockquote[somebody]{\lipsum[3]}
\lipsum[4]
\end{document}

The output in this example is as shown above.


\SetBlockEnvironment also affects \begin{displayquote}...\end{displayquote}, but for finer control those environments can be customised with \mkbegdispquote and \mkenddispquote, whose defaults are

\newcommand{\mkbegdispquote}[2]{}
\newcommand{\mkenddispquote}[2]{#1#2}

So we could also use

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{babel}

\usepackage{relsize}
\renewcommand{\mkbegdispquote}[2]{\smaller}

\usepackage{lipsum} % for filler text

\begin{document}
\lipsum[1]
\begin{displayquote}[somebody]
Lorem ipsum. A short inline quote.
\end{displayquote}
\lipsum[2]
\begin{displayquote}[somebody]
\lipsum[3]
\end{displayquote}
\lipsum[4]
\end{document}
1
  • +1 from me. And I also did try TL2018 and Overleaf, and \AtBeginEnvironment did not work for this with either indeed. But the accepted answer suggests my memory on this might not be completely misguided (though I do admit I might have been doing something else, like redefining the environment, or defining another one).
    – gusbrs
    Jun 22, 2021 at 17:36

You must log in to answer this question.

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