你好,我正在尝试用 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}