[Tex/LaTex] Block quote with big quotation marks

colorpunctuationquoting

How can I create a block quote enviroment with big quotation marks similar to the Cquote Template of Wikipedia?

Additionally it would be nice to place both quotation marks and quote in a colored box and to have the author closer to the citation.

Best Answer

Here's one solution using TikZ which defines a new environment using the framed package. You should preferably compile this with xelatex or lualatex, since it gives the easiest access to a wide range of fonts. I've added code to make it run under pdflatex as well.

The code has now been updated to allow some flexibility in the formatting of the different components of the quotation, and the environment takes two arguments:

Environment Syntax

 \begin{shadequote}[<alignment>]{<author>}
    text of quote
 \end{shadequote}

Code

% !TEX TS-program = xeLaTeX

\documentclass[12pt]{article}
\usepackage{ifxetex,ifluatex}
\usepackage{etoolbox}
\usepackage[svgnames]{xcolor}

\usepackage{tikz}

\usepackage{framed}

% conditional for xetex or luatex
\newif\ifxetexorluatex
\ifxetex
  \xetexorluatextrue
\else
  \ifluatex
    \xetexorluatextrue
  \else
    \xetexorluatexfalse
  \fi
\fi
%
\ifxetexorluatex%
  \usepackage{fontspec}
  \usepackage{libertine} % or use \setmainfont to choose any font on your system
  \newfontfamily\quotefont[Ligatures=TeX]{Linux Libertine O} % selects Libertine as the quote font
\else
  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{libertine} % or any other font package
  \newcommand*\quotefont{\fontfamily{LinuxLibertineT-LF}} % selects Libertine as the quote font
\fi

\newcommand*\quotesize{60} % if quote size changes, need a way to make shifts relative
% Make commands for the quotes
\newcommand*{\openquote}
   {\tikz[remember picture,overlay,xshift=-4ex,yshift=-2.5ex]
   \node (OQ) {\quotefont\fontsize{\quotesize}{\quotesize}\selectfont``};\kern0pt}

\newcommand*{\closequote}[1]
  {\tikz[remember picture,overlay,xshift=4ex,yshift={#1}]
   \node (CQ) {\quotefont\fontsize{\quotesize}{\quotesize}\selectfont''};}

% select a colour for the shading
\colorlet{shadecolor}{Azure}

\newcommand*\shadedauthorformat{\emph} % define format for the author argument

% Now a command to allow left, right and centre alignment of the author
\newcommand*\authoralign[1]{%
  \if#1l
    \def\authorfill{}\def\quotefill{\hfill}
  \else
    \if#1r
      \def\authorfill{\hfill}\def\quotefill{}
    \else
      \if#1c
        \gdef\authorfill{\hfill}\def\quotefill{\hfill}
      \else\typeout{Invalid option}
      \fi
    \fi
  \fi}
% wrap everything in its own environment which takes one argument (author) and one optional argument
% specifying the alignment [l, r or c]
%
\newenvironment{shadequote}[2][l]%
{\authoralign{#1}
\ifblank{#2}
   {\def\shadequoteauthor{}\def\yshift{-2ex}\def\quotefill{\hfill}}
   {\def\shadequoteauthor{\par\authorfill\shadedauthorformat{#2}}\def\yshift{2ex}}
\begin{snugshade}\begin{quote}\openquote}
{\shadequoteauthor\quotefill\closequote{\yshift}\end{quote}\end{snugshade}}

\begin{document}

\begin{shadequote}[l]{Douglas Adams}
A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.
\end{shadequote}

\begin{shadequote}[r]{Douglas Adams}
A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.
\end{shadequote}

\begin{shadequote}[c]{Douglas Adams}
A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.
\end{shadequote}

\begin{shadequote}{}
A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.
\end{shadequote}

\end{document}

In this code, the font for the quotation marks is set independently of the main document font. This is because depending on the main font you choose, the very large quotation marks will not look good; Linux Libertine has pretty quotes that seem appropriate for the purpose. If you want to use this environment with another main document font, remove/change the \usepackage{libertine}.

Sample output

output of code