脚注:数字与文本之间的距离

脚注:数字与文本之间的距离

参见此文:

\documentclass{article}


\makeatletter
\renewcommand\@makefntext[1]{%
    \parindent 1em%
    \noindent\hbox{\sf\bfseries\@thefnmark}\hspace*{.7em plus 0pt minus 0pt}#1}
\makeatother

\begin{document}
  Hello\footnote{I am a footnote!}\footnote{I am another footnote}.
\end{document}

其结果是:

enter image description here

数字和脚注之间的距离为 0.7 em。但是,当我将字体更改为具有比例宽度数字的字体时,这会导致左侧脚注块不整齐(请参阅下面的 mwe - 这不反映我的真实文档,因为我可以简单地删除\proportionalnumsmwe 中的命令):

enter image description here

% mwe with proportional figures and more footnote text
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{libertine,blindtext}


\makeatletter
\renewcommand\@makefntext[1]{%
   \parindent 1em%
    \noindent\hbox{\proportionalnums{\@thefnmark}}\hspace*{.7em plus 0pt minus 0pt}#1}
\makeatother

\begin{document}
Hello\footnote{I am a footnote!}\footnote{I am another footnote \blindtext}.
\end{document}

multiline footnotes

问题:我如何才能始终确保脚注的开头位于相同的水平位置(对于每个具有相同数量数字的编号,脚注 1-9 的起始级别与 10-99 和 100 及以上不同)。

解决方案可能是\hbox to ...{..},宽度取决于脚注中​​的数字位数。我也遇到过这种情况,有时我会临时重新定义\def\thefootnote{*}为将 用作*脚注符号而不是字符。这应该算作“一位数字”。

编辑:我已将第二个 mwe 更改为包含更多文本以说明多行脚注

答案1

您的代码存在问题,因为您\hspace在设置 之后放置了\@thefnmark。您可以通过更改 LaTeX 的版本来解决这个问题,该版本为:

\newcommand\@makefntext[1]{%
  \parindent 1em%
  \noindent
  \hb@[email protected]{\hss\@makefnmark}#1}

使用包的更像 LaTeX 的方法ifthen是:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{libertine,blindtext,ifthen}

\makeatletter
\renewcommand\@makefntext[1]{%
  \parindent 1em%
  \noindent
  \ifthenelse{\value{footnote}>99}{%
    \hb@xt@ 30\p@
  }{%
    \ifthenelse{\value{footnote}<9}{%
      \hb@xt@ 10\p@
    }{%
      \hb@xt@ 20\p@
    }%
  }%
  {\sffamily\bfseries\@thefnmark\hss}#1}
\makeatother

\begin{document}
Hello\footnote{I am a footnote!}\footnote{I am another footnote
  \blindtext}.
\addtocounter{footnote}{15}%
Hello\footnote{I am a footnote!}\footnote{I am another footnote
  \blindtext}.
\addtocounter{footnote}{99}%
Hello\footnote{I am a footnote!}\footnote{I am another footnote
  \blindtext}.
\end{document}

enter image description here

答案2

调整长度以适合您自己:我使用 10pt 作为固定距离,每个数字使用 0.5em。

当然,这假设脚注标记扩展为正数。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{libertine}

\usepackage{expl3}

\makeatletter
\renewcommand\@makefntext[1]{%
  \proportionalnums{\bfseries
    \makebox[\getfnmarkwidth\@thefnmark][l]{%
      \proportionalnums{\@thefnmark}%
    }%
  }%
  #1%
}
\makeatother

\ExplSyntaxOn
\cs_new_protected:Nn \getfnmarkwidth:n
 {
  \dim_eval:n { 10pt + .5em * \fp_eval:n { floor(ln(#1)/ln(10),0) + 1 } }
 }
\cs_generate_variant:Nn \getfnmarkwidth:n { V }
\cs_set_eq:NN \getfnmarkwidth \getfnmarkwidth:V
\ExplSyntaxOff

\begin{document}
Hello\footnote{I am a footnote!}\footnote{I am another footnote.}

\setcounter{footnote}{9}

Hello\footnote{I am a footnote!}\footnote{I am another footnote.}
Hello\footnote{I am a footnote!}\footnote{I am another footnote.}

\setcounter{footnote}{99}
Hello\footnote{I am a footnote!}\footnote{I am another footnote.}
Hello\footnote{I am a footnote!}\footnote{I am another footnote.}

\end{document}

解释:floor(ln(#1)/ln(10),0)+1是 的位数#1

enter image description here

相关内容