考虑以下代码:
\documentclass[12pt]{book}
%\usepackage[para]{footmisc}
\usepackage{footmisc}
\usepackage{perpage}
\MakePerPage{footnote}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
\begin{document}
A sentence.\footnote{First footnote}
Another sentence.\footnote{Second footnote}
Another sentence.\footnote{Third footnote}
A sentence.\footnote{Fourth footnote}
Another sentence.\footnote{Fifth footnote}
Another sentence.\footnote{Sixth footnote}
Another sentence.\footnote{Seventh footnote. This is a longer footnote to see what happens when it continues on to a second line.}
\end{document}
产生输出
请注意脚注标记的缩进以及它们与相应注释的紧密接近。
\usepackage{footmisc}
但是,当我不使用 而是使用 来运行代码时\usepackage[para]{footmisc}
,我得到以下显示:
请注意 (1) 脚注的缩进被删除,以及 (2) 每个脚注与其对应注释之间增加了额外的间距。
问题:是什么原因导致这种情况发生以及我该如何覆盖它;也就是说,我该如何运行代码并\usepackage[para]{footmisc}
保持脚注标记的先前缩进以及注释与脚注标记的接近度,如第一个输出中所示?
谢谢。
答案1
这两个问题都源于footmisc
包中的定义。
第一期:标记后的差距
我发现,将 硬连线\unskip
为脚注的初始文本可以解决para
模式中符号后的间隙。
这让我希望问题是由于缺少 而插入的杂散空格%
。坏消息是……我在包中没有发现这种情况。但最好的消息是!!我发现故意引入空格的地方:
\long\def\@makefntext#1{\leavevmode
\@makefnmark\nobreak
\hskip.5em\relax#1%
}
0.5em\hskip
是间隙的根源。\hskip.5em
从定义中删除 即可完全消除间隙。
\makeatletter
\long\def\@makefntext#1{\leavevmode
\@makefnmark\nobreak
\relax#1%
}
\makeatother
第二期:缩进
上面的代码解决了标记后不雅的空白,但没有解决缩进问题。不清楚原作者是想让所有以新脚注开头的行都缩进,还是只让脚注的第一行缩进。
所以我在这里讨论这两种可能性。相关的宏是
\renewcommand\@footnotetext[1]{%
\insert\footins{%
\ifFN@setspace
\let\baselinestretch\FN@baselinestretch
\fi
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth \dp\strutbox
\floatingpenalty\@MM
\hsize\columnwidth
\@parboxrestore
\protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
\color@begingroup
\setbox\FN@tempboxa=\hbox{%
%% NEXT LINE IS ADDED IN IF MULTI-LINE INDENTS DESIRED
\mbox{}%
%% NEXT LINE IS ADDED IN FOR BOTH CASES
\hskip\footglue\nobreak
%%
\@makefntext{\ignorespaces#1\strut
\penalty-10\relax
%% NEXT LINE IS COMMENTED OUT IN BOTH CASES
% \hskip\footglue
}% end of \@makefntext parameter
}% end of \hbox
\dp\FN@tempboxa=0pt
\ifFN@etex
\ht\FN@tempboxa=\dimexpr\wd\FN@tempboxa *
\footnotebaselineskip / \columnwidth\relax
\else
\ht\FN@tempboxa=\fudgefactor\wd\FN@tempboxa
\fi
\box\FN@tempboxa
\color@endgroup
}%
\FN@mf@prepare
}
查找以 开头的评论,以%%
了解我的调整。它们相当于将(牢不可破的)胶水从脚注后面移到前面。
在这两种情况下,都会注释掉一行并添加一行或两行。对于上面显示的定义,只要一行以新的脚注开头,就会提供缩进:
如果我切换到初始缩进解决方案,通过注释掉\mbox{}
已添加的行,我会得到以下结果:
总而言之,这里有一个显示两个修复的 MWE:
\documentclass[12pt]{book}
\usepackage[para]{footmisc}
%\usepackage{footmisc}
\usepackage{perpage}
\MakePerPage{footnote}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
\makeatletter
\long\def\@makefntext#1{\leavevmode
\@makefnmark\nobreak
\relax#1%
}
\renewcommand\@footnotetext[1]{%
\insert\footins{%
\ifFN@setspace
\let\baselinestretch\FN@baselinestretch
\fi
\reset@font\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth \dp\strutbox
\floatingpenalty\@MM
\hsize\columnwidth
\@parboxrestore
\protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
\color@begingroup
\setbox\FN@tempboxa=\hbox{%
%% NEXT LINE IS ADDED IN IF MULTI-LINE INDENTS DESIRED
\mbox{}%
%% NEXT LINE IS ADDED IN FOR BOTH CASES
\hskip\footglue\nobreak
%%
\@makefntext{\ignorespaces#1\strut
\penalty-10\relax
%% NEXT LINE IS COMMENTED OUT IN BOTH CASES
% \hskip\footglue
}% end of \@makefntext parameter
}% end of \hbox
\dp\FN@tempboxa=0pt
\ifFN@etex
\ht\FN@tempboxa=\dimexpr\wd\FN@tempboxa *
\footnotebaselineskip / \columnwidth\relax
\else
\ht\FN@tempboxa=\fudgefactor\wd\FN@tempboxa
\fi
\box\FN@tempboxa
\color@endgroup
}%
\FN@mf@prepare
}
\makeatother
\begin{document}
A sentence.\footnote{First footnote}
Another sentence.\footnote{Second footnote}
Another sentence.\footnote{Third footnote}
A sentence.\footnote{Fourth footnote}
Another sentence.\footnote{Fifth footnote}
Another sentence.\footnote{Sixth footnote}
Another sentence.\footnote{Seventh footnote. This is a longer footnote to see what happens when it continues on to a second line.}
\end{document}