Настройте раздел с помощью скрипта koma

Настройте раздел с помощью скрипта koma

Мне интересно, могли бы вы мне помочь. Я хочу настроить заголовки разделов в 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, но не знаю почему. Для чего я получаю:

введите описание изображения здесь

Третий вариант, который я нашел, — это использование \makeatletterand \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}

введите описание изображения здесь

Связанный контент