因为我完全是新手,所以我不知道如何解决上述问题,而且我在网上搜索也没有找到任何东西。
我喜欢让它看起来像下面的例子:
图表目录
- 图 1 1
- 图 2.3
- 清单 1 4
- 图 3....4
- 清单 2 5
- 清单 3 6
- 表 1 6
第二个数字保留为页码。
谢谢你的幫助!
答案1
免责声明:我根本不建议合并图形列表中的非图形条目(例如表格或列表)......
一种方法是更改用于写入相关和文件的文件句柄\tf@lot
和,以使其等于,这样任何对和的写入尝试都将最终以结束。\tf@lol
.lot
.lof
\tf@lof
.lot
.lol
.lof
下面的代码正是这样做的,并使用\string
以防止过早扩展\let\tf@lot\tf@lof
等。
由于@
出现在宏名中,所以\makeatletter...\makeatother
是必要的。
\makeatletter
\AtBeginDocument{
\immediate\write\@auxout{%
\string\let\string\tf@lot\string\tf@lof^^J%
\string\let\string\tf@lol\string\tf@lof
}
}
\makeatother
加载的包只是为了更快地生成内容,但并不是真正必要的,除此之外listings
(感谢 moewe 指出!),但却caption
大大xpatch
简化了整个问题。
由于\captionsetup[lstlisting]{listformat=simple}
不起作用,我进行了修补\lst@MakeCaption
以便在图表列表中提供正确的前缀。
\documentclass{article}
\usepackage{blindtext}
\usepackage{pgffor}
\usepackage{xpatch}
\usepackage{tocloft}
\usepackage{listings}
\makeatletter
% Must be done before caption packages changes \lst@MakeCaption
\xpatchcmd{\lst@MakeCaption}{%
\addcontentsline{lol}{lstlisting}%
{\protect\numberline{\thelstlisting}\lst@@caption}%
}{%
\addcontentsline{lol}{lstlisting}%
{\protect\numberline{\p@lstlisting\ \thelstlisting}\lst@@caption}%
}{\typeout{Foo}}{}
\makeatother
\usepackage{caption}
\makeatletter
\AtBeginDocument{
\renewcommand{\listfigurename}{Table of Figures}% Better: \addtocaptions{english}{\renewcommand{\listfigurename}{Table of Figures}} if babel is loaded
\addtolength{\cftfignumwidth}{20pt}
\addtolength{\cfttabnumwidth}{20pt}
% Add the prefixes
\renewcommand{\p@table}{Tab.}
\renewcommand{\p@figure}{Fig.}
\renewcommand{\p@lstlisting}{\lstlistingname}%
\let\l@lstlisting\l@figure%
\immediate\write\@auxout{%
\string\let\string\tf@lot\string\tf@lof^^J%
\string\let\string\tf@lol\string\tf@lof
}
}
\makeatother
\captionsetup[figure]{listformat=simple}
\captionsetup[table]{listformat=simple}
\begin{document}
\tableofcontents
\listoffigures
\clearpage
\foreach \x in {1,...,5} {%
\section{Foo section \x}
\blindtext
\begin{figure}
\caption{A foo figure with number \x }
\end{figure}
\begin{table}
\caption{A foo table with number \x }
\end{table}
}
\begin{lstlisting}[language=C,caption={Foo listing One}]
printf("Hello World\n");
\end{lstlisting}
\end{document}
答案2
我觉得\addcontentsline
可以用一种简单的方法来实现这个效果:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\tableofcontents
\section{Lipsum 1 -- 15}
\lipsum[1-12]
This is a line. \textbf{It will be added to the ToC.}
\addcontentsline{toc}{section}{A custom line or something you want}
% maybe Figure 1.2 or something
\lipsum[13-16]
\section{Another lipsum}
\subsection{Checking}
\lipsum[17-19]
\subsection{Another checking sub-section}
\lipsum[20-30]
\end{document}
但是我不建议这样做,因为在我看来这会非常丑陋!