在页眉中显示页面上的部分范围

在页眉中显示页面上的部分范围

我希望每一页都有范围显示其涵盖的章节,与页码相对,并附有名称第一新节(如果有新节)从该页开始。章节可以从奇数页或偶数页开始。我还希望章节的第一页具有完全相同的样式:节范围位于内页眉边距旁边,页码位于外页眉边距旁边。如果章节的前几页没有“第一”节,则页眉中应仅显示页码。

这个问题与关于在标题中正确显示节号的问题;我认为正确的解决方案可能取决于答案中给出的信息。

我总是使用memoir-package。


格式示例:使用以下代码

\documentclass[openany]{memoir}
\usepackage{lipsum}

\begin{document}

\chapter{The only chapter} \lipsum[1]
\section{Section one} \lipsum[1]
\section{Section two} \lipsum[1-2]\lipsum[4]\lipsum[4]\lipsum[4]
\section{Section three} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section four} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section five} \lipsum[2]
\section{Section six} \lipsum[1]
\section{Section seven} \lipsum[1]
\section{Section eight} \lipsum[1]
\section{Section nine} \lipsum[1-5]
\section{Section ten} \lipsum[1]
\section{Section eleven} \lipsum[1-8]

\chapter{The second chapter} \lipsum[1-10]
\section{Section one} \lipsum[1]

\chapter{The third chapter}
\section{Section one} \lipsum[4]
\section{Section two} \lipsum[4]
\section{Section three} \lipsum[4]

\end{document}

第 2 章从第 10 页开始(由于选项,不是第 11 页openany),第 3 章从第 13 页开始(出于同样的原因,不是第 15 页),标题应如下:

  1. 1.1 -- Section one-1
  2. 2-Section two -- 1.2
  3. 1.3--1.4 -- Section three-3
  4. 4-Section five -- 1.4--1.5
  5. 1.6--1.8 -- Section six-5
  6. 6-Section nine -- 1.9
  7. 1.9--1.11 -- Section ten-7
  8. 8-1.11
  9. 1.11-9
  10. 10-
  11. -11
  12. 12-Section one -- 2.1
  13. 3.1--3.3 -- Section one-13

一个小小的变化是让章节开头的前节页面仅显示章节编号。这将使第 10 页和第 11 页更改为以下内容:

[10.] 10— (2 德文10:—)2.

[11.] 2— (11 德文2.:—)11

另一个(非常合理并且可能更好的)变体是即使特定页面上没有新的部分,也要提及该部分的名称;这就是 Heiko Oberdiek 当前解决方案所做的:

[8.] 8-Section eleven -- 1.11

[9.] 1.11 -- Section eleven——9


对于那些不可避免的想要告诉我章节第一页“不应该”有页眉的人来说,这里有两条非常友好的说明:

  1. 书面材料包含很多冗余内容(页码、目录、索引、正文中的内容冗余……),而且标题本身在技术上也是冗余的。一致性是我个人的设计选择。
  2. 在某些类型中,美学考虑在很大程度上服从于风格统一性,例如某些法律文件。(但我并不认为章节内第一页的页眉和页脚样式不美观。)

答案1

因为memoir使用了类,所以在任何页面上开始一个章节都很容易:

\renewcommand*{\clearforchapter}{\clearpage}

正确设置页眉要复杂得多。如果plain为章节的第一页设置页面样式,这项任务就会大大简化,因为这样标记寄存器中的章节值就可以轻松重置。下面的示例使用了许多额外的标记寄存器(使用 eTeX 和包etex)来记住章节标题、章节名称和章节编号。

评论:

  • 章节标题记在 中\MarkSectionTitle。其章节号记在 中\MarkSectionChapterNumber。只有当此章节号与当前章节号匹配时,才会打印标题,以避免在新的章节的起始页上打印上一章的标题。

  • 未编号的章节/部分不受支持或支持不力。

  • 编号内容仅具有原型质量。可能存在一些缺失的案例/错误。

  • \MarkSectionEarlyNumber添加此标记是为了处理某个部分开始新页面的情况。这意味着,前一节也在该页面上结束,但页眉的第一个数字应为页面上的新部分。

示例文件:

\documentclass{memoir}
\usepackage{lipsum}

\usepackage{etex}

\newmarks\MarkSectionTitle
\newmarks\MarkSectionChapterNumber
\newmarks\MarkSectionNumber
\newmarks\MarkSectionEarlyNumber
\newmarks\MarkChapterNumber

