我正在尝试为整个多列环境获取灰色背景,并使用这个“最小”工作示例出现错误:
\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
命令有所谓的可扩展标记。