
Мне интересно, могли бы вы мне помочь. Я хочу настроить заголовки разделов в scrbook
документе класса. Что-то вроде этого:
Номер раздела в рамке, за которым следует центрированная линия. Название раздела и еще одна вертикальная центрированная линия, заполняющая ширину текста.
До сих пор я искал решения в этом StackExchange, но безуспешно. Я проверилРуководство по Koma-Scriptи нашел две возможные команды, чтобы сделать что-то похожее: \sectionformat
и \sectionlinesformat
. Но, честно говоря, мои очень ограниченные знания латекса не позволяют мне понять, когда использовать одну или другую.
Рассматривая похожие решения, найденные на этом форуме, мне удалось добиться следующего:
\documentclass[openright]{scrbook}
\usepackage{geometry}
\geometry{a4paper,twoside, margin=3cm}
\usepackage{blindtext}% only dummy text
\usepackage{xcolor}
\renewcommand*{\sectionformat}{%
\usekomafont{section}
\makebox[0pt][r]{\fboxrule=1.5pt\fcolorbox{black}{white!0}{\color{black}\thesection}\rule[.7ex]{10pt}{1.5pt}}
}
\begin{document}
\chapter{Introduction}
\section{Section 1}
\Blindtext[2]
\section{Section 2}
\Blindtext[2]
\section{Section 3}
\Blindtext[2]
\section{Section 4}
\Blindtext[2]
\end{document}
Но я не нашел способа добавить горизонтально-вертикальную линию, выровненную по высоте текста, чтобы заполнить ширину текста.
Другой вариант, который я попробовал, это использовать:
%%%%% Simple + underline
\renewcommand{\sectionlinesformat}[4]{%
\Ifstr{#1}{section}{%
\parbox[c]{\linewidth}{%
\raggedsection{\hskip #2{\color{black}#3}}{#4}\par%
\kern-.75\ht\strutbox\rule{\linewidth}{1pt}%
}%
}{%
{\hskip #2#3}{#4}}%
}
Смотрите, здесь \sectionlinesformat
используется вместо \sectionformat
, но не знаю почему. Для чего я получаю:
Третий вариант, который я нашел, — это использование \makeatletter
and \makeatother
:
\makeatletter
\renewcommand\@seccntformat[1]{%
\makebox[0pt][l]{\rule[-\dimexpr\fboxsep+2pt\relax]{\columnwidth}{1.5pt}}%
\colorbox{blue}{%
\rule[-2pt]{0pt}{0pt}%
\color{white}\csname the#1\endcsname
}%
\quad
}
\makeatother
И я получаю:
Есть ли какие-нибудь рекомендации, как мне получить желаемый результат?
Также было бы неплохо, если бы у нас была возможность выравнивать номер раздела и его поле по тексту или по краю.
решение1
Что-то вроде этого?
\documentclass[openright]{scrbook}
\usepackage{geometry}
\geometry{a4paper,twoside, margin=3cm}
\usepackage{blindtext}% only dummy text
\usepackage{xcolor}
\usepackage{xhfill}
\renewcommand*{\sectionformat}{%
\usekomafont{section}%
\fboxrule=1pt\fcolorbox{blue}{white!0}{\color{black}\thesection}%
\color{blue}\rule[.7ex]{10pt}{1pt}\>%
}
\makeatletter
\renewcommand*{\sectionlinesformat}[4]{%
\@hangfrom{\hskip #2#3}{\color{blue}#4}\>%
\xrfill[.7ex]{1pt}[blue]%
}
\makeatother
\begin{document}
\chapter{Introduction}
\section{Section 1}
\Blindtext[2]
\section{Section 2}
\Blindtext[2]
\section{Section 3}
\Blindtext[2]
\section{Section 4}
\Blindtext[2]
\end{document}
решение2
Только как дополнение к ответу @Vincent:
Если только разделы (а не подразделы и подподразделы) должны использовать другой формат:
\documentclass[twoside,open=right]{scrbook}
\usepackage{geometry}
\geometry{margin=3cm}
\usepackage{blindtext}% only for dummy text
\usepackage{xcolor}
\usepackage{xhfill}
\renewcommand*{\sectionformat}{%
\fboxrule=1.5pt\fcolorbox{.}{white}{\color{black}\thesection}%
\rule[.7ex]{10pt}{1pt}\;%
}
\NewCommandCopy{\originalsectionlinesformat}{\sectionlinesformat}
\renewcommand*{\sectionlinesformat}[4]{%
\originalsectionlinesformat{#1}{#2}{#3}{#4\Ifstr{#1}{section}{\;\xrfill[.6ex]{1.5pt}[.]}{}}%
}
\addtokomafont{section}{\color{blue!50!black}}
\begin{document}
\chapter{Introduction}
\section{Section 1}
\subsection{Subsection}
\subsubsection{Subsubsection}
\Blindtext[2]
\end{document}
Если подразделы и подподразделы должны использовать одинаковый формат, но разные цвета:
\documentclass[twoside,open=right]{scrbook}
\usepackage{geometry}
\geometry{margin=3cm}
\usepackage{blindtext}% only for dummy text
\usepackage{xcolor}
\usepackage{xhfill}
\renewcommand*{\sectionformat}{%
\fboxrule=1.5pt\fcolorbox{.}{white}{\normalcolor\thesection}%
\rule[.7ex]{10pt}{1pt}\;%
}
\renewcommand*{\subsectionformat}{%
\fboxrule=1.5pt\fcolorbox{.}{white}{\normalcolor\thesubsection}%
\rule[.7ex]{10pt}{1pt}\;%
}
\renewcommand*{\subsectionformat}{%
\fboxrule=1.5pt\fcolorbox{.}{white}{\normalcolor\thesubsubsection}%
\rule[.7ex]{10pt}{1pt}\;%
}
\NewCommandCopy{\originalsectionlinesformat}{\sectionlinesformat}
\renewcommand*{\sectionlinesformat}[4]{%
\originalsectionlinesformat{#1}{#2}{#3}{#4\;\xrfill[.6ex]{1.5pt}[.]}%
}
\addtokomafont{section}{\color{blue!50!black}}
\addtokomafont{subsection}{\color{green!50!black}}
\addtokomafont{subsubsection}{\color{red!50!black}}
\begin{document}
\chapter{Introduction}
\section{Section 1}
\subsection{Subsection}
\subsubsection{Subsubsection}
\Blindtext[2]
\end{document}