使用后台包时出现错误的章节编号

使用后台包时出现错误的章节编号

我正在使用background包将当前章节编号添加到每个页面的背景中。但章节编号似乎不正确。MWE 如下:

\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{background}
\SetBgContents{\arabic{section}}
\SetBgAngle{0}
\begin{document}
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\end{document}

第一页和第二页的章节编号应该分别为 3 和 6,但是它显示的却是 4 和 7。这有什么问题吗?

在此处输入图片描述

答案1

这里的问题与输出例程以及它与页面输出时收集的文本不一致(它是异步的)的事实有关。通常,获取信息太晚了,因为 TeX 已经收集了将构成下一页一部分的文本(步进计数器等,它正在吞噬输入流)。解决这个问题的一种方法是利用 LaTeX 的标记机制……

以下引文摘自fancyhdr 文档(部分10 字典样式标题):

字典和索引通常有一个页眉,其中包含页面上定义的第一个单词或第一个和最后一个单词。这可以通过fancyhdrLaTeX 的标记机制轻松实现。当然,如果您将标记用于字典样式的页眉,则不能将它们用于章节和节信息,因此如果还存在章节和节,则必须重新定义和\chaptermark\sectionmark使它们无害:

\renewcommand{\chaptermark}[1]{}
\renewcommand{\sectionmark}[1]{}

现在,您\markboth{#1}{#1}对每个字典或索引条目执行一个操作#1,并将其用作\rightmark页面上定义的第一个条目和\leftmark最后一个条目。

使用类似的方法,我重新定义\sectionmark为写入\markboth{\thesection}{\thesection}。现在\rightmark将是第一个部分编号,并且\leftmark将是最后一个部分编号:

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{lipsum,background}
\renewcommand{\sectionmark}[1]{\markboth{\thesection}{\thesection}}
\SetBgContents{\leftmark}
\SetBgAngle{0}
\begin{document}
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\end{document}

如果您想使用标题进行常规设置\leftmark\rightmark那么重新定义当然\sectionmark不会那么有用。您可以切换到使用titleps它提供了“开关”来使用一些额外的标记。下面是一个定义页面样式的示例,main该样式将页眉设置为包含节号和名称,但仍使用开关在背景中引用最后一节\bottitlemarks

在此处输入图片描述

\documentclass[12pt,twoside]{article}
\usepackage{lipsum,background,titleps}
\SetBgContents{\bottitlemarks\thesection}
\SetBgAngle{0}
\newpagestyle{main}{
  \sethead[\thesection~\sectiontitle][][\thepage]% Odd
          {\thepage}{}{\thesection~\sectiontitle}% Even
}
\pagestyle{main}
\begin{document}
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\end{document}

如果你习惯了fancyhdr,可以考虑阅读titleps为了fancyhdr用户

答案2

受到 Werner 的回答的启发,我得到了以下答案,它直接使用\marks中的命令etex来解决标题部分和背景部分之间的冲突。

\documentclass[12pt]{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LE,RO]{\thepage}
\fancyhead[RE]{Book Name}
\fancyhead[LO]{\leftmark}
\renewcommand{\chaptermark}[1]{\markboth{\chaptername\ \arabic{chapter}\quad#1}{}}
\usepackage{etex,background,lipsum}
\newmarks\mymark
\renewcommand{\sectionmark}[1]{\marks\mymark{\arabic{section}}}
\SetBgContents{\botmarks\mymark}
\SetBgAngle{0}
\begin{document}
\chapter{Some Name}
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\section{Name}
\lipsum[6]
\section{Name}
\lipsum[8]
\section{Name}
\lipsum[4]
\end{document}

相关内容