颜色框内的多色

颜色框内的多色

我正在尝试为整个多列环境获取灰色背景,并使用这个“最小”工作示例出现错误:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{color}
\usepackage{listings}
\usepackage{multicol}
\usepackage[left=2.5cm,right=2.5cm]{geometry}

\begin{document}
  \setlength{\parindent}{0mm}
  \setlength{\parskip}{11pt}

  \begin{titlepage}
    \begin{center}
      \colorbox{gray}{
        \begin{multicols}{2}
          \begin{description}

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description

            \columnbreak

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description
          \end{description}
        \end{multicols}
      }
    \end{center}
  \end{titlepage}
\end{document}

这会在颜色框的结尾“}”处产生很多错误,而这些错误对我来说毫无意义。如果我注释掉颜色框,编译时就不会出现问题。

我猜想我在浏览建议时遇到了类似的事情: 在数学环境中工作的 colorbox 版本

由于其中一条错误消息表明它会自动创建一个数学环境/符号,所以我猜我的问题是类似的,尽管问题的答案只是 codesalad,我不明白,因此无法真正使用。

非常感谢任何能够阻止 LaTex 创建数学环境或在多色环境下获得灰色背景的解决方案。

顺便说一句,我刚开始使用 LaTeX,因此非常感谢您的解释。

答案1

\colorbox是一个LR类似这样的盒子\mbox。您不能直接在这样的盒子中嵌套垂直材料,请使用

  \noindent
  \colorbox{gray}{%
  \parbox{\dimexpr\textwidth-2\fboxsep\relax}{\begin{multicols}...

答案2

您可以使用以下一些方法:

  • tcolorbox包裹;
  • mdframed包裹;
  • 基于的解决方案tikzmark(需要库tikzmark- 下载.dtx并编译以获取所需的tikzlibrarytikzmark.code.tex)。

代码:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage[left=2.5cm,right=2.5cm]{geometry}
\usepackage{tcolorbox}
\usepackage{mdframed}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\NewDocumentCommand{\tikzbox}{m D(){0.1,-0.18} D(){-0.1,0.35}}{%
      \tikz[remember picture,overlay]
      \draw[line width=1pt,rectangle,rounded corners,fill=lightgray!50,draw=white]
      (pic cs:#1) ++(#2) rectangle (#3)
      ;}

\begin{document}
  \setlength{\parindent}{0mm}
  \setlength{\parskip}{11pt}

% With tcolorbox

  \begin{titlepage}
    \begin{tcolorbox}[colframe=white,colback=lightgray!50] 
        \begin{multicols}{2}
          \begin{description}

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description

            \columnbreak

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description
          \end{description}
        \end{multicols}
      \end{tcolorbox}
  \end{titlepage}

% Using mdframed

   \begin{titlepage}
    \begin{mdframed}[backgroundcolor=lightgray!50,linecolor=white]
        \begin{multicols}{2}       
          \begin{description}
            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description

            \columnbreak

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description
          \end{description}
        \end{multicols}
      \end{mdframed}  
  \end{titlepage}

     \begin{titlepage}
        \begin{multicols}{2}

          \begin{description}
            \item[\tikzbox{a}xyz]   \hfill \\
            description

            \item[xyz] \hfill \\
            description

            \columnbreak

            \item[xyz] \hfill \\
            description

            \item[xyz] \hfill \\
            description    \tikzmark{a}        
          \end{description}          
        \end{multicols}
  \end{titlepage}

\end{document}

三个结果:

  • tcolorbox

在此处输入图片描述

  • mdframed

在此处输入图片描述

  • tikzmark

在此处输入图片描述

请注意,tikzmark解决方案在文本周围提供了一个严格的框:如果您想扩展,这是可能的,您可以参考tikzmark 宏的问题和潜力:动态框自适应因为该\tikzbox命令有所谓的可扩展标记

相关内容