更改所有“描述”环境中文本的颜色和背景

更改所有“描述”环境中文本的颜色和背景

我是 LaTeX 新手,喜欢更改description整个文档中的环境参数。至少,我喜欢有两个参数:项目文本的颜色和文本背景颜色作为描述。

换句话说,我想赋予风格。

答案1

不幸的是,您无法像使用 CSS 和 HTML 那样轻松地更改环境样式。但是,您可以重新定义description或定义自己的变体来添加颜色命令。

要设置背景颜色,您可以使用我的adjustbox包裹:

\documentclass{article}
\usepackage{xcolor}
\usepackage{adjustbox}

\newenvironment{cdescription}{%
  \begin{adjustbox}{minipage=\linewidth,bgcolor=blue,vspace=\smallskipamount}
    \begin{description}
      \color{red}%
}{%
    \end{description}
  \end{adjustbox}
}

\begin{document}

Text before

\begin{cdescription}
    \item[Hello] World
    \item[Example] Item
\end{cdescription}

text after

\end{document}

如果您想重新定义description,您可以保存旧的定义并在内部使用它。

\let\olddescription\description
\let\endolddescription\enddescription
\renewenvironment{description}{%
  \begin{adjustbox}{minipage=\linewidth,bgcolor=blue,vspace=\smallskipamount}
    \begin{olddescription}
      \color{red}%
}{%
    \end{olddescription}
  \end{adjustbox}
}

如果要为每个环境设置颜色,只需[2]在环境名称后添加(例如),并在定义中用和\newenvironment{cdescription}[2]{%替换颜色名称。#1#2

答案2

环境description本身没有颜色选项;但是,您可以使用标准构造来获取颜色。例如,如果您只想要您提到的两件事,您可以使用包xcolor和以下命令:

\documentclass{article} 
\usepackage{xcolor}
\begin{document}
\noindent
\colorbox{blue}{%
 \begin{minipage}{\textwidth}%
  \begin{description}
   \color{red}
    \item[First] Some text
    \item[Second] Some more text
  \end{description}%
 \end{minipage}%
}
\end{document}

这有几个部分:

  • 获取背景颜色只是对于description本身,我把它放在了 中\colorbox

  • 但是像这样的段落构造环境description必须处于类似页面的设置中,而事实\colorbox并非如此,因此我进一步将其嵌入到minipage宽度与文本相同的环境中。

  • 为了获取文本颜色,我\color{red}只在 内部发出description。每个环境都是一个组,并屏蔽外部对其内容所做的更改,因此颜色不会延续到描述本身之外。

你说你还想对整个文档中的每个 进行这些更改description。为此,你可以定义一个封装以下内容的命令:

% #2 is background color, #3 is text color
% Optional #1 is width
% #4 is the contents of the description
\newcommand\colordesc[4][\textwidth]{%
 \noindent
 \colorbox{#2}{%
  \begin{minipage}{#1}%
   \begin{description}
    \color{#3} 
    #4
   \end{description}%
  \end{minipage}%
 }%
}

% Use like:
\colordesc[5in]{blue}{red}{
 \item[First] some text
 \item[Second] some more text
}

(我将其设为命令而不是环境,因为将括号拆分到\colorbox环境的两端很麻烦。)

答案3

目前,所有提供的答案都不能跨页。有些软件包也可以处理分页符。最常见的是

一个简单的背景可以用 来实现framed。如果你想绘制一个更强大的全帧,你可以使用mdframedtcolorbox。我建议提供一个新环境,而不是重新定义所有描述环境。如果你重新定义所有描述环境,以下解决方案就不太适用了。

为了设置新的描述环境,我正在使用该包enumitem

framed

framed定义了环境shaded。要使用环境,您必须声明第shadecolor一个:

\documentclass{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{framed}

\newlist{cdescription}{description}{1}
\definecolor{shadecolor}{gray}{0.95}%color of the background
\setlist[cdescription,1]{before=\begin{shaded},after=\end{shaded}}
\usepackage{lipsum}
\begin{document}
\begin{cdescription}
\item[first lipsum] \lipsum[1]
\item[second lipsum] \lipsum[2]
\item[third lipsum] \lipsum[3]
\item[fourth lipsum] \lipsum[4]
\item[fifth lipsum] \lipsum[5]
\end{cdescription}
\end{document}

mdframed

该包mdframed提供了自己的命令来包围任何环境。这是通过以下方式完成的\surroundwithmdframed

\documentclass{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage[framemethod=TikZ]{mdframed}

\newlist{cdescription}{description}{1}
\mdfdefinestyle{cdescription}{%
  hidealllines=true,%no lines drawn
  backgroundcolor=gray!15,
  skipabove=\topskip,
  skipbelow=\topskip,
  roundcorner=15pt,
}
\surroundwithmdframed[style=cdescription]{cdescription}

\usepackage{lipsum}
\begin{document}
\begin{cdescription}
\item[first lipsum] \lipsum[1]
\item[second lipsum] \lipsum[2]
\item[third lipsum] \lipsum[3]
\item[fourth lipsum] \lipsum[4]
\item[fifth lipsum] \lipsum[5]
\end{cdescription}
\end{document}

tcolorbox

\documentclass{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage[]{tcolorbox}
\tcbuselibrary{breakable}
\newlist{cdescription}{description}{1}
\setlist[cdescription,1]{before={\begin{tcolorbox}[breakable,boxrule=0pt]},after=\end{tcolorbox}}
\usepackage{lipsum}
\begin{document}
\begin{cdescription}
\item[first lipsum] \lipsum[1]
\item[second lipsum] \lipsum[2]
\item[third lipsum] \lipsum[3]
\item[fourth lipsum] \lipsum[4]
\item[fifth lipsum] \lipsum[5]
\end{cdescription}
\end{document}

相关内容