[Tex/LaTex] Horizontal placement of a framebox

boxesframedhorizontal alignment

I would like to horizontally offset a framed paragraph of text so that the sides of the frame coincide precisely with left and right margins of 2em on a page with a text-width of 6.5 inches.

Indenting a framed parbox or minipage is problematic because the required width is subject to a conflict of units between the margins, the text-width, and the inherent fboxsep:

\hspace{2em}\fbox{\parbox{?}{Paragraph text}}

What would you suggest?

Best Answer

Here are two options that provide similar layout. framedparA uses a center environment to set the contents horizontally inside a \parbox of required width. framedparB uses mdframed and allows to be broken across the page boundary.

enter image description here

\documentclass{article}

\usepackage{lipsum,environ,mdframed}

\NewEnviron{framedparA}[1][2em]{%
  \begin{center}
  \fbox{%
    \parbox{\dimexpr\linewidth-#1-#1-2\fboxsep-2\fboxrule}{%
      \strut\BODY\strut%
    }%
  }%
  \end{center}
}

\NewEnviron{framedparB}[1][2em]{%
  \begin{mdframed}[
    leftmargin=#1,
    rightmargin=#1,
    innerleftmargin=\fboxsep,
    innerrightmargin=\fboxsep
  ]
    \BODY
  \end{mdframed}
}

\begin{document}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus molestie dui tellus, 
vitae blandit quam scelerisque in. Ut tristique metus id magna commodo, nec semper sapien 
efficitur. Sed pretium elit vitae mi tristique mollis. Nam nibh metus, dictum et turpis 
sit amet, tincidunt vulputate sem.

\begin{framedparA}
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; 
Etiam vel euismod massa, quis fermentum nisl. Aenean pellentesque tincidunt nibh, in 
ornare mi malesuada ut. Sed imperdiet enim leo, at aliquam dolor finibus a. Duis odio 
mi, molestie sed tortor efficitur, blandit molestie purus.
\end{framedparA}

Proin auctor risus et dui lobortis ultrices. Morbi et mauris id elit fringilla posuere. 
Aenean laoreet lacus est, eu congue purus egestas nec. Sed non velit nulla. Cras vestibulum 
ut massa quis commodo. Sed tempor, lorem a porta dictum, orci nulla scelerisque arcu, sed 
lacinia nisi risus interdum velit. Duis nec erat ac urna pellentesque imperdiet.

\begin{framedparB}
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; 
Etiam vel euismod massa, quis fermentum nisl. Aenean pellentesque tincidunt nibh, in 
ornare mi malesuada ut. Sed imperdiet enim leo, at aliquam dolor finibus a. Duis odio 
mi, molestie sed tortor efficitur, blandit molestie purus.
\end{framedparB}

Proin auctor risus et dui lobortis ultrices. Morbi et mauris id elit fringilla posuere. 
Aenean laoreet lacus est, eu congue purus egestas nec. Sed non velit nulla. Cras vestibulum 
ut massa quis commodo. Sed tempor, lorem a porta dictum, orci nulla scelerisque arcu, sed 
lacinia nisi risus interdum velit. Duis nec erat ac urna pellentesque imperdiet.

\end{document}

Of course, with mdframed there's far more fancy stuff that can be added...