7

I understand one can easily change the background color for text portion easily, but I would like to do the same for an entire portion of the page. How does one change background color for only a section of the page?

4

4 Answers 4

3
+50

The following example uses this approach:

  • Mark or save the top and bottom positions of the band you want to highlight using zref's savepos module (via \zsaveposy{<label>});

  • Insert content into the BackGround of the current page only using eso-pic's \AddToShipoutPictureBG*;

  • That content is a rectangle based on \rule[<raise>]{<width>}{<height>}.

enter image description here

\documentclass{article}

\usepackage{zref-savepos,eso-pic,xcolor}
\usepackage{lipsum}

\begin{document}

\lipsum[1]

\AddToShipoutPictureBG*{% Add the following in the background of the current page only
  \AtPageLowerLeft{% Starting from the lower left corner of the page
    \color{blue!30!white}% Colour content this colour
    \rule% Insert a rule (technically a filled rectangle)...
      [\dimexpr\zposy{bottom}sp-.3\baselineskip]% ...raised to the "bottom" marker
      {\paperwidth}% ...stretching across the entire page
      {\dimexpr\zposy{top}sp-\zposy{bottom}sp}% ...with height "top"-"bottom"
  }%
}%
\zsaveposy{top}%
\lipsum*[2]%
\zsaveposy{bottom}%

\lipsum[3]

\end{document}

Since \zsaveposy uses the \label-\ref system, you'll have to compile at least twice with every change in the vertical position of top and/or bottom.


You can automate the process into an environment colourband:

enter image description here

\documentclass{article}

\usepackage{zref-savepos,eso-pic,xcolor}
\usepackage{lipsum}

%\usepackage{xparse}% Only if you're running LaTeX older than 2020-10
\newcounter{colourband}%
\NewDocumentEnvironment{colourband}{m}{%
  \stepcounter{colourband}% New band
  \leavevmode\zsaveposy{top-\thecolourband}% Start new paragraph and save y-position of top
  \ignorespaces
}{%
  \unskip
  \zsaveposy{bottom-\thecolourband}% Save y-position of bottom
  % Add colour band to BackGround of current page only
  \edef\x{\noexpand\AddToShipoutPictureBG*{%
    \noexpand\AtPageLowerLeft{% Starting from the lower left corner of the page
      \noexpand\color{#1}% Colour content this colour
      \noexpand\rule% Insert a rule (technically a filled rectangle)...
        [\dimexpr\zposy{bottom-\thecolourband}sp-.3\baselineskip]% ...raised to the "bottom" marker
        {\paperwidth}% ...stretching across the entire page
        {\dimexpr\zposy{top-\thecolourband}sp-\zposy{bottom-\thecolourband}sp+\baselineskip}% ...with height "top"-"bottom"
    }%
  }}\x%
}

\begin{document}

\lipsum[1]

\begin{colourband}{blue!20!white}
\lipsum*[2]%
\end{colourband}%

\begin{colourband}{green!15!white}
\lipsum*[3]
\end{colourband}

\end{document}
2

enter image description here

\documentclass{article}
\pagestyle{empty} % Suppress page numbers
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
    \path (current page.north west) 
        node[
            below right,
            fill=blue!40,
            minimum width=\paperwidth,
            minimum height=3cm
            ] 
            (box){};
    \path (current page.south west) 
        node[
            above right,
            fill=red!40,
            minimum width=\paperwidth,
            minimum height=3cm
            ] 
            (box1){};
    \path ($(current page.west)+(1cm,0)$) 
        node[
            %above right,
            fill=black!40,
            %minimum width=\paperwidth,
            minimum height=1cm
            ] 
            (box2){};
    \path ($(box2)+(1cm,0)$) 
        node[
            %above right,
            fill=green!40,
            %minimum width=\paperwidth, 
            minimum height=1cm
            ] 
            (box3){};

%\path (box.west) node[right=5mm,align=left] %<distance can be changed to suit
%{{\fontsize{45pt}{65pt}\color{white}\textbf{JS Bibra}}\\[2mm]
%{\fontsize{30pt}{20pt}\color{cyan}Advisor to TEX}\\[2mm]
%{\fontsize{10pt}{10pt}\color{white}\LaTeX\ development}};

\end{tikzpicture}
\end{document}
2

If the colored background is related with a particular text, you can use a tcolorbox for this.

\documentclass[a4paper, 12pt]{article}

\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\newtcolorbox{colbackbox}[2][]{%
    tile, 
    colback=#2, 
    size=minimal, left=\oddsidemargin+1in,right=\oddsidemargin+1in, spread sidewards, 
    parbox=false, before upper=\indent, after=\par, #1}

\begin{document}

\lipsum[1]
\begin{colbackbox}{red!30}
\lipsum[2]
\end{colbackbox}
\begin{colbackbox}[breakable]{blue!15}
\lipsum[3-6]
\end{colbackbox}

\end{document}

enter image description here

But if it's just a frame on any position you can use eso-pic package:

\documentclass{report}
\usepackage{xcolor}
\usepackage{eso-pic}
\usepackage{lipsum}

\begin{document}

\AddToShipoutPictureBG{\AtPageLowerLeft{%
    \put(0,50mm){%
        \color{blue!20}\rule{\paperwidth}{.3\paperheight}}}}

\lipsum[1-15]

\end{document}

enter image description here

1

You can change the background color of a page using the \pagecolor{color name} command. The code to change the color of background is given below:

\documentclass[12pt]{article}  
\usepackage{xcolor, soul}  
\begin{document}  
\fcolorbox{red}{white}{The text is the simple \LaTeX\ text}\\ \\  
  
\pagecolor{lightgray}  
  
\fcolorbox{blue}{cyan}{text is here}  
\end{document}  

If you want to revert back to original pagecolor, Just add this command

\pagecolor{white}

Page Color Chnaged

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.