\makeatletter
\newcommand*{\AddMarks}[2]{%
  \begingroup
    \let\label\relax
    \let\index\relax
    \let\glossary\relax
    \protected@edef\x{#2}%
    \toks@\expandafter{\x}%
    \marks#1\expandafter{\the\toks@}%
  \endgroup
}
\newcommand*{\MarksNoBreak}{%
  \if@nobreak\ifvmode\nobreak\fi\fi
}
\newcommand*{\OriginalSection}{}
\let\OriginalSection\section
\renewcommand*{\section}{%
  \@ifstar{\OriginalSection*}{%
    \stepcounter{section}%
    \AddMarks\MarkSectionEarlyNumber{\thesection}%
    \addtocounter{section}{-1}%
    \OriginalSection
  }%
}

\makepagestyle{secheadings}
\makepsmarks{secheadings}{%
  \def\chaptermark##1{%
    \AddMarks\MarkChapterNumber{\thechapter}%
    \marks\MarkSectionEarlyNumber{}%
    \MarksNoBreak
  }%
  \def\sectionmark##1{%
    \ifnum\value{secnumdepth}>0 %
      \AddMarks\MarkSectionNumber{\thesection}%
    \fi
    \AddMarks\MarkSectionTitle{##1}%
    \AddMarks\MarkSectionChapterNumber{\thechapter}%
    \MarksNoBreak
  }%
  \def\tocmark{}%
  \def\lofmark{}%
  \def\lotmark{}%
  \def\bibmark{}%
  \def\indexmark{}%
  \def\glossarymark{}%
}
\newcommand*{\SecHeadingsSetup}{%
  \protected@edef\SecHeadingsTheChapter{\thechapter}%
  \edef\SecHeadingsSectionChapterNumber{%
    \firstmarks\MarkSectionChapterNumber 
  }%
  \ifx\SecHeadingsTheChapter\SecHeadingsSectionChapterNumber
    \edef\SecHeadingsFirstTitle{\firstmarks\MarkSectionTitle}%
    \edef\SecHeadingsPreviousChapterNumber{\topmarks\MarkChapterNumber}%
    \edef\SecHeadingsThisChapterNumber{\firstmarks\MarkChapterNumber}%  
    \edef\SecHeadingsLastNumber{\botmarks\MarkSectionNumber}% 
    \let\SecHeadingsFirstNumber\@empty
    \ifx\SecHeadingsPreviousChapterNumber\SecHeadingsThisChapterNumber
      \edef\SecHeadingsFirstNumber{\topmarks\MarkSectionEarlyNumber}% 
    \fi
    \ifx\SecHeadingsFirstNumber\@empty
      \edef\SecHeadingsFirstNumber{\firstmarks\MarkSectionNumber}%
    \fi
    \ifx\SecHeadingsFirstNumber\@empty
      \let\SecHeadingsNumbers\@empty  
    \else
      \ifx\SecHeadingsFirstNumber\SecHeadingsLastNumber
        \let\SecHeadingsNumbers\SecHeadingsFirstNumber 
      \else
        \def\SecHeadingsNumbers{%
          \SecHeadingsFirstNumber--\SecHeadingsLastNumber
        }%
      \fi 
    \fi   
  \else   
    \let\SecHeadingsFirstTitle\@empty
    \let\SecHeadingsNumbers\@empty
  \fi
}
\newcommand*{\SecHeadingsPrint}[2]{%
  \ifx#1\@empty
    \ifx#2\@empty
      \SecHeadingsOut{}%
    \else
      \SecHeadingsOut{#2}%
    \fi
  \else
    \ifx#2\@empty
      \SecHeadingsOut{#1}%
    \else
      \SecHeadingsOut{#1 -- #2}%
    \fi
  \fi  
}
\newcommand*{\SecHeadingsOut}[1]{%
  #1%
  \protected@edef\SecHeadingsTemp{#1}%
  \@onelevel@sanitize\SecHeadingsTemp 
  \typeout{Header(\thepage): \SecHeadingsTemp}%
}
\makeevenhead{secheadings}{\thepage}{}{%
  \SecHeadingsSetup
  \SecHeadingsPrint\SecHeadingsFirstTitle\SecHeadingsNumbers
}
\makeoddhead{secheadings}{%
  \SecHeadingsSetup
  \SecHeadingsPrint\SecHeadingsNumbers\SecHeadingsFirstTitle
}{}{\thepage}
\makeatother 

\aliaspagestyle{chapter}{secheadings}
\pagestyle{secheadings}

\renewcommand*{\clearforchapter}{\clearpage}

\begin{document}

\chapter{The only chapter} \lipsum[1]
\section{Section one} \lipsum[1]
\section{Section two} \lipsum[1-2]\lipsum[4]\lipsum[4]\lipsum[4]
\section{Section three} \lipsum[1]\lipsum[1]\lipsum[1]
\section{Section four} \lipsum[1]\lipsum[1]\lipsum[1] 
\section{Section five} \lipsum[2]
\section{Section six} \lipsum[1] 
\section{Section seven} \lipsum[1]
\section{Section eight} \lipsum[1]
\section{Section nine} \lipsum[1-5]
\section{Section ten} \lipsum[1]   
\section{Section eleven} \lipsum[1-8]

\chapter{The second chapter} \lipsum[1-10]
\section{Section one} \lipsum[1]

\chapter{The third chapter}
\section{Section one} \lipsum[4]
\section{Section two} \lipsum[4]
\section{Section three} \lipsum[4]

\end{document}

结果:

Header(1): 1.1 -- Section one
Header(2): Section two -- 1.2
Header(3): 1.3--1.4 -- Section three
Header(4): Section five -- 1.4--1.5
Header(5): 1.6--1.8 -- Section six
Header(6): Section nine -- 1.9
Header(7): 1.9--1.11 -- Section ten
Header(8): Section eleven -- 1.11
Header(9): 1.11 -- Section eleven
Header(10): 
Header(11): 
Header(12): Section one -- 2.1
Header(13): 3.1--3.3 -- Section one

相关内容