我想了解如何使用命令 contentline;为此我编写了代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\maketitle
\tableofcontents
\clearpage
\section{Paragrafo 1}
Questo è il paragrafo 1
\subsection{Sottoparagrafo 1.1}
Questo è il sottoparagrafo 1.1
\contentsline{chapter}{Prefazione}{2}
\section{Paragrafo 2}
Questo è il paragrafo 2
\end{document}
结果很奇怪:contentsline 对目录没有影响。你能给我展示一个使用 contentline 的示例吗?
答案1
如果您想在章节级别向目录添加特定条目,则应\addcontentsline{toc}{chapter}{Prefazione}
在示例中使用。页面将是当前页面(因此此宏在该页面上执行)。您可以使用向目录添加任意内容\addtocontents
(主要用于格式化说明)。
要添加具有强制页码的特定条目,您可以使用\addtocontents{toc}{\string\contentsline{section}{Foobar}{100}}
。不要chapter
在这里使用,因为article
没有这个层,并且会导致错误。
该\contentsline
宏在内部用于排版目录的每个条目。它被定义为调用宏\l@#1
(用 构建\csname l@#1\endcsname
),因此如果\contentsline{chapter}
遇到 ,\l@chapter
就会调用该宏。这个宏会抓取 的其他两个参数\contentsline
并排版章节条目。
article
但是,宏中\l@chapter
没有定义,因此您\contentsline{chapter}
将调用\relax
(因为每个未定义的宏名称都使用\csname
equals a构建\relax
)。因此,您指定的其他两个参数只是排版,因为它们实际上从未被抓取。
答案2
宏\contentsline
不应该直接在文档中使用。LaTeX 的职责是将此类宏与适当的参数一起写入.toc
文件或其他辅助文件中,以用于各种列表。
该指令为\addcontentsline
,它通常隐含在宏中,例如\chapter
、、\section
其他分段命令和\caption
。
如果你\addcontentsline{<file>}{<level>}{<text>}
的文档中有,LaTeX 将在相应的文件中写入以下格式的行
\contentsline{<level>}{<text>}{<page>}
可以<type>
是toc
或(目录、图表列表或表格列表),并且对应于辅助文件的扩展名。请注意,页码将自动提供,因为写入操作是在页面被发送时执行的,此时页码是精确已知的。其他lof
类型可能可用,具体取决于所使用的包或文档中新列表的定义(首选包是)。lot
<file>
newfloat
还有\addtocontents{<type>}{<text>}
,它会将原始数据写入<text>
相应的文件,但这需要精确了解该文件随后如何使用。
还应该记住,它<text>
会进行扩展,因此\protect
如果某些宏在写入之前不需要扩展,就应该使用它。
文档类(或定义新列表的包)的职责是定义以下工作方式\contentsline
:默认情况下,
\contentsline{<level>}{<text>}{<page>}
将转变为
\l@<level>{<text>}{<page>}
例如,\contentsline{chapter}{Prefazione}{2}
将成为\l@chapter{Prefazione}{2}
并且宏\l@chapter
应该由文档类定义(它不在中article
)。
请注意hyperref
更改\addcontentsline
并\contentsline
添加更多参数以实现超链接的目的。