我该如何找出不良间距问题?

我该如何找出不良间距问题?

extarticle我使用了一个相当复杂的类,它建立在with选项之上twocolumn。它加载了很多包。其中之一是floatrow

有时,我会收到一个非常烦人的错误,如下面的屏幕截图所示:


问题


如您所见,两列严重偏移(左列向右,右列向左)。这种情况仅当环境中有图片(不一定在同一页上)时才会发生floatrow。如果没有floatrow,我永远不会遇到麻烦。

我没有成功制作出一个可以重现该问题的最小示例。所以我正在寻找一种方法来追踪该问题,也许可以使用一些\tracing...命令。我应该怎么做?

答案1

我最终设法应用@egreg 和@David Carlisle 在评论中告诉我的内容。

好吧,我不知道为什么(我很想知道为什么……),但罪魁祸首似乎位于\flrow@restyle(在floatrow.sty)定义的第四行。注释掉\textwidth\columnwidth似乎使问题消失。

\newcommand\flrow@restyle[1]{%
  \@namedef{#1}{\killfloatstyle\def\@captype{#1}\FR@redefs
    \flrow@setlist{{#1}}%
    %\textwidth\columnwidth <- Error here
    \edef\FBB@wd{\the\columnwidth}%
    \FRifFBOX\@@setframe\relax\@@FStrue\@float{#1}}%
  \@namedef{#1*}{\killfloatstyle\def\@captype{#1}\FR@redefs
    \flrow@setlist{{#1}{widefloat}{wide#1}}%
    \FRifFBOX\@@setframe\relax\@@FStrue\edef\FBB@wd{\the\textwidth}%
    \let\@xdblfloat\@xfloat\relax
    \FR@ifdoubleaswide
     {\if@twocolumn\else\let\@dblfloat\@float\fi}\relax
    \@dblfloat{#1}}%
  \expandafter\let\csname end#1\endcsname\float@end
  \expandafter\let\csname end#1*\endcsname\float@dblend
 \@ifundefined{@rotfloat}{}{%
  \@namedef{sideways#1}{\killfloatstyle\def\@captype{#1}\FR@redefs
    \flrow@setlist{{#1}{rotfloat}{rot#1}}%
    \columnwidth\textheight\edef\FBB@wd{\the\textheight}%
    \FRifFBOX\@@setframe\relax\@@FStrue
    \let\rotfloat@@makebox\float@makebox
    \let\float@makebox\rotfloat@makebox
    \@float{#1}}%
  \@namedef{endsideways#1}{\FBbuildtrue\float@end}
  \ifx\@rotdblfloat\undefined
   \@namedef{sideways#1*}{%
     \flrow@error{%
      You need rotating version 2.10 or newer to do this}%
     \@nameuse{sideways#1}}%
  \else
   \@namedef{sideways#1*}{\killfloatstyle\def\@captype{#1}\FR@redefs
     \flrow@setlist{{#1}{rotfloat}{rot#1}{widerotfloat}{widerot#1}}%
     \columnwidth\textheight\edef\FBB@wd{\the\textheight}%
     \FRifFBOX\@@setframe\relax\@@FStrue
     \let\@xdblfloat\@xfloat
     \let\rotfloat@@makebox\float@makebox
     \let\float@makebox\rotdblfloat@makebox
     \@dblfloat{#1}}%
  \fi
  \@namedef{endsideways#1*}{\FBbuildtrue\float@dblend}}
 \@ifundefined{wrapfloat}{}{%
   \@ifundefined{flrow@WF@rapt}{\let\flrow@WF@rapt\WF@rapt
   \def\WF@rapt[##1]##2{\FRifFBOX\@@setframe\relax\@@FStrue
     \dimen@##2\relax
     \ifdim\dimen@>\z@
       \edef\FBB@wd{\the\dimen@}\FB@fs@wd\dimen@\FBo@wd
     \fi
     \flrow@WF@rapt[##1]{\dimen@}%
       \the\FR@everyfloat\ignorespaces}%
   }{}%
   \@namedef{wrap#1}{\killfloatstyle\def\@captype{#1}%
     \FR@redefs\FBc@wd\z@
     \flrow@setlist{{#1}{wrapfloat}{wrap#1}}%
     \def\WF@floatstyhook{\let\@currbox\WF@box
       \ifFBbuild
         \global\setbox\WF@box\flrow@FB{\wd\WF@box}%
       \else
         \global\let\flrow@typ@tmpset\undefined
         \global\let\WF@box\@currbox
       \fi}%
     \@ifnextchar[\WF@wr{\WF@wr[]}}%]
   \@namedef{endwrap#1}{\endwrapfloat
     \@ifundefined{FloatHBarrier}{}\FloatHBarrier
     }}
 \@ifundefined{sf@@@subfloat}{}{\@ifundefined{c@sub#1}{\newsubfloat{#1}}{}}}

相关内容