我正在尝试使用todonotes
图标题中包中的内联待办事项注释。但是,当我生成时,出现以下错误listoffigures
。
! Leaders not followed by proper glue.
<to be read again>
\hfill
l.2 ...inline]{A note in a float}}}{8}{figure.1.1}
我发现这很奇怪,因为文档说这是内联待办事项注释的预期用例之一(参见第 6 页)!
这是我的 MWE TeX 文件:
\documentclass[11pt,a4paper,draft,twoside]{scrbook}
\usepackage{fixltx2e}
\usepackage{fontspec}
\usepackage{libertine}
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{float}
\usepackage[backgroundcolor=green!40,textsize=scriptsize,obeyFinal]{todonotes}
\author{Suvayu}
\date{\today}
\title{Title}
\usepackage[draft=false,bookmarks]{hyperref}
\hypersetup{
% hidelinks,
colorlinks,
pagebackref,
linkcolor=black,
}
\usepackage{bookmark} % smarter bookmarks
\begin{document}
\maketitle
\clearpage\null\newpage
\setcounter{tocdepth}{3}
\addcontentsline{toc}{chapter}{\contentsname}
\tableofcontents
\newpage
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
%% Chapter 1
\chapter{What is the answer to the ultimate question?}
The answer is 42!\todo[inline]{A note \emph{not} in a float}
\begin{figure}[htb]
\centering
\includegraphics[width=\textwidth]{graphics/timelt2ps_hMom_Pt___hMom_Eta___hIPchi2_time.pdf}
\caption{Why 42, and not 43? \todo[inline]{A note in a float}}
\end{figure}
\end{document}
不幸的是,我不知道在 MWE 中包含图形文件的习惯是什么,所以我把它省略了。我想包括任何 pdf 都可以。一些观察:
- 当我删除时
\listoffigures
,错误消失, - 当我添加一个简短的标题
\caption[short]{long \todo[inline]{note}}
时,错误似乎又消失了。
所以我猜问题出在排版上listoffigures
。目前我有一个解决方法,但我想了解出了什么问题,以及将来如何解决类似的问题。我特别感兴趣,因为我的搜索! Leaders not followed by proper glue.
导致了这一页;这让我更加好奇!
答案1
首先,我将提供的示例稍微精简一下,直到它更接近最小工作示例(MWE)
\documentclass{article}
\usepackage{todonotes}
\usepackage{hyperref}
\begin{document}
\listoffigures
\begin{figure}
\caption{Why 42, and not 43? \todo[inline]{A note in a float}}
\end{figure}
\end{document}
然后确定问题在于试图在图形列表中绘制插入的todonote,而那里不允许绘制这样的东西。
在标题中插入待办事项有两种方法。我更喜欢以下方法,即将待办事项放在标题之外。
\begin{figure}
\caption{A figure caption.}
\todo[inline]{Need to insert the figure}
\end{figure}
另一种方法是为不带 todonote 的图形列表指定文本。
\caption[Short caption]{Why 42, and not 43? \todo[inline]{A note in a float}}
下面的例子中给出了两种方法。
\documentclass{article}
\usepackage{todonotes}
\usepackage{hyperref}
\begin{document}
\listoffigures
\begin{figure}
% The line below casuses problems, as the inline note will be inserted in the list of figures
% which causes an error.
%\caption{Why 42, and not 43? \todo[inline]{A note in a float}}
% The line below works, as a different text (short caption) is given to the list of figures.
\caption[Short caption]{Why 42, and not 43? \todo[inline]{A note in a float}}
\end{figure}
% The prefered way of inserting todo notes is to place them outside the caption.
\begin{figure}
\caption{A figure caption.}
\todo[inline]{Need to insert the figure}
\end{figure}
\end{document}
答案2
只需使用 \protect。这是一个脆弱的指挥
\begin{figure}
\caption{Why 42, and not 43? \protect \todo[inline]{A note in a float}}
\end{figure}