![是否可以声明脚注编号右对齐但使用动态宽度?](https://linux22.com/image/318394/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%A3%B0%E6%98%8E%E8%84%9A%E6%B3%A8%E7%BC%96%E5%8F%B7%E5%8F%B3%E5%AF%B9%E9%BD%90%E4%BD%86%E4%BD%BF%E7%94%A8%E5%8A%A8%E6%80%81%E5%AE%BD%E5%BA%A6%EF%BC%9F.png)
我们的文档有 1 到 100 多个脚注。我想查看脚注编号
- 与脚注文本右对齐
- 用于脚注编号的空间应根据特定页面上脚注的位数动态调整。
- 将文本和脚注段落的缩进设置为相同
听起来很复杂,对吧?下面是一个例子:如果我在一页上只有一位脚注,它应该如下所示:
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 example
或pdftex 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
使用这些信息进行缩进。