如何在 \texwidth-long 彩色边界框中框出标题?

如何在 \texwidth-long 彩色边界框中框出标题?

我正在尝试在章节和子章节周围添加背景框架。该框架应为彩色(80% 灰色)并跨越 \textwidth。

我尝试了一些(未经证实的)方法,并成功地为章节编号、编号后的句点、标题或标题的一小部分添加了颜色。

我试图理解“titlesec”包,但没有成功。

我该怎么做呢?

答案1

Vincent Zoonekynd 的 LaTeX 网站有一些非常直接的例子章节部分样式。我通过稍微修改样式部分的第 31 条条目,采用了以下最小示例。

\documentclass{article}
\usepackage{lipsum,xcolor}
\makeatletter
\def\section{\@ifstar\unnumberedsection\numberedsection}
\def\numberedsection{\@ifnextchar[%]
  \numberedsectionwithtwoarguments\numberedsectionwithoneargument}
\def\unnumberedsection{\@ifnextchar[%]
  \unnumberedsectionwithtwoarguments\unnumberedsectionwithoneargument}
\def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
\def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
\def\numberedsectionwithtwoarguments[#1]#2{%
  \ifhmode\par\fi
  \removelastskip
  \vskip 3ex\goodbreak
  \refstepcounter{section}%
  \hbox to \hsize{%
    \colorbox{black!20}{%
      \hbox to 1cm{\hss\bfseries\Large\thesection.\ }%
      \vtop{%
        \advance \hsize by -1cm
        \advance \hsize by -2\fboxrule
        \advance \hsize by -2\fboxsep
        \parindent=0pt
        \leavevmode\raggedright\bfseries\Large
        #2
        }%
      }}\nobreak
  \vskip 2mm\nobreak
  \addcontentsline{toc}{section}{%
    \protect\numberline{\thesection}%
    #1}%
  \ignorespaces
  }
\def\unnumberedsectionwithtwoarguments[#1]#2{%
  \ifhmode\par\fi
  \removelastskip
  \vskip 3ex\goodbreak
%  \refstepcounter{section}%
  \hbox to \hsize{%
    \colorbox{black!20}{%
%      \hbox to 1cm{\hss\bfseries\Large\thesection.\ }%
      \vtop{%
%        \advance \hsize by -1cm
        \advance \hsize by -2\fboxrule
        \advance \hsize by -2\fboxsep
        \parindent=0pt
        \leavevmode\raggedright\bfseries\Large
        #2
        }%
      }}\nobreak
  \vskip 2mm\nobreak
  \addcontentsline{toc}{section}{%
%    \protect\numberline{\thesection}%
    #1}%
  \ignorespaces
  }
\makeatother
\pagestyle{empty}
\begin{document}
\lipsum[1]
\section*{Introduction}
\lipsum[1]
\section{Suite}
\lipsum[1]
\section{Suite}
\lipsum[1]
\section{Fin}
\lipsum[1]
\end{document}​

它看起来是这样的:

阴影部分样式

我想这就是你想要的。此外,如果你想要为分区背景使用不同的颜色,你可以轻松地更改它。

答案2

这是一个(真的很 hacky?1)使用 和color的方法titlesec

\usepackage{color}
\usepackage{titlesec}

\makeatletter
\newif\if@secnum
\definecolor{lgray}{gray}{0.75}
\titleformat{\section}[hang]{\Large\bfseries}{%
    \global\@secnumtrue
}{0em}{%
    {%
        \setlength{\fboxsep}{0pt}%
        \colorbox{lgray}{\makebox[\textwidth]{\Large\strut}}%
    }%
    \hspace*{-\textwidth}%
    \if@secnum%
        \arabic{section}%
        \hspace*{1em}%
    \fi%
    \global\@secnumfalse%
}[]
\makeatother

结果:

有背景的部分

1 欢迎更有经验的技术人员指出此代码中的改进或致命错误。使用 LaTeX 是一种学习体验 :)

相关内容