我有一个 LaTeX 文档,其中包含一些章节以及图表列表。如下所示:
\tableofcontents
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
\addcontentsline{toc}{chapter}{\listtablename}
\listoftables
\chapter{Chapter 1}
\chapter{Chapter 2}
\chapter{Chapter 3}
因此目录中的结果将是:
表格清单 .................... i
图表清单 .......................... ii
第 1 章 .................... 1
第 2 章 .................... 2
第 3 章 .................... 3
但我希望在文档的开头显示列表,在目录中显示它们在结尾,如下所示:
第 1 章 ...................... 1
第 2 章 ...................... 2
第 3 章 ...................... 3
表格清单................ i
图片列表 .............. ii
我尝试过这个:
\tableofcontents
\listoftables
\listoffigures
\chapter{section 1}
\chapter{section 2}
\chapter{section 3}
\addcontentsline{toc}{chapter}{\listfigurename}
\addcontentsline{toc}{chapter}{\listtablename}
但是页码是错误的:
第 1 章 ................. 1
第 2 章 ................. 2
第 3 章 ................. 3
表格列表 ................4
图片列表................5
有人知道解决方案吗,如何使用正确的页码更改目录中列表的位置?
答案1
refcount
允许您以可扩展的方式提取页面引用。以下方法使用\label
-\ref
系统在 LoF/LoT 的第一页上设置\label
,然后将条目添加到需要的 ToC 中,使用 扩展页码\getpagerefnumber
:
\documentclass{book}
\usepackage{refcount}
\begin{document}
\frontmatter
\tableofcontents
\clearpage
\label{listoffigures}
\listoffigures
\clearpage
\label{listoftables}
\listoftables
\mainmatter
\chapter{First chapter}
\chapter{Second chapter}
\chapter{Third chapter}
% Insert delayed LoF/LoT
\addtocontents{toc}{\protect\contentsline{chapter}{\listfigurename}{\getpagerefnumber{listoffigures}}}
\addtocontents{toc}{\protect\contentsline{chapter}{\listtablename}{\getpagerefnumber{listoftables}}}
\end{document}
答案2
以下是您场景中非常特殊的用例。我相信如果您使用hyperref
或其他与 ToC 相关的包。
这个想法是更新宏,该宏设置每个与 ToC 相关的条目,具体条件是设置 LoF 还是 LoT。以下是您的典型情况.toc
:
\contentsline {chapter}{List of Figures}{ii}
\contentsline {chapter}{List of Tables}{iv}
\contentsline {chapter}{\numberline {1}First chapter}{1}
\contentsline {chapter}{\numberline {2}Second chapter}{3}
\contentsline {chapter}{\numberline {3}Third chapter}{5}
我们使用第二个参数之间的str
ing c
o arison 有条件地检查它是否与或匹配。如果是这种情况,我们将存储所有信息以供以后使用(在宏和 中)。然后将这些宏插入到 ToC 中,以在文档中调用它的任何位置设置条目。mp
\contentsline
\listfigurename
\listtablename
\delayedLoF
\delayedLoT
\addtocontents{toc}{\protect<macro>}
插入被\protect
编辑以便不扩展,但最终.toc
将类似于
\contentsline {chapter}{List of Figures}{ii}
\contentsline {chapter}{List of Tables}{iv}
\contentsline {chapter}{\numberline {1}First chapter}{1}
\contentsline {chapter}{\numberline {2}Second chapter}{3}
\contentsline {chapter}{\numberline {3}Third chapter}{5}
\delayedLoF
\delayedLoT
\documentclass{book}
% Update \contentsline to condition on LoF/LoT
\let\oldcontentsline\contentsline
\renewcommand{\contentsline}[3]{%
\ifnum\pdfstrcmp{#2}{\listfigurename}=0
\def\delayedLoF{\oldcontentsline{#1}{#2}{#3}}
\else\ifnum\pdfstrcmp{#2}{\listtablename}=0
\def\delayedLoT{\oldcontentsline{#1}{#2}{#3}}
\else
\oldcontentsline{#1}{#2}{#3}
\fi\fi
}
\begin{document}
\frontmatter
\tableofcontents
\clearpage
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
\clearpage
\addcontentsline{toc}{chapter}{\listtablename}
\listoftables
\mainmatter
\chapter{First chapter}
\chapter{Second chapter}
\chapter{Third chapter}
% Insert delayed LoF/LoT
\addtocontents{toc}{\protect\delayedLoF}
\addtocontents{toc}{\protect\delayedLoT}
\end{document}
如果您的 LoF 和 LoT 条目必须位于 ToC 的末尾,则只需修补即可\tableofcontents
自动插入它们。