
После моего вопроса онастройка заголовка раздела, я бы хотел, чтобы поле с номером раздела всегда было снаружи страницы (я использую двусторонний вариант). То есть для нечетных страниц поле с номером раздела должно быть справа, а для четных страниц поле с номером раздела должно быть слева.
Для четных страниц:
и для нечетных страниц:
Вот в чем суть проблем:
- Я вручную изменил код, чтобы получить номер раздела в нужном месте для фрагментов. Но, конечно, это не приемлемо для больших документов. Есть ли помощь в том, чтобы сделать это автоматически?
- Для нечетных страниц мне не удалось разместить рамку за пределами текстовой области, как на четных страницах.
Еще раз, любые рекомендации приветствуются.
Вот мой 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
.
Дополнительное замечание: Код в вопросе использует тот же формат для заголовков раздела, подраздела и подподраздела. Я добавил подраздел, чтобы показать это поведение и как использовать разные цвета для заголовков раздела и подраздела.