出于美观的原因,我尝试在某一章节之前重复章节名称,但前提是引用的章节不在同一页面上,并且同一页面上的先前章节没有引用该章节。
简而言之:第 1 页:
- 第一章
1.1 第一节
1.2 第二节
第2页:
第一章
1.3 第三节
1.4 第四节
我知道使用\thepage
不是正确的方法,而且这
\pageref
是首选方法,但我无法让它工作。除了\thepage
第二页不正确之外,下面的方法确实有效,但会很快失效(因为\thepage
在第二页上设置不正确,将其留在第一页上并且不显示章节名称):
\documentclass[10pt,a4paper]{report}
\usepackage{ifthen,xcolor}
\usepackage[small,sf,bf]{titlesec}
% get the text from the current chapter's title
\let\Chaptermark\chaptermark
\def\chaptermark#1{\def\Chaptername{#1}\Chaptermark{#1}}
\xdef\cp{\thepage} %define the page where the last chapter is
\xdef\sp{\thepage} %define the page where the last section is
\titleformat{\chapter} %command
[block] %shape
{\huge\bfseries} %format
{\thechapter} %label
{0pt} %sep
{} %before-code
[\xdef\cp{\thepage}] %after-code
% reformat \section
\titleformat{\section}
[block]
{\huge\bfseries}
{ % only show Chaptername once a page
\ifthenelse{\cp = \thepage}%
{}% if last chapter on same page, do nothing
{
\ifthenelse{\sp = \thepage}%
{}% if last section on same page, do nothing
{\Chaptername \\} %show chapter name
}
}
{0pt}
{}
[\xdef\sp{\thepage}]
\begin{document}
\chapter{First Chapter}
\section{First Section}
\section{Second Section}
\lipsum
\section{Third Section}
\section{Fourth Section}
\end{document}
使用\label{\Sectionname}
inside\titleformat
作为部分(\Sectionname
类似于\Chaptername
),然后使用\pageref{\Sectionname}
而不是\thepage
似乎不起作用。(对两者使用自定义计数器也不行)
我该如何正确使用对页面的引用?
答案1
这是一种使用(希望章节名称是唯一的)并从包中\label{\Chaptername}
检索页码并与进行比较的方法。\getpagerefnumber
refcount
\ifnum...
不要重新定义\sp
——这个宏在TeX
还有很多虚假的空间,我把它们删除了。
\documentclass[10pt,a4paper]{report}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[small,sf,bf]{titlesec}
\usepackage{refcount}
% get the text from the current chapter's title
\let\Chaptermark\chaptermark
\def\chaptermark#1{\def\Chaptername{#1}\Chaptermark{#1}}
\xdef\currentp{\thepage} %define the page where the last chapter is
\xdef\lastp{\thepage} %define the page where the last section is
\titleformat{\chapter} %command
[block] %shape
{\huge\bfseries} %format
{\thechapter\ } %label
{0pt} %sep
{} %before-code
[\label{\Chaptername}\xdef\currentp{\thepage}] %after-code
% reformat \section
\titleformat{\section}
[block]
{\huge\bfseries}
{% only show Chaptername once a page
\ifnum\getpagerefnumber{\Chaptername}=\value{page}%
\else
\ifnum\lastp=\value{page}%
\else
\Chaptername\ \\%
\fi
\fi
}%
{0pt}%
{}%
[\xdef\lastp{\thepage}]
\begin{document}
\chapter{First Chapter}
\section{First Section}
\section{Second Section}
\lipsum
\section{Third Section}
\section{Fourth Section}
\clearpage
\section{Fifth Section}
\end{document}