从目录中删除重复的页码

从目录中删除重复的页码

你好,我正在尝试用 LaTeX 创建一个文档,其中同一页包含几个小节,有什么方法可以删除重复的页码,并在转到新页面时保留页码?

答案1

虽然我没有编程技能,但这显然是可能的;例如在目录的每一行之前添加一个钩子:“如果页码与上一行相同,则打印点和数字\color{white}”。

CTAN 上有一些关于目录的软件包。你知道“主题索引”吗?看看关于目录的软件包那里

最接近的候选者似乎是软件包。如果您进行了完整安装,则可以通过在命令行中tocloft键入来获取手册。也许您可以使用或类似的东西。texdoc tocloft\cftXleader

但是,您的读者会忽略数字,并会自问(他们不会问您,对吧?他们正在看书!)这是否是打字错误。所以听我的建议:像其他人一样打印“目录”...

答案2

这是使用包实现此目的的一种方法tocloft。这个想法大致是 Keks Dose 提出的,但这里是正确的细节和具体的实现。

您需要重新定义\cftXfillnum宏,其中X代表相关部分级别,您不想显示其编号,以及上一级。每个级别都需要将相关页码存储在某个变量中。较低的条目需要根据存储的值测试当前值并采取相应措施。

在这个例子中,我假设您希望对所有章节进行编号,但具有共同页码的章节和小节下的子章节则不进行编号。

示例输出

\documentclass[12pt,a4paper]{article}

\usepackage{tocloft}

\makeatletter
\def\currentcontentsnumber{0}
\renewcommand{\cftsecfillnum}[1]{
  {\cftsecleader}\nobreak
  \makebox[\@pnumwidth][\cftpnumalign]{%
  {\cftsecpagefont #1}}\cftsecafterpnum\par
  \gdef\currentcontentsnumber{#1}}
\renewcommand{\cftsubsecfillnum}[1]{\expandafter\ifx\currentcontentsnumber#1
  \hfill\nobreak\else
  {\cftsubsecleader}\nobreak
  \makebox[\@pnumwidth][\cftpnumalign]{%
  {\cftsubsecpagefont #1}}\fi
  \cftsubsecafterpnum\par
  \gdef\currentcontentsnumber{#1}}
\renewcommand{\cftsubsubsecfillnum}[1]{\expandafter\ifx\currentcontentsnumber#1
  \hfill\nobreak\else
  {\cftsubsubsecleader}\nobreak
  \makebox[\@pnumwidth][\cftpnumalign]{%
  {\cftsubsubsecpagefont #1}}\fi
  \cftsubsubsecafterpnum\par
  \gdef\currentcontentsnumber{#1}}
\makeatother

\begin{document}

\tableofcontents

\newpage
  \section{Lorem ipsum}
    dolor sit amet
    \subsection{consectetur adipiscing}
      elit. Donec a diam lectus.
        \subsubsection{Sed}
  \section{sit amet}
   ipsum mauris. Maecenas congue[...]
\newpage
  \section{ligula}
    ac quam viverra[...]
    \newpage
    \subsection{nec}
\end{document}

相关内容