\usepackage{footmisc} 和 \usepackage[para]{footmisc} 之间的区别以及如何覆盖它们

\usepackage{footmisc} 和 \usepackage[para]{footmisc} 之间的区别以及如何覆盖它们

考虑以下代码:

\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}

相关内容