KOMA 级文档中章节标题的背景为 Colorbox

KOMA 级文档中章节标题的背景为 Colorbox

我正在使用 KOMA 脚本类来生成我的文档 ( scrartcl)。现在,我知道像 这样的包titlesec是不兼容的,建议使用提供的选项来自定义 sectionheaders 的外观。

我想要的是一个彩色的背景,它从页面边缘开始,长度足以容纳文本,但不能超过文本太多。

在查看了 KOMA 手册后,我偶然发现了一个添加colorbox到章节标题的示例。我尝试根据我的用例修改此示例,但现在我遇到了障碍。

这是我目前的代码:

\documentclass{scrartcl}
\usepackage{geometry}
\usepackage{xcolor}
\geometry{bindingoffset=1cm,left=1.0cm,right=2.3cm,top=1.8cm,bottom=2.0cm}

\makeatletter\renewcommand{\sectionlinesformat}[4]{%
    \Ifstr{#1}{section}{%
        \hspace*{-2cm}\colorbox{gray}{%
            \parbox[t][.8cm][c]{.92\textwidth}{%
                \hspace*{1.85cm}\raggedsection\@hangfrom{\textcolor{white}{#3}}{\textcolor{white}{#4}}%
            }%
        }%
    }{%
        \@hangfrom{\hskip#2#3}{#4}%
    }%
}
\makeatother

\begin{document}
    \section{This is a section}
    \subsection{Subsection}
    
    \section{This is a section with a g}
    
    \section{A section with a title that is longer than the others}
\end{document}

在此处输入图片描述

  1. 我该如何修改它,使其宽度\parbox不固定,而是适应文本长度?(可能加上0.5厘米)
  2. 除了 之外,有没有更精确的方法将框移动到页面边框\hspace{},这实际上只是一个错误的近似值?

答案1

您可以尝试基于tcolorbox和的这种方法expl3。左边距的宽度计算如下1in + \hoffset + \oddsidemargin(请参阅这里)。在双面文档上,计算将不正确。另外,我不确定将 KOMA 脚本与 一起使用是否是一种常见的做法geometry

在此处输入图片描述

\documentclass{scrartcl}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{adjustbox}

\geometry{bindingoffset=1cm,left=1.0cm,right=2.3cm,top=1.8cm,bottom=2.0cm}

\tcbset{
    titlebox/.style={
        colframe=gray,
        colback=gray,
        arc=0pt, outer arc=0pt,
        top=1mm,
        bottom=1mm,
        left=\myleftmargin
    }
}

\makeatletter
\ExplSyntaxOn
\cs_set:Npn \myleftmargin {
    \dim_eval:n {1in + \hoffset + \oddsidemargin}
}
\cs_set:Npn \myfullwidth {
    \dim_eval:n {1in + \hoffset + \oddsidemargin + \textwidth}
}

\box_new:N \l_title_tmpa_hbox

\renewcommand{\sectionlinesformat}[4]{
    \Ifstr{#1}{section}{
        % determine the width of title
        \hbox_set:Nn \l_title_tmpa_hbox {
            \@hangfrom{\textcolor{white}{#3}}{\textcolor{white}{#4}}
        }
        % use different approach based on title width
        \dim_compare:nNnTF {\box_wd:N \l_title_tmpa_hbox} < {\textwidth} {
            % one line: use \tcbox
            \adjustbox{lap=-\myleftmargin}{
                \tcbox[titlebox]{\@hangfrom{\textcolor{white}{#3}}{\textcolor{white}{#4}}}
            }
        } {
            % multiple lines: use tcolorbox environment
            \adjustbox{lap=-\myleftmargin}{
                \begin{tcolorbox}[titlebox, width=\myfullwidth]
                    \@hangfrom{\textcolor{white}{#3}}{\textcolor{white}{#4}}
                \end{tcolorbox}
            }
        }

    }{
        \@hangfrom{\hskip#2#3}{#4}%
    }
}
\ExplSyntaxOff
\makeatother


\begin{document}

    \section{This is a section}
    \subsection{Subsection}
    
    \section{This is a section with a g}
    
    \section{A section with a title that is longer than the others A section with a title that is longer than the others }
\end{document}

相关内容