如何在 titleformat 中使用标签和 pageref 显示每个部分的章节(但每页仅显示一次)

如何在 titleformat 中使用标签和 pageref 显示每个部分的章节(但每页仅显示一次)

出于美观的原因,我尝试在某一章节之前重复章节名称,但前提是引用的章节不在同一页面上,并且同一页面上的先前章节没有引用该章节。

简而言之:第 1 页:

  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}检索页码并与进行比较的方法。\getpagerefnumberrefcount\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}

在此处输入图片描述

相关内容