是否可以声明脚注编号右对齐但使用动态宽度?

是否可以声明脚注编号右对齐但使用动态宽度?

我们的文档有 1 到 100 多个脚注。我想查看脚注编号

  1. 与脚注文本右对齐
  2. 用于脚注编号的空间应根据特定页面上脚注的位数动态调整。
  3. 将文本和脚注段落的缩进设置为相同

听起来很复杂,对吧?下面是一个例子:如果我在一页上只有一位脚注,它应该如下所示:

some text^4 and more text^5
-----------------
4 Foo bar
5 Bar Baz

如果使用一位或两位数字,则应如下所示:

some text^9 and more text^10
-----------------
 9 Foo bar
10 Bar Baz

等等。

目前我使用 deffootnote 选项如下:

\documentclass{scrartcl}

\deffootnote{1.85em}{1.85em}{\thefootnotemark\hspace{0.5em}}

\usepackage{blindtext}% dummy text

\usepackage{hyperref}
\begin{document}

\setcounter{footnote}{6} 

a\footnote{\blindtext}b\footnote{\blindtext}

\newpage

a\footnote{\blindtext}b\footnote{\blindtext}

\newpage

\setcounter{footnote}{98} 

a\footnote{\blindtext}b\footnote{\blindtext}

\end{document}

但我必须对所有脚注编号使用固定宽度,即与三位数脚注编号兼容的宽度。

答案1

这是一个有趣的问题,因为它需要异步处理脚注和页面。但是它\write可以使用 来解决。我使用 OPmac 在纯 TeX 中展示了这种解决方案,因为我不支持 LaTeX。我的例子表明这个问题是可以解决的。如果需要,你可以从中得到启发,并在其他 TeX 格式中使用这些想法。

\def\Xfnotei#1#2{\sdef{fnpg:#1}{#2}\sdef{fntpg:#2}{#1}}
\input opmac

\runningfnotes
\def\thefnote{$^{\the\fnotenum}$}
\def\fnotehook{\def\thefnote{\fnindent \kern.5em\llap{\the\fnotenum}\kern.5em
   \expandafter\wref\expandafter\Xfnotei
      \expandafter{\expandafter{\the\fnotenum}{\the\pageno}}}}

\def\fnmax{\csname fntpg:\csname fnpg:\the\fnotenum\endcsname\endcsname}
\def\fnindent{\isdefined{fnpg:\the\fnotenum}\iftrue
   \ifnum\fnmax<10                    % one digit footnotes (or default)
   \else \ifnum\fnmax<100  \kern.5em  % two digit footnotes  
   \else \ifnum\fnmax<1000 \kern1em   % three digit footnotes
   \else                   \kern1.5em % four digit footnotes
   \fi\fi\fi\fi
}
\let\textindent=\noindent

A test:

a\fnote{aaa} b\fnote{bbb} c\fnote{ccc} d\fnote{ddd}
e\fnote{eee} f\fnote{fff}

\vfil\break

g\fnote{ggg} h\fnote{hhh} i\fnote{iii} j\fnote{jjj} 
k\fnote{kkk}.

\end

如果你想尝试一下,你可以运行tex examplepdftex example,不latex example。你必须运行 TeX 两次才能得到结果。

解释:每个脚注都有唯一的编号\the\fnotenum,将使用宏将其打印为标记\thefnote。此宏有两种变体,默认用于文内标记,重新定义\fnotehook为脚注中的标记。此标记定义如下:

\fnindent \kern.5em \llap{\the\fnotenum}\kern.5em \write...

\fnindent宏在第一次 TeX 运行中不执行任何操作,因此所有脚注都排版为一位数字的 foontnote,数字在左侧重叠。但\write将所需信息写入.ref文件,该文件在第二次(及以后)TeX 运行中由 OPmac 读取。信息格式如下:

\Xfnotei{fnote-number}{page-number}

\Xfnotei将此信息保存为以下形式:

  • \fnpg:fnote-number包括page-number
  • 宏包含本页中的\fntpg:page-number最大值。fonte-number

最后,宏\fnindent使用这些信息进行缩进。

相关内容