如何使用 fancyhdr/fancy 环境下管理标题中过长的部分名称?

如何使用 fancyhdr/fancy 环境下管理标题中过长的部分名称?

我有以下环境:

\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}

双缩进的部分是您必须给出的补充。

PS:点赞这里:https://tex.stackexchange.com/a/380116/120578:P

相关内容