Closed ldXiao closed 8 months ago
应解决以下问题:
^
之后应带有空格。
当一个脚注有多个链接时不能正常输出。例如:
\footnotemark\footnotemark\footnotetext{1}
\printfootnotes
修改过后之后只有\footnote
会产生反向链接,裸\footnotemark\footnotetext{....}
不会产生反向链接
问题:
所有 ^
链接都指向同一个脚注。
生成的 ^
目前是
<span><a href="#o1"><sup>^</sup></a></span><sup style="white-space:pre-wrap"> </sup>
应该是
<span><a href="#o1">^</a> </span>
注意不要使用 <sup>
(否则符号过小),不必使用 \
产生强制空格。
多个脚注同一标号的功能也应该实现,但目前不是必须的。
3,4已经修正
多个脚注同一标号的功能
,但是正确用法是x\footnotemark ... y\footnotemark ... z\footnote{text}
然后反向链接会指向最后一处\footnote
更完善的解决方案有点费脑子,我再想想
\def\@footnoteoriginrefcollection{}
\def\@footnotemark{%
\@inc{g.ctr-footnote}%
{%
\@settrue{text-sup}%
\@@set{ref-key}{footnote:{g.ctr-footnote}}%
\@ref{\thefootnote}%
\@footnoteorigin%
\@patch\@footnoteoriginrefcollection{\@footnoteoriginref}
}%
\@dec{g.ctr-footnote}%
}
......
\def\footnotetext#1{%
\@inc{g.ctr-footnote}%
\@footnotetext{
\@footnoteoriginrefcollection#1
}%
\def\@footnoteoriginrefcollection{}
}
\pdef\@footnoteorigin{%
\@inc{g.ctr-footnoteorigin}
\@@def\@currentlabel{^}%
\@@set{ref-prefix}{o}%
\@@bmk%
\@@label{footnote-origin:{g.ctr-footnoteorigin}}%
}
\pdef\@footnoteoriginref{%
{
\@inc{g.ctr-footnoteoriginref}
\@@set{ref-key}{footnote-origin:{g.ctr-footnoteoriginref}}%
\@ref{\thefootnoteorigin}%
}
}
假如能够用一个collection 把 footnoteoriginref存起来,每次\footnotemark
调用\@patch\@footnoteoriginrefcollection{\@footnoteoriginref}
,并且在printfootnotes
里面每行调用\@footnoteoriginrefcollection
的过程中的值就可以实现下图这样的效果
然而\@footnoteoriginrefcollection
只能存储命令被call的时候的值,而printfootnotes
在结尾也就是这些中间状态全部都丢失了
可能需要定义一个internal来存中间状态, 或者做一个\@@expand
来展开一层宏, 其余的方法我暂时还没想到
当然,我还有一个更简单的方法
把所有的脚标改为一个鼠标悬浮才出现的气泡<div>
,这样所有的链接就不用烦恼了
到这一步已经解决了多个footnotemark 各自reverse link 可以实现以下效果
每个反向链接^
都会跳转到对应的footnotemark
类似的机制也可以做多处引用参考文献的反向跳转
假如你对实现的效果没有意见,那么稍微清理一下就差不多可以合并了
上一个PR导致很多细碎commit进入了main branch,我的建议是用squash merge,或者我手动做一个单一的最终commit
需要修改的问题:
问题 4 未完全修正,需要将 <sup>^</sup>
改成 ^
(或者说明不这么做的理由)。
表格中不能正常插入脚注。例如
\footnotemark\footnotemark
\begin{tabular}{cc}
1\footnotetext{first} &
2\footnote{second}
\end{tabular}
\printfootnotes
会把第二个脚注的文字写成 4 5 second
,并产生一个编译错误。原来的版本没有此问题。
目前生成的脚注 HTML 是
<span><a href="#f1"><sup>1</sup></a></span><sup> </sup><span id="o1"></span>
脚注标记后面有个多余的空格 <sup> </sup>
,需要去掉,以符合某些排版需求,例如脚注后面有标点时就不能有空格。
你现在再试一下
在每处footnote调用处添加一个
footnote-origin:\thefootnote
的label,在printfoot
处引用此label生成效果如下
点击
^
将会返回脚标源头