为什么在水平模式下不能在 \vbox 或 \hbox 内使用 \footnote?

为什么在水平模式下不能在 \vbox 或 \hbox 内使用 \footnote?

在纯 TeX 中的定义\footnote如下

% all from the Appendix B of The TeXbook
\newinsert\footins
\def\footnote#1{\let\@sf=\empty % parameter #2 (the text) is read later
  \ifhmode\edef\@sf{\spacefactor=\the\spacefactor}\/\fi
  #1\@sf\vfootnote{#1}}

\def\vfootnote#1{\insert\footins\bgroup ... \futurelet\next\fo@t}

所有插入的脚注都将在 中\box\footins,但我们在 \vbox 中

\vbox{footnote\footnote*{you are reading a footnote}} 

脚注文本将不会位于当前页面的底部。

% now we are in vertical mode when encountering the \hbox
\hbox{insert footnote.\footnote*{this is ok.}}

还行吧

其他

% after have entered the horizontal mode
the first paragraph \hbox{an hbox.\footnote*{a footnote}}

这也让我很不高兴。

现在的问题是,为什么我们不能在水平模式下的 vbox 或 hbox 中使用脚注宏,甚至是盒子内的盒子?是不是因为我们进入一个盒子时,会同时进入一个组?

答案1

这不是分组,而是框级别。\footnote插入节点放入当前列表中。当分页器将主垂直列表拆分成页面时,它会将主垂直列表中要在 box255 中使用的部分交给输出例程,并将所有与插入相关的脚注文本交给在那个列表中 到框中的输出例程footins。插入不在主垂直列表中的节点无效果。

最终结果是,插入节点(和类似的标记)必须直接插入到主垂直列表(LaTeX 术语中的外部 par 模式)或该列表段落中的外部水平模式中(当它们已迁移从水平模式到垂直列表,作为换行算法的一部分进行构建。

相关内容