我正在使用tocloft
和subcaption
包,我想抑制 LOF 中子图的页码和点线。
我知道,如果使用tocloft
并subfigure
打包,可以使用下一个命令来完成:
\cftpagenumbersoff{subfigure}
因此,我想用subcaption
包来模拟此命令。关键是我已经用subcaption
包完成了所有子图,并且我不想更改所有子图的代码。
答案1
有一种可能性是,您可以tocloft
在使用该包时使用子图条目的所有功能subcaption
;特别是,您可以抑制页码和前导符(从条目到页码的点):
\documentclass{article}
\usepackage[list=true]{subcaption}
\usepackage{tocloft}
\setcounter{lofdepth}{2}
\cftpagenumbersoff{subfigure}
\makeatletter
\newcommand\cftsubtabdotsep{\cftdotsep}
\newcommand\cftsubfigfont{\normalfont}
\newcommand\cftsubfigpresnum{}
\newcommand\cftsubfigaftersnum{}
\newcommand\cftsubfigaftersnumb{}
\newcommand\cftsubfigleader{\hfill}
\newcommand\cftsubfigpagefont{\normalfont}
\newcommand\cftsubfigafterpnum{}
\providecommand{\toclevel@subfigure}{1}
\renewcommand*\l@subfigure[2]{%
\ifnum \c@lofdepth > \toclevel@subfigure
\vskip \cftbeforesubfigskip
{\leftskip \cftsubfigindent\relax
\rightskip \@tocrmarg
\parfillskip -\rightskip
\parindent \cftsubfigindent\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima \cftsubfignumwidth\relax
\let\@cftbsnum \cftsubfigpresnum
\let\@cftasnum \cftsubfigaftersnum
\let\@cftasnumb \cftsubfigaftersnumb
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{\cftsubfigfont #1}\nobreak
\cftsubfigfillnum{#2}}%
\fi
}%
\newlength\cftbeforesubfigskip
\setlength\cftbeforesubfigskip{\z@ \@plus.2\p@}
\newlength\cftsubfigindent
\setlength\cftsubfigindent{3.8em}
\newlength\cftsubfignumwidth
\setlength\cftsubfignumwidth{2.5em}
\renewcommand{\cftsubfigfillnum}[1]{%
{\cftsubfigleader\hfill}\par
}
\makeatother
\begin{document}
\listoffigures
\begin{figure}
\begin{subfigure}{.5\linewidth}
\centering
A
\caption{test subfigure A}
\label{sfig:testa}
\end{subfigure}%
\begin{subfigure}{.5\linewidth}
\centering
B
\caption{test subfigure B}
\label{sfig:testb}
\end{subfigure}
\caption{Test figure}
\label{fig:testa}
\end{figure}
\begin{figure}
\begin{subfigure}{.5\linewidth}
\centering
C
\caption{test subfigure C}
\label{sfig:testc}
\end{subfigure}%
\begin{subfigure}{.5\linewidth}
\centering
D
\caption{test subfigure D}
\label{sfig:testd}
\end{subfigure}
\caption{Test figure}
\label{fig:testb}
\end{figure}
\end{document}
答案2
如果您将该选项传递给该包,它tocloft
可以提供一组有用的宏来调整子图的格式subfigure
。
在这种情况下,该包将假定您使用该subfigure
包,并且计数器lofdepth
和lotdepth
由子图包定义。
但是如果您想使用tocloft
带有的包subcaption
来代替subfigure
所述计数器,则它们不是由tocloft
norsubcaption
包创建的。
只需加载包并定义这些计数器即可使一切正常工作。
\usepackage{subcaption}
\usepackage[subfigure]{tocloft}
\newcounter{lofdepth}
\newcounter{lotdepth}
% here you have access to all tocloft subfig macro
\setlength{\cftsubfigindent}{01emem}
\setlength{\cftsubfignumwidth}{3em}
\renewcommand{\cftfigfont}{\sffamily}
\renewcommand{\cftfigpagefont}{\ttfamily}