我正在重新定义脚注布局并希望显示它们总是在页面底部。对于纯文本,只需\vfill
在定义的开头放置一个\footseprule
;如建议的那样这里。
如果我的文档包含很多很长的脚注,底部浮动([b]
选项)会放置在脚注下方(这是 article.cls 中的标准)。我尝试过在带有脚注的页面上抑制底部浮动,就像建议的那样这里但当每页都包含脚注时,底部浮动仍然放在下方。
我怎样才能实现底部浮动总是放置在文本区域的底部但位于脚注(规则)上方;没有使用任何附加包,尤其是footmisc
(这是针对类似问题最常建议的解决方案),或其他类。
这是我的 MWE:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{graphicx}
\makeatletter
\renewcommand\footnoterule{\vfill%
\kern-3\p@ \hrule \@width \textwidth \kern 2.6\p@ \kern 2\p@}
\makeatother
\begin{document}
\blindtext\footnote{\blindtext[2]}
\begin{figure}[!b]
\includegraphics[width=.5\textwidth]{example-image}
\end{figure}
\blindtext\footnote{\blindtext[7]}
\blindtext[3]\footnote{text}
\end{document}
编辑
再次阅读footmisc.sty
并考虑到@JohnKormylo 和@UlrikeFischer 的想法,我尝试\@makecol
通过重新排列各部分进行修改。因为据我所知,footmisc
将以下输出放在footnote
后面\@combinefloats
:
部分出处footmisc.sty
:
\def \@makecol {%
\@kernel@before@cclv
\setbox\@outputbox \box\@cclv
\@outputbox@removebskip
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
\@makecol@appendblocks
% Here the blocks are appended; i.e. a floatblock and a footnoteblock
\ifvbox\@kludgeins
\@makespecialcolbox
\else
\@makenormalcolbox
\fi
\global \maxdepth \@maxdepth
}
我尝试了一个非常简单的版本:
\gdef \@makecol {%
\setbox\@outputbox \box\@cclv
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
\@combinefloats
\ifvoid\footins
\else
\boxmaxdepth \@maxdepth
\unvbox \@cclv
\vskip \skip\footins
\color@begingroup
\normalcolor
\footnoterule
\unvbox \footins
\color@endgroup
\fi
\ifvbox\@kludgeins
\@makespecialcolbox
\else
\setbox\@outputbox \vbox to\@colht {%
\@texttop
\dimen@ \dp\@outputbox
\unvbox \@outputbox
\vskip -\dimen@
\@textbottom
}%
\fi
\global \maxdepth \@maxdepth
}
确实,底部浮动现在出现在文本区域之后。但所有脚注都被推到了下一页的顶部。因此,该方法可能显示正确的方向,但必须修复脚注的位置……
我会继续尝试并感谢其他人的提示或解决方案!
答案1
由于在使用包尝试修补\@makefntext
宏时出现了一些歧义,所以我回到了我自己的问题。etoolbox
footmisc
我刚刚对该footmisc
包进行了更详细的研究,并能够编辑脚注定义以及输出例程以满足我的所有要求。它包含一个经过改编的变体\@makefntext
,将脚注推到页面底部并放置浮动总是位于脚注之上;即使它们包含该[b]
选项。
我使用以下 MWE 测试了代码,以及一些更复杂的文档,包括章节、列表、图片、引文、很长的脚注等。到目前为止,我没有发现任何问题或冲突:
\documentclass[twoside]{article}
\makeatletter
% Editing footnotes to meet my formatting requirements
\newbox{\@fnbox} % New box for FN number
\newcommand*{\indent@fnmark}{2.5em} % indention between FN number and FN text
\renewcommand\@makefntext[1]{% Redfinition of FN
\bgroup
\setbox\@fnbox\hbox{\hb@xt@\indent@fnmark{\@thefnmark\hss}}
\leftmargin\wd\@fnbox
\rightmargin\z@
\linewidth \columnwidth
\advance \linewidth -\leftmargin
\parshape \@ne \leftmargin \linewidth
\@setpar{{\@@par}}%
\leavevmode
\llap{\box\@fnbox}%
#1
\par\egroup}
\renewcommand\footnoterule{\vfill%
\kern-3\p@ \hrule \@width \textwidth \kern 2.6\p@ \kern 2\p@}
\setlength{\skip\footins}{\baselineskip}
% Changing the output routine
\gdef \@makecol {%
\setbox\@outputbox \box\@cclv
\let\@elt\relax
\xdef\@freelist{\@freelist\@midlist}%
\global \let \@midlist \@empty
\@combinefloats % floats are placed before footnotes (\footins)
\ifvoid\footins
\else
\setbox\@outputbox \vbox {%
\boxmaxdepth \@maxdepth
\unvbox \@outputbox
\vskip \skip\footins
\color@begingroup
\normalcolor
\footnoterule
\unvbox \footins
\color@endgroup}%
\fi
\ifvbox\@kludgeins
\@makespecialcolbox
\else
\setbox\@outputbox \vbox to\@colht {%
\@texttop
\dimen@ \dp\@outputbox
\unvbox \@outputbox
\vskip -\dimen@
\@textbottom
}%
\fi
\global \maxdepth \@maxdepth
}
\makeatother
\usepackage{blindtext}
\usepackage{graphicx}
\begin{document}
\blindtext\footnote{Some Text}
\begin{figure}[b]
\includegraphics[width=.5\textwidth]{example-image}
\end{figure}
\blindtext\footnote{\blindtext[5]}
\begin{figure}
\includegraphics[width=.5\textwidth]{example-image}
\end{figure}
\begin{figure}[b]
\includegraphics[width=.5\textwidth]{example-image}
\end{figure}
\begin{figure}[b]
\includegraphics[width=.5\textwidth]{example-image}
\end{figure}
\blindtext[4]\footnote{text}
\end{document}
当然,尽管我进行了全面的测试,但可能还是存在一些隐藏的缺陷。如果有人注意到这样的冲突,我会很高兴他/她能给我提示。