乳胶中改进的xfloat导致失控的争论

时间:2015-03-20 19:45:32

标签: latex

我需要使用自定义的文档类来修改xfloat ...

\input{report.cls}

% Single Space Figures, Tables, and Footnotes
% Redefine the macro used for floats (including figures and tables) so
% that single spacing is used.  (Note \def\figure{\@float{figure}set
% single spacing} doesn't work because figure has an optional argument)
\def\@xfloat#1[#2] {
  \ifhmode
    \@bsphack\@floatpenalty -\@Mii
  \else
    \@floatpenalty-\@Miii
  \fi
  \def\@captype{#1}
  \ifinner
    \@parmoderr\@floatpenalty\z@
  \else\@next\@currbox\@freelist {
    \@tempcnta\csname ftype@#1\endcsname
    \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
    \@tfor \@tempa :=#2\do {
      \if\@tempa h\advance\@tempcnta \@ne\fi
      \if\@tempa t\advance\@tempcnta \tw@\fi
      \if\@tempa b\advance\@tempcnta 4\relax\fi
      \if\@tempa p\advance\@tempcnta 8\relax\fi
    }
    \global\count\@currbox\@tempcnta
  } \@fltovf\fi
  \global\setbox\@currbox\vbox\bgroup
  \def\baselinestretch{1}\@normalsize
  \boxmaxdepth\z@

% leave captions indented, I hope
% \hsize\columnwidth
  \@parboxrestore
}

但是,在使用float ...

创建文档时
\documentclass{customclass}
\begin{document}
\begin{figure}
TEST
\end{figure}
\end{document}

我收到了错误......

  

失控的争论? tbp] TEST \ end {figure}!段落之前结束   \ @xfloat完成了。                      \ par l.7

2 个答案:

答案 0 :(得分:0)

看来断线造成了问题。将整个块放在同一行的文档类中可以解决问题。

答案 1 :(得分:0)

这里有两件事:

  1. \def的参数文字非常特别,如果更改它应该小心。例如,

    \def\abc#1[#2] {...}
    

    需要\abc{..}[..] 中的尾随空格。

  2. \def(LaTeX的\newcommand*)在其定义中不允许段落(空行或显式\par)。为此,您需要使用\long\def(LaTeX的\newcommand)。

  3. 在大多数情况下,使用补丁程序很容易对宏进行小的更改(和添加)。此类修补程序由etoolboxxpatchregexpatch提供。