使用 LaTeXfloat
包裹,我创建了一个新的浮点数:
\newfloat{schema}{htb}{los}[chapter]
\floatname{schema}{{Schema}}
我的文档开头的架构列表是使用以下命令创建的
\listof{schema}{List of Schema}
我的问题是 LaTeX 没有在架构列表中为架构编号保留我想要的空间。当架构编号由三位数组成时,例如
\numberline {5.14}
那么这个数字的最后一位数字就非常接近架构标题的第一个字母。(事实上,如果数字有四位数字,它实际上可以与标题重叠。)
我尝试使用tocloft
包裹,但我搞不清楚如何与命令配合使用\newfloat
——听起来我应该告诉tocloft
更改numwidth
与我的“架构”浮点数关联的变量,但我一直无法弄清楚该变量的名称是什么(它不是schemanumwidth
或其他任何显而易见的东西)。可能tocloft
只是不知道用float
包的\newfloat
命令创建的浮点数。
我最终想出了一个肮脏的办法:
\let\orignumberline\numberline
\renewcommand{\numberline}[1]{\orignumberline{#1}\hspace{1em}}
如果它只影响我的模式列表,这不会太糟糕,但当然它也会影响目录中的章节和部分编号、目录内的表格编号等等,所有这些之前都有完全足够的间距(现在由于间距太宽看起来有点奇怪)。
这似乎是开箱即用的事情:如果我定义一个新的浮点数并创建它们的列表,那么 LaTeX 应该在这个浮点数列表中的浮点数 # 和浮点数标题之间留出足够的空间。我是否忽略了一些显而易见的东西?
答案1
这float
包裹定义\listof
执行一些浮点检查的命令,设置“浮点列表”参数并调用\@starttoc
。在这种情况下,可以手动定义特定的“浮点列表”:
\makeatletter
\newcommand{\listofschemas}{%
\@namedef{l@schema}{\@dottedtocline{1}{1.5em}{4em}}
\float@listhead{List of Schemas}%
\begingroup\setlength{\parskip}{\z@}%
\@starttoc{\@nameuse{ext@schema}}%
\endgroup%
}%
\makeatother
这里最重要的部分是
\@namedef{l@schema}{\@dottedtocline{1}{1.5em}{4em}}
使用
\@dottedtocline{<seclevel>}{<indent>}{<numwidth>}
的默认值为<numwidth>
,2.3em
给出“浮动列表”中分段标题的宽度。我已将其修改为 ,4em
使其宽度几乎是原来的两倍。
\documentclass{book}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{float}% http://ctan.org/pkg/float
\newfloat{schema}{htb}{los}[chapter]
\floatname{schema}{Schema}%
\makeatletter
\newcommand{\listofschemas}{%
\@namedef{l@schema}{\@dottedtocline{1}{1.5em}{4em}}
\float@listhead{List of Schemas}%
\begingroup\setlength{\parskip}{\z@}%
\@starttoc{\@nameuse{ext@schema}}%
\endgroup%
}%
\makeatother
\begin{document}
\listoffigures
\listofschemas
\chapter{A chapter} \lipsum[1]
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{schema} \centering test \caption{A schema} \end{schema}% SCHEMA
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{schema} \centering test \caption{A schema} \end{schema}% SCHEMA
\chapter{Another chapter} \lipsum[2]
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{schema} \centering test \caption{A schema} \end{schema}% SCHEMA
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{figure} \centering test \caption{A figure} \end{figure}% FIGURE
\begin{schema} \centering test \caption{A schema} \end{schema}% SCHEMA
\end{document}
这将特定于“模式列表”。
如果您希望在“Schemas 列表”中的条目之间添加垂直间隙以按章节分隔架构,请添加
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\preto\chapter{\float@addtolists{\protect\addvspace{10pt}}}%
\makeatother
到您的文档序言中。etoolbox
包裹能够修补命令;在本例中,在\chapter
via之前添加一些内容\preto\chapter{<stuff>}
。这里<stuff>
加起来就是10pt
所有定义的“List of...”结构(LoF 和 LoT 除外)之间的垂直间隙。\addvspace
只在需要时添加10pt
。例如,如果您有一章没有任何模式,您不希望“模式列表”中各章模式之间的间隙为20pt
。将上述 MWE 与加法一起使用etoolbox
可得出: