我希望章节和部分的名称显示在同一行,一个从左边开始,另一个从右边开始。只要章节和部分不太长,我的解决方案就完全可以正常工作。如果这是原因,它们就会重叠。
我正在寻找一种解决方案,将该部分的名称放在第二行如果它的名字太长,所以会干扰章节的名称。
我知道页眉中的章节标题太长但我不想使用\chapter[<short title>]{<long title>}
或\section[<short title>]{<long title>}
因为我不想改变目录中的外观。
考虑以下 MWE:
\documentclass[
twoside=false,
open=right,
]{scrbook}
\usepackage{ragged2e}
\usepackage[
headsepline,
autooneside=false,
automark,
draft=false,
]{scrlayer-scrpage}
\pagestyle{scrheadings}
\clearscrheadfoot
\rofoot{\bfseries\thepage}
\automark*[subsection]{}
\addtokomafont{pageheadfoot}{\normalfont\footnotesize\sffamily}
\lohead{\RaggedRight\leftmark}
\rohead{\RaggedLeft\rightmark}
\begin{document}
\chapter{Normal chapter title in a common document}
\clearpage
\section{No problem here}
\clearpage
\section{Very big problem here since the section title is too long for the line}
\end{document}
答案1
以下是如何计算它是否合适,然后决定是否将其拆分。2em 是为了在两部分之间留出一些空间。
\rohead{\sechead}
\newlength{\chaplength}
\newlength{\seclength}
\newcommand{\sechead}{%
\settowidth{\chaplength}{\leftmark}%
\settowidth{\seclength}{\rightmark}%
\ifdim \dimexpr\chaplength+\seclength+2em>\textwidth
\parbox{\dimexpr \textwidth-2em-\chaplength}{\RaggedLeft\rightmark}
\else\RaggedLeft\rightmark\fi}
答案2
您可以在页眉中放置短文本,在目录中放置长文本。您只需要选择headings=optiontohead
:
\documentclass[
twoside=false,
open=right,
headings=optiontohead
]{scrbook}
\usepackage{ragged2e}
\usepackage[
headsepline,
autooneside=false,
automark,
draft=false,
]{scrlayer-scrpage}
\pagestyle{scrheadings}
\clearscrheadfoot
\rofoot{\bfseries\thepage}
\automark*[subsection]{}
\addtokomafont{pageheadfoot}{\normalfont\footnotesize\sffamily}
\lohead{\RaggedRight\leftmark}
\rohead{\RaggedLeft\rightmark}
\begin{document}
\tableofcontents
\chapter{Normal chapter title in a common document}
\clearpage
\section{No problem here}
\clearpage
\section[short for head]{Very big problem here since the section title is too long for the line}
\end{document}