LaTeX插入索引及精确控制
一般索引
交叉引用是 LaTeX 强大的自动排版功能之一。在能够被交叉引用的地方,如章节、公式、图表、定理等位置使用 \label 命令:\label{label-name}。
之后可以在需要设置索引处使用 \ref 或 \pageref 命令,分别生成交叉引用的编号和页码:
\ref{label-name}
\pageref{label-name}
但是\label命令默认情况下只能精确到subsubsection级别,如果我们要在一个subsubsection内部设置多个索引,引用时只会定位到第一个索引的位置,无法实现精确的定位。
插入精确定位的索引
如果你需要更加精确定位,可以考虑使用\phantomsection和\addcontentsline命令来手动添加标签。
例如,你可以在需要的位置使用\phantomsection创建一个“假”的section或subsection,并使用\addcontentsline将其添加到目录中,然后再使用\label进行标记。
\phantomsection
\addcontentsline{toc}{subsubsection}{Your Sub-subsection Title}
\label{your-label-1}
这样就可以更加精确地定位标签了。当你想要引用这个标签时,直接使用\ref{your-label-1}即可。
但是,这会有个缺点,创建的“假”的section或subsection,会真实的出现在目录中,但有时我们不希望它出现在目录中,就需要额外的命令控制目录深度。
插入精确定位的索引,并控制其目录深度
如果你不希望手动添加的标签出现在目录中,可以考虑使用\addtocontents命令来控制特定级别的目录项。
例如,假设你要创建一个subsubsection级别的标签,并且不希望它出现在目录中,可以这样操作:
\phantomsection
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}} % 限制目录深度
\subsubsection*{Your Sub-subsection Title}
\label{your-label-2}
这里使用了\addtocontents命令来暂时修改了tocdepth计数器以限制目录深度,然后用*形式的section命令创建不编号、不加入目录项的子标题,并在其后面添加label。当你想引用这个标签时,直接使用\ref{your-label}即可。
如果你不希望文章中出现该label的子标题,也可以删去第三行,改为:
\phantomsection
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}} % 限制目录深度
\label{your-label-2}
当你想要引用这个标签时,直接使用\ref{your-label-2}即可。
此时看到目录中就不会出现额外的目录项了。
恢复默认目录深度
请注意,在需要恢复默认深度之前(例如在新页面或者新章节之前),需要使用 \addtocontents 命令将 tocdepth 计数器重新设置到所需深度。
在后面的章节中恢复目录深度可以通过以下方式实现:
\addtocontents{toc}{\protect\setcounter{tocdepth}{3}} % 恢复目录深度为原始值
将这行代码放在新页面或者新章节的开头即可,再添加正常的章节时,目录中标题顺序也是正常的。
由此,我们就实现了索引的精确定位以及控制其在目录中的显示。