61

I'd like to highlight paragraphs such that the highlight color appears as one whole rectangle underlying the entire paragraph. I have looked around but nothing gives me the desired effect so far.

For example \fcolorbox{} from xcolor cannot highlight an entire paragraph; \hl{} from soul leaves out spacings between lines uncolored.

I am wondering how I can do this?

doncherry
  • 54,637
ceiling cat
  • 2,167

3 Answers3

84

Here's a list of other possible solutions

  1. A solution that admits page breaks using mdframed:

    \documentclass{article}
    \usepackage[framemethod=tikz]{mdframed}
    \usepackage{lipsum}
    
    \begin{document}
    
    \lipsum[4]
    \begin{mdframed}[hidealllines=true,backgroundcolor=blue!20]
    \lipsum[2]
    \end{mdframed}
    \lipsum[4]
    
    \end{document}
    

    enter image description here

    The environments provided by the mdframed package are highly customizable so, for example, using the (inner)leftmargin, (inner)rightmargin options, you can produce this (the textwidth remains unaltered and the frame extends a little into the margins):

    \documentclass{article}
    \usepackage[framemethod=tikz]{mdframed}
    \usepackage{lipsum}
    
    \begin{document}
    
    \lipsum[4]
    \begin{mdframed}[hidealllines=true,backgroundcolor=blue!20,innerleftmargin=3pt,innerrightmargin=3pt,leftmargin=-3pt,rightmargin=-3pt]
    \lipsum[2]
    \end{mdframed}
    \lipsum[4]
    
    \end{document}
    

    enter image description here

  2. Here's now a solution using the framed package and its shaded environment; this solution also admits page breaks:

    \documentclass{article}
    \usepackage{xcolor}
    \usepackage{framed}
    \usepackage{lipsum}
    
    \colorlet{shadecolor}{blue!20}
    
    \begin{document}
    
    \lipsum[4]
    \begin{shaded}
    \lipsum[2]
    \end{shaded}
    \lipsum[4]
    
    \end{document}
    

    enter image description here

  3. Now a solution using the tcolorbox package; this solution admits page breaks inside tcolorbox if you load the breakable library and use the breakable key:

    \documentclass{article}
    \usepackage{xcolor}
    \usepackage{tcolorbox}
    \tcbuselibrary{breakable}
    \usepackage{lipsum}
    
    \begin{document}
    
    \lipsum[4]
    \begin{tcolorbox}[breakable,notitle,boxrule=0pt,colback=blue!20,colframe=blue!20]
    \lipsum[2-20]
    \end{tcolorbox}
    \lipsum[4]
    
    \end{document}
    

    enter image description here

  4. A solution using the adjustbox package (no page breaks allowed):

    \documentclass{article}
    \usepackage{xcolor}
    \usepackage{adjustbox}
    \usepackage{lipsum}
    
    \begin{document}
    
    \lipsum[4]
    
    \noindent\adjustbox{bgcolor=blue!20,minipage=[t]{\linewidth}}{\lipsum[4]}
    
    \lipsum[4]
    
    \end{document}
    

    enter image description here

  5. And finally, one solution using the fancypar package (this solution won't accept page breaks either):

    \documentclass{article}
    \usepackage{fancypar}
    \usepackage{lipsum}
    
    \begin{document}
    
    \lipsum[4]
    \ZebraPar[colorone=blue!20,colortwo=blue!20]{\lipsum[4]}
    \lipsum[4]
    
    \end{document}
    

    enter image description here

Gonzalo Medina
  • 505,128
19

A combination of \colorbox and a \parbox works, as long as your paragraph doesn't need to be broken over pages. That won't work.

\documentclass{article}
\usepackage{xcolor}
\usepackage{lipsum}
\begin{document}
\noindent\colorbox{yellow}{%
    \parbox{\dimexpr\linewidth-2\fboxsep}% a box with line-breaks that's just wide enough
        {% your paragraph here:
        \lipsum[1]%
        }
    }
\end{document}

output

doncherry
  • 54,637
11

Is the todonotes package a possiblity? If so, Highlighting a Paragraph in LaTeX by Hinnerk Brügmann provides a solution. For some reason or the other the lipsum package didn't work well with it. The user provides the following code:

\documentclass[letterpaper]{article}
\usepackage{lipsum}
\usepackage[bordercolor=white,backgroundcolor=gray!30,linecolor=black,colorinlistoftodos]{todonotes}
\newcommand{\rework}[1]{%
\todo[color=yellow,inline]{Rework: {#1}}%
}
\begin{document}
\lipsum[2]
%------------------------------
% Update suggested by @Fran
%------------------------------
\rework{\protect\lipsum[2]}
%------------------------------
\lipsum[2]
\end{document}

David Carlisle
  • 757,742
azetina
  • 28,884