大脚怪何时会忽略“para”设置?

大脚怪何时会忽略“para”设置?

在以下文档中,C 级脚注是垂直排版的,尽管它们完全可以放在段落中(我猜)。有人知道为什么会发生这种情况吗?第一次看代码时,我没有看到原因。

\documentclass{article}
\pagestyle{empty}
\setlength\textwidth{303.0pt}
\setlength\textheight{14\baselineskip}

\usepackage[ruled]{bigfoot}
\DeclareNewFootnote[para]{default}
\DeclareNewFootnote[para]{B}[alph] \MakePerPage{footnoteB}
\DeclareNewFootnote[para]{C}[Alph] \MakePerPage{footnoteC}

\begin{document}
Some text\footnote{A first.} with a footnote. Another
sentence\footnote{Second with a note.\footnoteB{A sub-note}} with a
footnote. Some text\footnote{A further sample.}  with two footnotes
here.\footnote{Another sample\footnoteB{A controverial\footnoteC{A
            commentary on the commentary} and lengthly sub-note going
         on for a number\footnoteC{Another commentary} of
        lines.\footnoteC{Final  commentary}}}
Some more text. More text to fill up the pages in the example. A last
note with notes.\footnote{Again\footnoteB{A b-level
    commentary\footnoteC{Being scrutinized!}}}
\end{document}

结果如下所示: 在此处输入图片描述

PS 我知道代码中隐藏的两个参数,但它们似乎并不影响它。

答案1

经过几个小时的调试,我想我可以回答我自己的问题,希望能帮助其他遇到这个问题的人。

问题 1:

看起来,只要有超过 2 个连续级别的脚注要求“para”,bigfoot 就会遇到麻烦,事实上,情况确实如此,这也是 C 注释是垂直的原因之一。

可以使用以下补丁来修复该问题:

\usepackage{etoolbox}

\makeatletter
\patchcmd\FN@makefnstart
  {\ifx\FN@par\par\else}
  {\ifx\FN@indent\indent\else}
  {\typeout{patched \string\FN@makefnstart}}{\Error}

然而,事实证明这只适用于非常短的脚注......

问题2:

bigfoot 在水平设置项目时,会在项目之间使用一些“神奇的惩罚数字”。事实证明,当脚注行的长度已经达到行长的 1/3 时,它就会受到小于 -500 的惩罚。另一方面,bigfoot 将\linepenalty内部添加到每一行的额外惩罚设置为 500+(无论之前是多少,例如 10)。

因此,如果您违反了其中一个魔法惩罚,那么在段落中多写一行会给您带来奖励,因为这会产生负面的缺点。

因此,即使有了上述补丁,我的示例仍然保持不变,另外还需要一个补丁来弥补缺点,即使额外的线路更加昂贵:

\patchcmd\@makefnstartbox
  {\advance\linepenalty500\relax}
  {\advance\linepenalty1000\relax}
  {\typeout{patched \string\@makefnstartbox}}{\Error}

\makeatother

这样我就从上面的例子中得到了我想要的东西:

在此处输入图片描述

相关内容