使用 etoolbox 时 \preto 放置错误

使用 etoolbox 时 \preto 放置错误

我观察到,如果表格不适合设置的页面,则当表格放在下一页时,通过 etoolbox 中的 \preto 向表格(或图形)列表添加文本无法正常工作。

考虑以下代码

\documentclass[twoside,a4paper]{memoir}

\usepackage{etoolbox, tocloft}
\preto\figure{%
  \ifnum\value{figure}=0\addtocontents{lof}{{\bfseries Chapter \thechapter\vskip10pt}}\fi
}
\preto\table{%
  \ifnum\value{table}=0\addtocontents{lot}{{\bfseries Chapter \thechapter\vskip10pt}}\fi
}

\begin{document}

\cleardoublepage
\tableofcontents
\cleardoublepage
\listoftables
\cleardoublepage

\chapter{Chapter}

blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
\\

blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
\\

blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
\\

blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
\\

%blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 

\begin{table}
  \begin{center}
  \caption{My table's caption}
    \begin{tabular}{l c c} 
        \hline
        column 1 & column 2 & column 3 \\
        \hline
        r1 & r2 & r3 \\
        r1 & r2 & r3 \\
        r1 & r2 & r3 \\
        r1 & r2 & r3 \\
        \hline
    \end{tabular}
  \end{center}
\end{table}

\end{document}

如果我最后一条评论是“blah blah blah”,那么表格列表如下:

表格列表

第1章

1.1 我的表格标题 ... 6

如果我删除注释字符,那么表格列表就会变得很奇怪,读起来就像

表格列表

1.1 我的表格标题 ... 6

第1章

如果我强制将表格置于 [h]ere,问题就解决了,但我更喜欢将表格置于顶部。有人能指出如何解决这个问题吗?

谢谢你!

答案1

最好将注释添加到章节制作命令中;回忆录中有一个\mempostaddchaptertotochook用于此目的的钩子。

以下代码适用于我在 GuIT 论坛上的回答;如您所见,仅当在章节中找到一些表格(或图形)时才会打印注释。

\documentclass[twoside,a4paper]{memoir}

\renewcommand\mempostaddchaptertotochook{%
  \addchaptertoloft{lof}%
  \addchaptertoloft{lot}%
}
\def\addchaptertoloft#1{% 
   \addtocontents{#1}{% 
     \protect\xcontentsline{chapter} 
      {\chaptername\ \thechapter\protect\nopagebreak\protect\vspace{1ex}}{}}}
\makeatletter
\def\xcontentsline#1#2#3{\@ifnextchar\contentsline 
  {\contentsline{#1}{#2}{#3}}{}} 
\makeatother


\newcommand{\blah}{%
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
  blah blah blah blah\par}

\begin{document}

\tableofcontents*
\listoftables

\chapter{Chapter}

\blah\blah\blah\blah

\begin{table}
\centering

\caption{My table's caption}

\begin{tabular}{l c c} 
\hline
column 1 & column 2 & column 3 \\
\hline
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
\hline
\end{tabular}

\end{table}

\chapter{Chapter}

\blah\blah\blah\blah

\chapter{Chapter}

\blah \blah \blah \blah

\begin{table}
\centering

\caption{My table's caption}

\begin{tabular}{l c c} 
\hline
column 1 & column 2 & column 3 \\
\hline
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
r1 & r2 & r3 \\
\hline
\end{tabular}

\end{table}

\end{document}

在此处输入图片描述

不要center在里面使用figuretable,但是\centering。另外,不要\\在段落末尾添加。


请注意,当hyperref使用时,\xcontentsline应使用不同的定义。将上面的代码更改为

\makeatletter
\def\xcontentsline#1#2#3{\@ifnextchar\contentsline 
  {\contentsline{#1}{#2}{#3}{}{}}{}} % two {} groups for hyperref
\makeatother

(其余部分保持不变)。此更改也适用于hyperref不使用的情况。

相关内容