答案1
如果有默认缩进,则应该\colorbox
以 开头\noindent
,并且框的宽度最好等于\linewidth
,这样它也可以用于狭窄的空间,例如列表内。 在minipage
或内重置缩进和段落跳过\parbox
,因此最简单的解决方法就是手动设置每个框内\setlength
的\parskip
和\parindent
,因为父缩进可能会根据文档的环境而改变(例如,列表内)。 为每个可能的环境自动设置两个长度可能很棘手。 该示例展示了一个宏,它仅在主文本和列表中采用正确的缩进和段落itemize
。 不保证它在其他地方也能起作用:
\documentclass[twocolumn]{article}
\usepackage{xcolor}
\usepackage{lipsum}
\parindent 3em % some clear but dirty indentation and paragraph skip
\parskip 2em plus 1em minus 1em
\newlength{\currentparindent}\currentparindent\parindent % remember the global indentation
\newlength{\currentparskip}\currentparskip\parskip % remember the global skips
\makeatletter
\newcommand\graybox[1]{%
\noindent % no intented box !!
\colorbox{gray!20}{\parbox[t]{\linewidth}{%
\def\insideitemize{itemize}
\ifx\@currenvir\insideitemize
\parskip 4pt plus 2pt minus 1pt % like itemsep
\else
\parindent\currentparindent % use the global indentation
\parskip\currentparskip % use the global paragrapk skip
\fi #1}}}
\makeatother
\begin{document}
\lipsum[2][1-2]\par \lipsum[3][1-2] % normal dummy paragraphs
\graybox{\lipsum[2][1-2]\par \lipsum[3][1-2]} % now boxed
\lipsum[5][1-2]
\newpage % now in nested list
\begin{itemize}
\item \lipsum[2][1-2] \par \lipsum[3][1-2]
\item \graybox{\lipsum[2][1-2]\par \lipsum[3][1-2]}
\item \lipsum[5][1-2]
\begin{itemize}
\item \lipsum[2][1-2] \par \lipsum[3][1-2]
\item \graybox{\lipsum[2][1-2]\par \lipsum[3][1-2]}
\item \lipsum[5][1-2]
\end{itemize}
\end{itemize}
\end{document}