我有以下环境:
\usepackage{fancyhdr}
\pagestyle{fancy}
我的问题是下一个。我有一个部分和一个子部分,名称太长,它们在页眉上重叠。我知道这个解决方案
\section[section with\\ long title]{section with long title}
但此解决方案将修改目录中的章节名称。
我也尝试了下一个解决方案:
\fancyhead[L]{
\begin{minipage}[t]{0.48\textwidth}
\begin{flushleft}
\rightmark
\end{flushleft}
\end{minipage}
}
\fancyhead[R]{
\begin{minipage}[t]{0.48\textwidth}
\begin{flushright}
\leftmark
\end{flushright}
\end{minipage}
}
它可以工作,但标题与页面顶部的线条重叠。
所以最大的问题是:如何让花式页面样式自动打破页面标题中的部分和/或子部分名称而不修改目录,并替换标题下的 hline 以不覆盖页面上的部分文本?
答案1
您可以使用 \sectionmark。
\section{long version%
\sectionmark{header version}}
\sectionmark{header version}
您需要两个 \sectionmark 命令才能获取当前页面和后续页面的正确页眉。KOMA 类有其他选项来处理此问题。
(未经测试,因为您没有提供完整的最小示例)。
答案2
您可以重新定义部分,以便使用带有可选参数的带星号的部分。
这是代码:
\documentclass[a4paper, 11pt]{article}
\usepackage{lipsum}
\usepackage{fancyhdr}
\fancyhead[L]{
\begin{minipage}[t]{0.48\textwidth}
\begin{flushleft}
\rightmark
\end{flushleft}
\end{minipage}
}
\fancyhead[R]{
\begin{minipage}[t]{0.48\textwidth}
\begin{flushright}
\leftmark
\end{flushright}
\end{minipage}
}
\let\oldleftmark=\leftmark
\let\oldsection\section
\makeatletter
\def\section{%
\renewcommand{\leftmark}{\oldleftmark}%
\@ifstar{\@Starred}{\@nonStarred}%
}
\def\@Starred{%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have optional parameters. I am going use it for changing header only!}\@StarredWith}%
{\@StarredWithout}%
}
\def\@StarredWith[#1]#2{%
\renewcommand{\leftmark}{#1}% Or \rightmark
\oldsection{#2}%
}
\def\@StarredWithout#1{
\oldsection*{#1}%
}
\def\@nonStarred{%
\@ifnextchar[%
{\@nonStarredWith}%
{\@nonStarredWithout}%
}
\def\@nonStarredWith[#1]#2{%
\oldsection[#1]{#2}%
}
\def\@nonStarredWithout#1{%
\oldsection{#1}%
}
\makeatother
\title{My title}
\author{me}
\begin{document}
\pagestyle{fancy}
\maketitle
\tableofcontents
\section{section}
\lipsum[1-10]
\section*{starred section}
\lipsum[1-4]
\section[Toc-header title]{other title in toc and header}
\lipsum[1-15]
\section*[header title]{a raelly long long long title that will be as is in toc but have just "header title" in header}
\lipsum[1-10]
\section{Regular section}
\lipsum[1-10]
\end{document}
双缩进的部分是您必须给出的补充。