我正在使用 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}
- 我该如何修改它,使其宽度
\parbox
不固定,而是适应文本长度?(可能加上0.5厘米) - 除了 之外,有没有更精确的方法将框移动到页面边框
\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}