Номер раздела на внешней стороне страницы

Номер раздела на внешней стороне страницы

После моего вопроса онастройка заголовка раздела, я бы хотел, чтобы поле с номером раздела всегда было снаружи страницы (я использую двусторонний вариант). То есть для нечетных страниц поле с номером раздела должно быть справа, а для четных страниц поле с номером раздела должно быть слева.

Для четных страниц:

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

и для нечетных страниц:

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

Вот в чем суть проблем:

  1. Я вручную изменил код, чтобы получить номер раздела в нужном месте для фрагментов. Но, конечно, это не приемлемо для больших документов. Есть ли помощь в том, чтобы сделать это автоматически?
  2. Для нечетных страниц мне не удалось разместить рамку за пределами текстовой области, как на четных страницах.

Еще раз, любые рекомендации приветствуются.

Вот мой MWE:

\documentclass[openright]{scrbook}
\usepackage{geometry}
\geometry{a4paper,twoside, margin=3cm}
\usepackage{blindtext}
\usepackage{xcolor}
\usepackage{xhfill}

\renewcommand*{\sectionformat}{%
    \usekomafont{section}%
    \makebox[0pt][r]{%
    \fboxrule=1.5pt\fcolorbox{blue}{white!0}{\color{black}\thesection}\color{blue}\rule[.6ex]{10pt}{1.5pt}
    }%
}
\makeatletter
\renewcommand*{\sectionlinesformat}[4]{%
    \@hangfrom{\hskip #2#3}{\color{blue}#4}$\;$%
    \xrfill[.6ex]{1.5pt}[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}

Спасибо!

решение1

Вы можете использовать команду KOMA-Script \Ifthispageodd:

\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}%
}
\renewcommand*{\subsectionformat}{%
  \fboxrule=1.5pt\fcolorbox{.}{white}{\normalcolor\thesubsection}%
}

\makeatletter
\renewcommand*{\sectionlinesformat}[4]{%
  \Ifthispageodd
    {\rule[.6ex]{10pt}{1.5pt}\;#4\;\xrfill[.6ex]{1.5pt}[.]\hspace{-1pt}\usekomafont{#1}\makebox[0pt][l]{\rule[.6ex]{11pt}{1.5pt}#3}}
    {\makebox[0pt][r]{#3\rule[.6ex]{10pt}{1.5pt}\;}#4\;\xrfill[.6ex]{1.5pt}[.]}%
}
\makeatother

\addtokomafont{section}{\color{blue!50!black}}
\addtokomafont{subsection}{\color{green!50!black}}

\begin{document}
\chapter{Introduction}
\section{Section 1}
\subsection{Subsection}
\Blindtext[2]
%\vspace{4\baselineskip}
\section{Section 2}
\Blindtext[1]
%\clearpage
\section{Section 3}
\Blindtext[2]
\section{Section 4, very long section title that requires more than one line}
\Blindtext[2]
\end{document}

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

Предупреждение: \Ifthispageoddимеет ограничения. Если команда выполняется на одной странице, но содержимое смещается на следующую страницу, она работает неправильно. Раскомментируйте строку, \vspace{4\baselineskip}чтобы увидеть проблему. Поэтому вам придется контролировать свой документ, когда вы закончите, и исправить проблему, используя, например, \clearpage.


Дополнительное замечание: Код в вопросе использует тот же формат для заголовков раздела, подраздела и подподраздела. Я добавил подраздел, чтобы показать это поведение и как использовать разные цвета для заголовков раздела и подраздела.

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