是否可以定义具有背景颜色的多列环境

是否可以定义具有背景颜色的多列环境

编辑:我应该给出基于回忆录(我正在使用)的 MWE,其中内边距和外边距最初是不同的。我希望在新环境中边距相同。(内边距是奇数页的左边距和偶数页的右边距……或相反。)


我希望能够定义一个环境

  1. 改变文本的宽度;
  2. 改变列数;
  3. 添加背景颜色;
  4. 跨页面边界工作。

到目前为止,我能得到的最好结果是四分之三;第 2 项和第 3 项似乎是不兼容的选择。

下面是一个显示意图的 MWE。(不幸的是,如文档所述,adjusmulticols它们mdframed不兼容。)

\documentclass{article}
\usepackage{adjmulticol}

\usepackage{mdframed}
\usepackage{lipsum}

\begin{document}
\lipsum[1]
%\begin{mdframed}[background=yellow]
\begin{adjmulticols}{2}{-1in}{-1in}
\lipsum
\end{adjmulticols}
%\end{mdframed}

\begin{mdframed}[backgroundcolor=yellow,leftmargin=-1,rightmargin=-1]
%\begin{adjmulticols}
\lipsum
%\end{adjmulticols}
\end{mdframed}
\end{document}

答案1

在此处输入图片描述

标准multicol可以应对页边距的局部变化,因此您只需要在组装列时放入一个彩色规则,如下所示:

\documentclass{article}
\usepackage{multicol}

\usepackage{color}

\makeatletter

\newenvironment{wider}
               {\list{}{\leftmargin-1cm\relax\rightmargin\leftmargin}%
                \item\relax}
               {\endlist}

\def\foo#1\full@width#2#3\foo{%
\def\page@sofar{%
#1%
\full@width{%
     {\color{yellow}\vrule \@width \full@width}%
     \kern-\full@width
#2}%
#3}}
\expandafter\foo\page@sofar\foo



\usepackage{lipsum}


\begin{document}\color{black}
\lipsum[1]

\begin{wider}
\begin{multicols}{2}
\lipsum
\end{multicols}
\end{wider}


\begin{multicols}{3}
\lipsum
\end{multicols}

\end{document}

更新

或者根据评论中的要求进行微小的变化,仅memoir在示例中使用,并使环境在一侧更宽,并根据页面转移规则

\documentclass{memoir}
\usepackage{multicol}

\usepackage{color}

\makeatletter

\newenvironment{wider}
               {\list{}{\leftmargin0pt\relax
                        \rightmargin-2cm\relax}%
                \item\relax}
               {\endlist}

\def\foo#1\moveright#2\full@width#3#4\foo{%
\def\page@sofar{%
#1%
\dimen@\multicol@leftmargin
\ifodd\c@page\else\advance\dimen@-2cm\relax\fi
\moveright\dimen@
\hbox to \full@width{%
     {\color{yellow}\vrule \@width \full@width}%
     \kern-\full@width
#3}%
#4}}
\expandafter\foo\page@sofar\foo

....照常休息

答案2

值得一看的一个好包是tcolorbox,尽管遗憾的是它也不能跨页显示。

在此处输入图片描述

\documentclass{article}
\usepackage{multicol,lipsum}
\usepackage{tcolorbox}
\begin{document}
\begin{tcolorbox}[width=15cm]
\begin{multicols}{3}
\lipsum[1-3]
\end{multicols}
\end{tcolorbox}
\end{document}

答案3

显然,另一个解决方案是boites使用一些pstrick魔法,正如演示的那样这里不幸的是,我无法重现它,因为我收到一条Non-PDF special ignored!错误消息(使用 pdflatex)。

相关内容