我正在使用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 字典样式标题):
字典和索引通常有一个页眉,其中包含页面上定义的第一个单词或第一个和最后一个单词。这可以通过
fancyhdr
LaTeX 的标记机制轻松实现。当然,如果您将标记用于字典样式的页眉,则不能将它们用于章节和节信息,因此如果还存在章节和节,则必须重新定义和\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}