在 minipage 环境中,我反复需要一些预定义的脚注(带有固定的样板文本),这些脚注应该使用符号脚注标记(为了更好的可检测性)以及自动编号的“正常”脚注。
在同一个小页面中,这种“特殊”的脚注可能会被引用多次,但脚注文本每个小页面只能出现一次。
特定脚注标记与其文本之间的关联是预先固定的。由于这些“特殊”脚注的数量是固定的且相对较小,我认为我可以使用硬编码的负值作为脚注计数器(以避免干扰正常计数)并使用硬编码的符号作为计数器的值(即\ddag
、\ast
等等)。
这个 MWE 显示了我走了多远
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
%\usepackage{fnpct}
\usepackage[unicode,final]{hyperref}
\makeatletter
\newcommand*{\specialfnmark}{%
%\count255=\value\@mpfn% Originally, \@mpfn is stepped. Here, we save the old value and set \@mpfn to 0, -1, -2, and so on.
%\setcounter{\@mpfn}{0}%
\protected@xdef\@thefnmark{\ensuremath{\ddag}}% Originally: \protected@xdef\@thefnmark{\thempfn}
\@footnotemark%
%\setcounter{\@mpfn}{\count255}% Restore old value
}
\newcommand*{\specialfntext}{%
\protected@xdef\@thefnmark{\ensuremath{\ddag}}% Originally: {\protected@xdef\@thefnmark{\thempfn}
\@footnotetext{A special footnote.}%
}
\makeatother
\begin{document}
\begin{minipage}{\textwidth}\specialfntext
Lore ipsum\footnote{1st minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
Lore ipsum\footnote{1st minipage, 2nd footnote.}.
\end{minipage}
\begin{minipage}{\textwidth}\specialfntext
Lore ipsum\specialfnmark.
Lore ipsum\footnote{2nd minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
\end{minipage}
\end{document}
请注意,为了成为 MWE,此 MWE 仅使用一种特殊脚注(即\specialfnmark
和)。完整的论文使用了几个这样的脚注(即、、、),宏成对出现。\specialfntext
\foofnmark
\foofntext
\thingyfnmark
\thingyfntext
这几乎实现了我想要实现的目标,但仍然存在两个问题。
从脚注标记到正确脚注文本的 PDF 链接不起作用。我收到以下错误:
Package hyperref Warning: Ignoring empty anchor on input line 28. pdfTeX warning (ext4): destination with the same identifier (name{Hfootnote.3}) has been already used, duplicate ignored pdfTeX warning (dest): name {Hfootnote.6} has been referenced but does not exist, replaced by a fixed one pdfTeX warning (dest): name{Hfootnote.4} has been referenced but does not exist, replaced by a fixed one pdfTeX warning (dest): name{Hfootnote.2} has been referenced but does not exist, replaced by a fixed one
如何使宏定义与兼容
hyperref
?我已经尝试修改计数器(参见 MWE 的注释行),但没有成功。是否可以另外使定义与
fnpct
包兼容,以便重新排序和水平调整句子的最后一个句号和脚注标记?
答案1
由于您想要多次使用脚注标记,因此您必须向 specialtext 添加多个锚点。hyperref 默认不执行此操作。您必须记录目标名称。\specialfntext
在 minipage 末尾发出以避免必须浏览辅助文件。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{fnpct}
\usepackage{expl3}
\makeatletter
\ExplSyntaxOn
\seq_new:N\l_nagmat_fndest_seq
\newcommand*{\specialfnmark}
{
\protected@xdef\@thefnmark{\ensuremath{\ddag}}
\@footnotemark\relax
\seq_put_right:Nx\l_nagmat_fndest_seq
{
\Hy@footnote@currentHref
}
}
\AdaptNoteMark \specialfnmark %add to fnpct.
\newcommand*{\specialfntext}
{
\protected@xdef\@thefnmark{\ensuremath{\ddag}}
\H@@mpfootnotetext
{
\seq_map_inline:Nn\l_nagmat_fndest_seq
{
\Hy@raisedlink{\hypertarget{##1}{\relax}}
}
A special footnote.
}
}
\ExplSyntaxOff
\makeatother
\usepackage[unicode,final]{hyperref}
\begin{document}
\begin{minipage}{\textwidth}
Lore ipsum\footnote{1st minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
Lore ipsum\footnote{1st minipage, 2nd footnote.}.
\specialfntext
\end{minipage}
\begin{minipage}{\textwidth}
Lore ipsum\specialfnmark.
Lore ipsum\footnote{2nd minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
\specialfntext
\end{minipage}
\end{document}