覆盖LaTeX中子部分的背景颜色

时间:2010-08-26 23:07:10

标签: latex pdflatex

LaTeX新手在这里。

我需要为所有\subsection个标题设置背景颜色。整行应该改变颜色,而不仅仅是文本部分。

这确实有效:

\subsection{\colorbox{Gray}{Title}}

但它并没有整个颜色。另外,我想在一个地方为所有\subsections配置它。

我的google-fu让我失望了。关于如何做我想做的任何建议?

2 个答案:

答案 0 :(得分:2)

要使\colorbox行宽,请使用\makebox

\subsection{\colorbox{Gray}{\makebox[\hfill][l]{Title}}}

我不是百分百肯定“\hfill”是你需要放在第一组方括号中的东西。您可能需要尝试该部分。另一个值得尝试的是

\subsection{\colorbox{Gray}{\makebox[\width][s]{Title\hfill}}}

要在一个地方为所有子部分配置它,最简单的方法是定义一个包装器命令:

\newcommand{\mysubsection}[1]
  {\subsection{\colorbox{Gray}{\makebox[\hfill][l]{#1}}}}

您也可以重新定义\subsection,但是您必须了解它使用的内部命令,并注意匹配您的文档类的其他格式。我不推荐它。

答案 1 :(得分:2)

扩展Zack的答案,这是我的解决方案:

如果您希望文本左对齐

\newcommand{\mysubsection}[1]{
    \setlength\fboxsep{4pt} %% spacing around box contents
    \subsection*{\colorbox{bgcol}{\makebox[\textwidth][l]{\color{textcol}#1\hfill}}}
}

或者如果你想让它居中

\newcommand{\mysubsection}[1]{
    \setlength\fboxsep{4pt} %% spacing around box contents
    \subsection*{\colorbox{bgcol}{\makebox[\textwidth]{\color{textcol}#1}}}
}

如果使用全局设置,则可以删除\ setlength \ fboxsep的本地声明。 显然,bgcol和textcol需要在文档序言中提前定义。

如果在multicols环境中,您可以使用\ textwidth或\ columnwidth,或者这些的相对数量,具体取决于您的布局以及您希望它们的外观。

我正在使用multicols,文本跨越100%的列。但是发现使用\ textwidth或\ columnwidth标题突出到右侧与下面的文本主体的宽度相比,所以为了纠正这个我实际上最终使用:

\newcommand{\mysubsection}[1]{
    \setlength\fboxsep{4pt} %% spacing around box contents
    \subsection*{\colorbox{bgcol}{\makebox[0.97\textwidth]{\color{textcol}#1}}}
}

警告:我使用此代码从“Overfull \ hbox”收到错误消息。我不知道如何解决这个问题,但输出工作正常,所以这对我来说不是问题。在不同的程序或构建上,这可能会导致您的问题!