在纯 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 模式)或该列表段落中的外部水平模式中(当它们已迁移从水平模式到垂直列表,作为换行算法的一部分进行构建。