参见此文:
\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}
其结果是:
数字和脚注之间的距离为 0.7 em。但是,当我将字体更改为具有比例宽度数字的字体时,这会导致左侧脚注块不整齐(请参阅下面的 mwe - 这不反映我的真实文档,因为我可以简单地删除\proportionalnums
mwe 中的命令):
% 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}
问题:我如何才能始终确保脚注的开头位于相同的水平位置(对于每个具有相同数量数字的编号,脚注 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}
答案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
。